~mmach/netext73/mesa_2004

« back to all changes in this revision

Viewing changes to src/intel/tools/intel_aub.h

  • Committer: mmach
  • Date: 2022-09-22 20:00:35 UTC
  • Revision ID: netbit73@gmail.com-20220922200035-j2mt0pv92d002zy3
2022-09-22 21:17:58

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2010 Intel Corporation
 
3
 *
 
4
 * Permission is hereby granted, free of charge, to any person obtaining a
 
5
 * copy of this software and associated documentation files (the "Software"),
 
6
 * to deal in the Software without restriction, including without limitation
 
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
8
 * and/or sell copies of the Software, and to permit persons to whom the
 
9
 * Software is furnished to do so, subject to the following conditions:
 
10
 *
 
11
 * The above copyright notice and this permission notice (including the next
 
12
 * paragraph) shall be included in all copies or substantial portions of the
 
13
 * Software.
 
14
 *
 
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 
21
 * IN THE SOFTWARE.
 
22
 *
 
23
 * Authors:
 
24
 *    Eric Anholt <eric@anholt.net>
 
25
 *
 
26
 */
 
27
 
 
28
/** @file intel_aub.h
 
29
 *
 
30
 * The AUB file is a file format used by Intel's internal simulation
 
31
 * and other validation tools.  It can be used at various levels by a
 
32
 * driver to input state to the simulated hardware or a replaying
 
33
 * debugger.
 
34
 *
 
35
 * We choose to dump AUB files using the trace block format for ease
 
36
 * of implementation -- dump out the blocks of memory as plain blobs
 
37
 * and insert ring commands to execute the batchbuffer blob.
 
38
 */
 
39
 
 
40
#ifndef _INTEL_AUB_H
 
41
#define _INTEL_AUB_H
 
42
 
 
43
#define AUB_MI_NOOP                     (0)
 
44
#define AUB_MI_BATCH_BUFFER_START       (0x31 << 23)
 
45
#define AUB_PIPE_CONTROL                (0x7a000002)
 
46
 
 
47
/* DW0: instruction type. */
 
48
 
 
49
#define CMD_AUB                 (7 << 29)
 
50
 
 
51
#define CMD_AUB_HEADER          (CMD_AUB | (1 << 23) | (0x05 << 16))
 
52
 
 
53
#define CMD_MEM_TRACE_REGISTER_POLL     (CMD_AUB | (0x2e << 23) | (0x02 << 16))
 
54
#define CMD_MEM_TRACE_REGISTER_WRITE    (CMD_AUB | (0x2e << 23) | (0x03 << 16))
 
55
#define CMD_MEM_TRACE_MEMORY_WRITE      (CMD_AUB | (0x2e << 23) | (0x06 << 16))
 
56
#define CMD_MEM_TRACE_VERSION           (CMD_AUB | (0x2e << 23) | (0x0e << 16))
 
57
 
 
58
/* DW1 */
 
59
# define AUB_HEADER_MAJOR_SHIFT         24
 
60
# define AUB_HEADER_MINOR_SHIFT         16
 
61
 
 
62
#define CMD_AUB_TRACE_HEADER_BLOCK (CMD_AUB | (1 << 23) | (0x41 << 16))
 
63
#define CMD_AUB_DUMP_BMP           (CMD_AUB | (1 << 23) | (0x9e << 16))
 
64
 
 
65
/* DW1 */
 
66
#define AUB_TRACE_OPERATION_MASK        0x000000ff
 
67
#define AUB_TRACE_OP_COMMENT            0x00000000
 
68
#define AUB_TRACE_OP_DATA_WRITE         0x00000001
 
69
#define AUB_TRACE_OP_COMMAND_WRITE      0x00000002
 
70
#define AUB_TRACE_OP_MMIO_WRITE         0x00000003
 
71
// operation = TRACE_DATA_WRITE, Type
 
72
#define AUB_TRACE_TYPE_MASK             0x0000ff00
 
73
#define AUB_TRACE_TYPE_NOTYPE           (0 << 8)
 
74
#define AUB_TRACE_TYPE_BATCH            (1 << 8)
 
75
#define AUB_TRACE_TYPE_VERTEX_BUFFER    (5 << 8)
 
76
#define AUB_TRACE_TYPE_2D_MAP           (6 << 8)
 
77
#define AUB_TRACE_TYPE_CUBE_MAP         (7 << 8)
 
78
#define AUB_TRACE_TYPE_VOLUME_MAP       (9 << 8)
 
79
#define AUB_TRACE_TYPE_1D_MAP           (10 << 8)
 
80
#define AUB_TRACE_TYPE_CONSTANT_BUFFER  (11 << 8)
 
81
#define AUB_TRACE_TYPE_CONSTANT_URB     (12 << 8)
 
82
#define AUB_TRACE_TYPE_INDEX_BUFFER     (13 << 8)
 
83
#define AUB_TRACE_TYPE_GENERAL          (14 << 8)
 
84
#define AUB_TRACE_TYPE_SURFACE          (15 << 8)
 
85
 
 
86
 
 
87
// operation = TRACE_COMMAND_WRITE, Type =
 
88
#define AUB_TRACE_TYPE_RING_HWB         (1 << 8)
 
89
#define AUB_TRACE_TYPE_RING_PRB0        (2 << 8)
 
90
#define AUB_TRACE_TYPE_RING_PRB1        (3 << 8)
 
91
#define AUB_TRACE_TYPE_RING_PRB2        (4 << 8)
 
92
 
 
93
// Address space
 
94
#define AUB_TRACE_ADDRESS_SPACE_MASK    0x00ff0000
 
95
#define AUB_TRACE_MEMTYPE_GTT           (0 << 16)
 
96
#define AUB_TRACE_MEMTYPE_LOCAL         (1 << 16)
 
97
#define AUB_TRACE_MEMTYPE_NONLOCAL      (2 << 16)
 
98
#define AUB_TRACE_MEMTYPE_PCI           (3 << 16)
 
99
#define AUB_TRACE_MEMTYPE_GTT_ENTRY     (4 << 16)
 
100
 
 
101
#define AUB_MEM_TRACE_VERSION_FILE_VERSION      1
 
102
 
 
103
/* DW2 */
 
104
 
 
105
#define AUB_MEM_TRACE_VERSION_DEVICE_MASK       0x0000ff00
 
106
#define AUB_MEM_TRACE_VERSION_DEVICE_SHIFT      8
 
107
 
 
108
#define AUB_MEM_TRACE_VERSION_METHOD_MASK       0x000c0000
 
109
#define AUB_MEM_TRACE_VERSION_METHOD_PHY        (1 << 18)
 
110
 
 
111
#define AUB_MEM_TRACE_REGISTER_SIZE_MASK        0x000f0000
 
112
#define AUB_MEM_TRACE_REGISTER_SIZE_DWORD       (2 << 16)
 
113
 
 
114
#define AUB_MEM_TRACE_REGISTER_SPACE_MASK       0xf0000000
 
115
#define AUB_MEM_TRACE_REGISTER_SPACE_MMIO       (0 << 28)
 
116
 
 
117
/* DW3 */
 
118
 
 
119
#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_MASK         0xf0000000
 
120
#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT         (0 << 28)
 
121
#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_PHYSICAL     (2 << 28)
 
122
#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT_ENTRY   (4 << 28)
 
123
 
 
124
/**
 
125
 * aub_state_struct_type enum values are encoded with the top 16 bits
 
126
 * representing the type to be delivered to the .aub file, and the bottom 16
 
127
 * bits representing the subtype.  This macro performs the encoding.
 
128
 */
 
129
#define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype))
 
130
 
 
131
enum aub_state_struct_type {
 
132
   AUB_TRACE_VS_STATE =                 ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1),
 
133
   AUB_TRACE_GS_STATE =                 ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2),
 
134
   AUB_TRACE_CLIP_STATE =               ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3),
 
135
   AUB_TRACE_SF_STATE =                 ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4),
 
136
   AUB_TRACE_WM_STATE =                 ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5),
 
137
   AUB_TRACE_CC_STATE =                 ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6),
 
138
   AUB_TRACE_CLIP_VP_STATE =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7),
 
139
   AUB_TRACE_SF_VP_STATE =              ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8),
 
140
   AUB_TRACE_CC_VP_STATE =              ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9),
 
141
   AUB_TRACE_SAMPLER_STATE =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa),
 
142
   AUB_TRACE_KERNEL_INSTRUCTIONS =      ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb),
 
143
   AUB_TRACE_SCRATCH_SPACE =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc),
 
144
   AUB_TRACE_SAMPLER_DEFAULT_COLOR =    ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd),
 
145
 
 
146
   AUB_TRACE_SCISSOR_STATE =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15),
 
147
   AUB_TRACE_BLEND_STATE =              ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16),
 
148
   AUB_TRACE_DEPTH_STENCIL_STATE =      ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17),
 
149
 
 
150
   AUB_TRACE_VERTEX_BUFFER =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0),
 
151
   AUB_TRACE_BINDING_TABLE =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100),
 
152
   AUB_TRACE_SURFACE_STATE =            ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200),
 
153
   AUB_TRACE_VS_CONSTANTS =             ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0),
 
154
   AUB_TRACE_WM_CONSTANTS =             ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1),
 
155
};
 
156
 
 
157
#undef ENCODE_SS_TYPE
 
158
 
 
159
/**
 
160
 * Decode a aub_state_struct_type value to determine the type that should be
 
161
 * stored in the .aub file.
 
162
 */
 
163
static inline uint32_t AUB_TRACE_TYPE(enum aub_state_struct_type ss_type)
 
164
{
 
165
   return (ss_type & 0xFFFF0000) >> 16;
 
166
}
 
167
 
 
168
/**
 
169
 * Decode a state_struct_type value to determine the subtype that should be
 
170
 * stored in the .aub file.
 
171
 */
 
172
static inline uint32_t AUB_TRACE_SUBTYPE(enum aub_state_struct_type ss_type)
 
173
{
 
174
   return ss_type & 0xFFFF;
 
175
}
 
176
 
 
177
/* DW3: address */
 
178
/* DW4: len */
 
179
 
 
180
#endif /* _INTEL_AUB_H */