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 /* DW1 */ 53 # define AUB_HEADER_MAJOR_SHIFT 24 54 # define AUB_HEADER_MINOR_SHIFT 16 55 56 #define CMD_AUB_TRACE_HEADER_BLOCK (CMD_AUB | (1 << 23) | (0x41 << 16)) 57 #define CMD_AUB_DUMP_BMP (CMD_AUB | (1 << 23) | (0x9e << 16)) 58 59 /* DW1 */ 60 #define AUB_TRACE_OPERATION_MASK 0x000000ff 61 #define AUB_TRACE_OP_COMMENT 0x00000000 62 #define AUB_TRACE_OP_DATA_WRITE 0x00000001 63 #define AUB_TRACE_OP_COMMAND_WRITE 0x00000002 64 #define AUB_TRACE_OP_MMIO_WRITE 0x00000003 65 // operation = TRACE_DATA_WRITE, Type 66 #define AUB_TRACE_TYPE_MASK 0x0000ff00 67 #define AUB_TRACE_TYPE_NOTYPE (0 << 8) 68 #define AUB_TRACE_TYPE_BATCH (1 << 8) 69 #define AUB_TRACE_TYPE_VERTEX_BUFFER (5 << 8) 70 #define AUB_TRACE_TYPE_2D_MAP (6 << 8) 71 #define AUB_TRACE_TYPE_CUBE_MAP (7 << 8) 72 #define AUB_TRACE_TYPE_VOLUME_MAP (9 << 8) 73 #define AUB_TRACE_TYPE_1D_MAP (10 << 8) 74 #define AUB_TRACE_TYPE_CONSTANT_BUFFER (11 << 8) 75 #define AUB_TRACE_TYPE_CONSTANT_URB (12 << 8) 76 #define AUB_TRACE_TYPE_INDEX_BUFFER (13 << 8) 77 #define AUB_TRACE_TYPE_GENERAL (14 << 8) 78 #define AUB_TRACE_TYPE_SURFACE (15 << 8) 79 80 81 // operation = TRACE_COMMAND_WRITE, Type = 82 #define AUB_TRACE_TYPE_RING_HWB (1 << 8) 83 #define AUB_TRACE_TYPE_RING_PRB0 (2 << 8) 84 #define AUB_TRACE_TYPE_RING_PRB1 (3 << 8) 85 #define AUB_TRACE_TYPE_RING_PRB2 (4 << 8) 86 87 // Address space 88 #define AUB_TRACE_ADDRESS_SPACE_MASK 0x00ff0000 89 #define AUB_TRACE_MEMTYPE_GTT (0 << 16) 90 #define AUB_TRACE_MEMTYPE_LOCAL (1 << 16) 91 #define AUB_TRACE_MEMTYPE_NONLOCAL (2 << 16) 92 #define AUB_TRACE_MEMTYPE_PCI (3 << 16) 93 #define AUB_TRACE_MEMTYPE_GTT_ENTRY (4 << 16) 94 95 /* DW2 */ 96 97 /** 98 * aub_state_struct_type enum values are encoded with the top 16 bits 99 * representing the type to be delivered to the .aub file, and the bottom 16 100 * bits representing the subtype. This macro performs the encoding. 101 */ 102 #define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype)) 103 104 enum aub_state_struct_type { 105 AUB_TRACE_VS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1), 106 AUB_TRACE_GS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2), 107 AUB_TRACE_CLIP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3), 108 AUB_TRACE_SF_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4), 109 AUB_TRACE_WM_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5), 110 AUB_TRACE_CC_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6), 111 AUB_TRACE_CLIP_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7), 112 AUB_TRACE_SF_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8), 113 AUB_TRACE_CC_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9), 114 AUB_TRACE_SAMPLER_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa), 115 AUB_TRACE_KERNEL_INSTRUCTIONS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb), 116 AUB_TRACE_SCRATCH_SPACE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc), 117 AUB_TRACE_SAMPLER_DEFAULT_COLOR = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd), 118 119 AUB_TRACE_SCISSOR_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15), 120 AUB_TRACE_BLEND_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16), 121 AUB_TRACE_DEPTH_STENCIL_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17), 122 123 AUB_TRACE_VERTEX_BUFFER = ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0), 124 AUB_TRACE_BINDING_TABLE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100), 125 AUB_TRACE_SURFACE_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200), 126 AUB_TRACE_VS_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0), 127 AUB_TRACE_WM_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1), 128 }; 129 130 #undef ENCODE_SS_TYPE 131 132 /** 133 * Decode a aub_state_struct_type value to determine the type that should be 134 * stored in the .aub file. 135 */ 136 static inline uint32_t AUB_TRACE_TYPE(enum aub_state_struct_type ss_type) 137 { 138 return (ss_type & 0xFFFF0000) >> 16; 139 } 140 141 /** 142 * Decode a state_struct_type value to determine the subtype that should be 143 * stored in the .aub file. 144 */ 145 static inline uint32_t AUB_TRACE_SUBTYPE(enum aub_state_struct_type ss_type) 146 { 147 return ss_type & 0xFFFF; 148 } 149 150 /* DW3: address */ 151 /* DW4: len */ 152 153 #endif /* _INTEL_AUB_H */ 154