1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2012 Rob Clark <[email protected]> 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker */ 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker #ifndef INSTR_A2XX_H_ 7*61046927SAndroid Build Coastguard Worker #define INSTR_A2XX_H_ 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Worker #define PACKED __attribute__((__packed__)) 10*61046927SAndroid Build Coastguard Worker 11*61046927SAndroid Build Coastguard Worker #include "util/u_math.h" 12*61046927SAndroid Build Coastguard Worker #include "adreno_common.xml.h" 13*61046927SAndroid Build Coastguard Worker #include "adreno_pm4.xml.h" 14*61046927SAndroid Build Coastguard Worker #include "a2xx.xml.h" 15*61046927SAndroid Build Coastguard Worker 16*61046927SAndroid Build Coastguard Worker /* 17*61046927SAndroid Build Coastguard Worker * ALU instructions: 18*61046927SAndroid Build Coastguard Worker */ 19*61046927SAndroid Build Coastguard Worker 20*61046927SAndroid Build Coastguard Worker typedef enum { 21*61046927SAndroid Build Coastguard Worker ADDs = 0, 22*61046927SAndroid Build Coastguard Worker ADD_PREVs = 1, 23*61046927SAndroid Build Coastguard Worker MULs = 2, 24*61046927SAndroid Build Coastguard Worker MUL_PREVs = 3, 25*61046927SAndroid Build Coastguard Worker MUL_PREV2s = 4, 26*61046927SAndroid Build Coastguard Worker MAXs = 5, 27*61046927SAndroid Build Coastguard Worker MINs = 6, 28*61046927SAndroid Build Coastguard Worker SETEs = 7, 29*61046927SAndroid Build Coastguard Worker SETGTs = 8, 30*61046927SAndroid Build Coastguard Worker SETGTEs = 9, 31*61046927SAndroid Build Coastguard Worker SETNEs = 10, 32*61046927SAndroid Build Coastguard Worker FRACs = 11, 33*61046927SAndroid Build Coastguard Worker TRUNCs = 12, 34*61046927SAndroid Build Coastguard Worker FLOORs = 13, 35*61046927SAndroid Build Coastguard Worker EXP_IEEE = 14, 36*61046927SAndroid Build Coastguard Worker LOG_CLAMP = 15, 37*61046927SAndroid Build Coastguard Worker LOG_IEEE = 16, 38*61046927SAndroid Build Coastguard Worker RECIP_CLAMP = 17, 39*61046927SAndroid Build Coastguard Worker RECIP_FF = 18, 40*61046927SAndroid Build Coastguard Worker RECIP_IEEE = 19, 41*61046927SAndroid Build Coastguard Worker RECIPSQ_CLAMP = 20, 42*61046927SAndroid Build Coastguard Worker RECIPSQ_FF = 21, 43*61046927SAndroid Build Coastguard Worker RECIPSQ_IEEE = 22, 44*61046927SAndroid Build Coastguard Worker MOVAs = 23, 45*61046927SAndroid Build Coastguard Worker MOVA_FLOORs = 24, 46*61046927SAndroid Build Coastguard Worker SUBs = 25, 47*61046927SAndroid Build Coastguard Worker SUB_PREVs = 26, 48*61046927SAndroid Build Coastguard Worker PRED_SETEs = 27, 49*61046927SAndroid Build Coastguard Worker PRED_SETNEs = 28, 50*61046927SAndroid Build Coastguard Worker PRED_SETGTs = 29, 51*61046927SAndroid Build Coastguard Worker PRED_SETGTEs = 30, 52*61046927SAndroid Build Coastguard Worker PRED_SET_INVs = 31, 53*61046927SAndroid Build Coastguard Worker PRED_SET_POPs = 32, 54*61046927SAndroid Build Coastguard Worker PRED_SET_CLRs = 33, 55*61046927SAndroid Build Coastguard Worker PRED_SET_RESTOREs = 34, 56*61046927SAndroid Build Coastguard Worker KILLEs = 35, 57*61046927SAndroid Build Coastguard Worker KILLGTs = 36, 58*61046927SAndroid Build Coastguard Worker KILLGTEs = 37, 59*61046927SAndroid Build Coastguard Worker KILLNEs = 38, 60*61046927SAndroid Build Coastguard Worker KILLONEs = 39, 61*61046927SAndroid Build Coastguard Worker SQRT_IEEE = 40, 62*61046927SAndroid Build Coastguard Worker MUL_CONST_0 = 42, 63*61046927SAndroid Build Coastguard Worker MUL_CONST_1 = 43, 64*61046927SAndroid Build Coastguard Worker ADD_CONST_0 = 44, 65*61046927SAndroid Build Coastguard Worker ADD_CONST_1 = 45, 66*61046927SAndroid Build Coastguard Worker SUB_CONST_0 = 46, 67*61046927SAndroid Build Coastguard Worker SUB_CONST_1 = 47, 68*61046927SAndroid Build Coastguard Worker SIN = 48, 69*61046927SAndroid Build Coastguard Worker COS = 49, 70*61046927SAndroid Build Coastguard Worker RETAIN_PREV = 50, 71*61046927SAndroid Build Coastguard Worker SCALAR_NONE = 63, 72*61046927SAndroid Build Coastguard Worker } instr_scalar_opc_t; 73*61046927SAndroid Build Coastguard Worker 74*61046927SAndroid Build Coastguard Worker typedef enum { 75*61046927SAndroid Build Coastguard Worker ADDv = 0, 76*61046927SAndroid Build Coastguard Worker MULv = 1, 77*61046927SAndroid Build Coastguard Worker MAXv = 2, 78*61046927SAndroid Build Coastguard Worker MINv = 3, 79*61046927SAndroid Build Coastguard Worker SETEv = 4, 80*61046927SAndroid Build Coastguard Worker SETGTv = 5, 81*61046927SAndroid Build Coastguard Worker SETGTEv = 6, 82*61046927SAndroid Build Coastguard Worker SETNEv = 7, 83*61046927SAndroid Build Coastguard Worker FRACv = 8, 84*61046927SAndroid Build Coastguard Worker TRUNCv = 9, 85*61046927SAndroid Build Coastguard Worker FLOORv = 10, 86*61046927SAndroid Build Coastguard Worker MULADDv = 11, 87*61046927SAndroid Build Coastguard Worker CNDEv = 12, 88*61046927SAndroid Build Coastguard Worker CNDGTEv = 13, 89*61046927SAndroid Build Coastguard Worker CNDGTv = 14, 90*61046927SAndroid Build Coastguard Worker DOT4v = 15, 91*61046927SAndroid Build Coastguard Worker DOT3v = 16, 92*61046927SAndroid Build Coastguard Worker DOT2ADDv = 17, 93*61046927SAndroid Build Coastguard Worker CUBEv = 18, 94*61046927SAndroid Build Coastguard Worker MAX4v = 19, 95*61046927SAndroid Build Coastguard Worker PRED_SETE_PUSHv = 20, 96*61046927SAndroid Build Coastguard Worker PRED_SETNE_PUSHv = 21, 97*61046927SAndroid Build Coastguard Worker PRED_SETGT_PUSHv = 22, 98*61046927SAndroid Build Coastguard Worker PRED_SETGTE_PUSHv = 23, 99*61046927SAndroid Build Coastguard Worker KILLEv = 24, 100*61046927SAndroid Build Coastguard Worker KILLGTv = 25, 101*61046927SAndroid Build Coastguard Worker KILLGTEv = 26, 102*61046927SAndroid Build Coastguard Worker KILLNEv = 27, 103*61046927SAndroid Build Coastguard Worker DSTv = 28, 104*61046927SAndroid Build Coastguard Worker MOVAv = 29, 105*61046927SAndroid Build Coastguard Worker VECTOR_NONE = 31, 106*61046927SAndroid Build Coastguard Worker } instr_vector_opc_t; 107*61046927SAndroid Build Coastguard Worker 108*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 109*61046927SAndroid Build Coastguard Worker /* dword0: */ 110*61046927SAndroid Build Coastguard Worker uint8_t vector_dest : 6; 111*61046927SAndroid Build Coastguard Worker uint8_t vector_dest_rel : 1; 112*61046927SAndroid Build Coastguard Worker uint8_t low_precision_16b_fp : 1; 113*61046927SAndroid Build Coastguard Worker uint8_t scalar_dest : 6; 114*61046927SAndroid Build Coastguard Worker uint8_t scalar_dest_rel : 1; 115*61046927SAndroid Build Coastguard Worker uint8_t export_data : 1; 116*61046927SAndroid Build Coastguard Worker uint8_t vector_write_mask : 4; 117*61046927SAndroid Build Coastguard Worker uint8_t scalar_write_mask : 4; 118*61046927SAndroid Build Coastguard Worker uint8_t vector_clamp : 1; 119*61046927SAndroid Build Coastguard Worker uint8_t scalar_clamp : 1; 120*61046927SAndroid Build Coastguard Worker instr_scalar_opc_t scalar_opc : 6; 121*61046927SAndroid Build Coastguard Worker /* dword1: */ 122*61046927SAndroid Build Coastguard Worker uint8_t src3_swiz : 8; 123*61046927SAndroid Build Coastguard Worker uint8_t src2_swiz : 8; 124*61046927SAndroid Build Coastguard Worker uint8_t src1_swiz : 8; 125*61046927SAndroid Build Coastguard Worker uint8_t src3_reg_negate : 1; 126*61046927SAndroid Build Coastguard Worker uint8_t src2_reg_negate : 1; 127*61046927SAndroid Build Coastguard Worker uint8_t src1_reg_negate : 1; 128*61046927SAndroid Build Coastguard Worker uint8_t pred_select : 2; 129*61046927SAndroid Build Coastguard Worker uint8_t relative_addr : 1; 130*61046927SAndroid Build Coastguard Worker uint8_t const_1_rel_abs : 1; 131*61046927SAndroid Build Coastguard Worker uint8_t const_0_rel_abs : 1; 132*61046927SAndroid Build Coastguard Worker /* dword2: */ 133*61046927SAndroid Build Coastguard Worker union { 134*61046927SAndroid Build Coastguard Worker struct { 135*61046927SAndroid Build Coastguard Worker uint8_t src3_reg : 6; 136*61046927SAndroid Build Coastguard Worker uint8_t src3_reg_select : 1; 137*61046927SAndroid Build Coastguard Worker uint8_t src3_reg_abs : 1; 138*61046927SAndroid Build Coastguard Worker uint8_t src2_reg : 6; 139*61046927SAndroid Build Coastguard Worker uint8_t src2_reg_select : 1; 140*61046927SAndroid Build Coastguard Worker uint8_t src2_reg_abs : 1; 141*61046927SAndroid Build Coastguard Worker uint8_t src1_reg : 6; 142*61046927SAndroid Build Coastguard Worker uint8_t src1_reg_select : 1; 143*61046927SAndroid Build Coastguard Worker uint8_t src1_reg_abs : 1; 144*61046927SAndroid Build Coastguard Worker }; 145*61046927SAndroid Build Coastguard Worker /* constants have full 8-bit index */ 146*61046927SAndroid Build Coastguard Worker struct { 147*61046927SAndroid Build Coastguard Worker uint8_t src3_reg_byte : 8; 148*61046927SAndroid Build Coastguard Worker uint8_t src2_reg_byte : 8; 149*61046927SAndroid Build Coastguard Worker uint8_t src1_reg_byte : 8; 150*61046927SAndroid Build Coastguard Worker }; 151*61046927SAndroid Build Coastguard Worker }; 152*61046927SAndroid Build Coastguard Worker instr_vector_opc_t vector_opc : 5; 153*61046927SAndroid Build Coastguard Worker uint8_t src3_sel : 1; 154*61046927SAndroid Build Coastguard Worker uint8_t src2_sel : 1; 155*61046927SAndroid Build Coastguard Worker uint8_t src1_sel : 1; 156*61046927SAndroid Build Coastguard Worker } instr_alu_t; 157*61046927SAndroid Build Coastguard Worker 158*61046927SAndroid Build Coastguard Worker /* 159*61046927SAndroid Build Coastguard Worker * CF instructions: 160*61046927SAndroid Build Coastguard Worker */ 161*61046927SAndroid Build Coastguard Worker 162*61046927SAndroid Build Coastguard Worker typedef enum { 163*61046927SAndroid Build Coastguard Worker NOP = 0, 164*61046927SAndroid Build Coastguard Worker EXEC = 1, 165*61046927SAndroid Build Coastguard Worker EXEC_END = 2, 166*61046927SAndroid Build Coastguard Worker COND_EXEC = 3, 167*61046927SAndroid Build Coastguard Worker COND_EXEC_END = 4, 168*61046927SAndroid Build Coastguard Worker COND_PRED_EXEC = 5, 169*61046927SAndroid Build Coastguard Worker COND_PRED_EXEC_END = 6, 170*61046927SAndroid Build Coastguard Worker LOOP_START = 7, 171*61046927SAndroid Build Coastguard Worker LOOP_END = 8, 172*61046927SAndroid Build Coastguard Worker COND_CALL = 9, 173*61046927SAndroid Build Coastguard Worker RETURN = 10, 174*61046927SAndroid Build Coastguard Worker COND_JMP = 11, 175*61046927SAndroid Build Coastguard Worker ALLOC = 12, 176*61046927SAndroid Build Coastguard Worker COND_EXEC_PRED_CLEAN = 13, 177*61046927SAndroid Build Coastguard Worker COND_EXEC_PRED_CLEAN_END = 14, 178*61046927SAndroid Build Coastguard Worker MARK_VS_FETCH_DONE = 15, 179*61046927SAndroid Build Coastguard Worker } instr_cf_opc_t; 180*61046927SAndroid Build Coastguard Worker 181*61046927SAndroid Build Coastguard Worker typedef enum { 182*61046927SAndroid Build Coastguard Worker RELATIVE_ADDR = 0, 183*61046927SAndroid Build Coastguard Worker ABSOLUTE_ADDR = 1, 184*61046927SAndroid Build Coastguard Worker } instr_addr_mode_t; 185*61046927SAndroid Build Coastguard Worker 186*61046927SAndroid Build Coastguard Worker typedef enum { 187*61046927SAndroid Build Coastguard Worker SQ_NO_ALLOC = 0, 188*61046927SAndroid Build Coastguard Worker SQ_POSITION = 1, 189*61046927SAndroid Build Coastguard Worker SQ_PARAMETER_PIXEL = 2, 190*61046927SAndroid Build Coastguard Worker SQ_MEMORY = 3, 191*61046927SAndroid Build Coastguard Worker } instr_alloc_type_t; 192*61046927SAndroid Build Coastguard Worker 193*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 194*61046927SAndroid Build Coastguard Worker uint16_t address : 9; 195*61046927SAndroid Build Coastguard Worker uint8_t reserved0 : 3; 196*61046927SAndroid Build Coastguard Worker uint8_t count : 3; 197*61046927SAndroid Build Coastguard Worker uint8_t yeild : 1; 198*61046927SAndroid Build Coastguard Worker uint16_t serialize : 12; 199*61046927SAndroid Build Coastguard Worker uint32_t vc : 6; /* vertex cache? */ 200*61046927SAndroid Build Coastguard Worker uint32_t bool_addr : 8; 201*61046927SAndroid Build Coastguard Worker uint8_t condition : 1; 202*61046927SAndroid Build Coastguard Worker instr_addr_mode_t address_mode : 1; 203*61046927SAndroid Build Coastguard Worker instr_cf_opc_t opc : 4; 204*61046927SAndroid Build Coastguard Worker } instr_cf_exec_t; 205*61046927SAndroid Build Coastguard Worker 206*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 207*61046927SAndroid Build Coastguard Worker uint16_t address : 10; 208*61046927SAndroid Build Coastguard Worker uint8_t reserved0 : 6; 209*61046927SAndroid Build Coastguard Worker uint8_t loop_id : 5; 210*61046927SAndroid Build Coastguard Worker uint32_t reserved1 : 22; 211*61046927SAndroid Build Coastguard Worker instr_addr_mode_t address_mode : 1; 212*61046927SAndroid Build Coastguard Worker instr_cf_opc_t opc : 4; 213*61046927SAndroid Build Coastguard Worker } instr_cf_loop_t; 214*61046927SAndroid Build Coastguard Worker 215*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 216*61046927SAndroid Build Coastguard Worker uint16_t address : 10; 217*61046927SAndroid Build Coastguard Worker uint8_t reserved0 : 3; 218*61046927SAndroid Build Coastguard Worker uint8_t force_call : 1; 219*61046927SAndroid Build Coastguard Worker uint8_t predicated_jmp : 1; 220*61046927SAndroid Build Coastguard Worker uint32_t reserved1 : 18; 221*61046927SAndroid Build Coastguard Worker uint8_t direction : 1; 222*61046927SAndroid Build Coastguard Worker uint32_t bool_addr : 8; 223*61046927SAndroid Build Coastguard Worker uint8_t condition : 1; 224*61046927SAndroid Build Coastguard Worker instr_addr_mode_t address_mode : 1; 225*61046927SAndroid Build Coastguard Worker instr_cf_opc_t opc : 4; 226*61046927SAndroid Build Coastguard Worker } instr_cf_jmp_call_t; 227*61046927SAndroid Build Coastguard Worker 228*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 229*61046927SAndroid Build Coastguard Worker uint8_t size : 4; 230*61046927SAndroid Build Coastguard Worker uint64_t reserved0 : 36; 231*61046927SAndroid Build Coastguard Worker uint8_t no_serial : 1; 232*61046927SAndroid Build Coastguard Worker instr_alloc_type_t buffer_select : 2; 233*61046927SAndroid Build Coastguard Worker uint8_t alloc_mode : 1; 234*61046927SAndroid Build Coastguard Worker instr_cf_opc_t opc : 4; 235*61046927SAndroid Build Coastguard Worker } instr_cf_alloc_t; 236*61046927SAndroid Build Coastguard Worker 237*61046927SAndroid Build Coastguard Worker typedef union PACKED { 238*61046927SAndroid Build Coastguard Worker instr_cf_exec_t exec; 239*61046927SAndroid Build Coastguard Worker instr_cf_loop_t loop; 240*61046927SAndroid Build Coastguard Worker instr_cf_jmp_call_t jmp_call; 241*61046927SAndroid Build Coastguard Worker instr_cf_alloc_t alloc; 242*61046927SAndroid Build Coastguard Worker struct PACKED { 243*61046927SAndroid Build Coastguard Worker uint64_t dummy : 44; 244*61046927SAndroid Build Coastguard Worker instr_cf_opc_t opc : 4; 245*61046927SAndroid Build Coastguard Worker }; 246*61046927SAndroid Build Coastguard Worker } instr_cf_t; 247*61046927SAndroid Build Coastguard Worker 248*61046927SAndroid Build Coastguard Worker /* 249*61046927SAndroid Build Coastguard Worker * FETCH instructions: 250*61046927SAndroid Build Coastguard Worker */ 251*61046927SAndroid Build Coastguard Worker 252*61046927SAndroid Build Coastguard Worker typedef enum { 253*61046927SAndroid Build Coastguard Worker VTX_FETCH = 0, 254*61046927SAndroid Build Coastguard Worker TEX_FETCH = 1, 255*61046927SAndroid Build Coastguard Worker TEX_GET_BORDER_COLOR_FRAC = 16, 256*61046927SAndroid Build Coastguard Worker TEX_GET_COMP_TEX_LOD = 17, 257*61046927SAndroid Build Coastguard Worker TEX_GET_GRADIENTS = 18, 258*61046927SAndroid Build Coastguard Worker TEX_GET_WEIGHTS = 19, 259*61046927SAndroid Build Coastguard Worker TEX_SET_TEX_LOD = 24, 260*61046927SAndroid Build Coastguard Worker TEX_SET_GRADIENTS_H = 25, 261*61046927SAndroid Build Coastguard Worker TEX_SET_GRADIENTS_V = 26, 262*61046927SAndroid Build Coastguard Worker TEX_RESERVED_4 = 27, 263*61046927SAndroid Build Coastguard Worker } instr_fetch_opc_t; 264*61046927SAndroid Build Coastguard Worker 265*61046927SAndroid Build Coastguard Worker typedef enum { 266*61046927SAndroid Build Coastguard Worker TEX_FILTER_POINT = 0, 267*61046927SAndroid Build Coastguard Worker TEX_FILTER_LINEAR = 1, 268*61046927SAndroid Build Coastguard Worker TEX_FILTER_BASEMAP = 2, /* only applicable for mip-filter */ 269*61046927SAndroid Build Coastguard Worker TEX_FILTER_USE_FETCH_CONST = 3, 270*61046927SAndroid Build Coastguard Worker } instr_tex_filter_t; 271*61046927SAndroid Build Coastguard Worker 272*61046927SAndroid Build Coastguard Worker typedef enum { 273*61046927SAndroid Build Coastguard Worker ANISO_FILTER_DISABLED = 0, 274*61046927SAndroid Build Coastguard Worker ANISO_FILTER_MAX_1_1 = 1, 275*61046927SAndroid Build Coastguard Worker ANISO_FILTER_MAX_2_1 = 2, 276*61046927SAndroid Build Coastguard Worker ANISO_FILTER_MAX_4_1 = 3, 277*61046927SAndroid Build Coastguard Worker ANISO_FILTER_MAX_8_1 = 4, 278*61046927SAndroid Build Coastguard Worker ANISO_FILTER_MAX_16_1 = 5, 279*61046927SAndroid Build Coastguard Worker ANISO_FILTER_USE_FETCH_CONST = 7, 280*61046927SAndroid Build Coastguard Worker } instr_aniso_filter_t; 281*61046927SAndroid Build Coastguard Worker 282*61046927SAndroid Build Coastguard Worker typedef enum { 283*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_2X4_SYM = 0, 284*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_2X4_ASYM = 1, 285*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_4X2_SYM = 2, 286*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_4X2_ASYM = 3, 287*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_4X4_SYM = 4, 288*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_4X4_ASYM = 5, 289*61046927SAndroid Build Coastguard Worker ARBITRARY_FILTER_USE_FETCH_CONST = 7, 290*61046927SAndroid Build Coastguard Worker } instr_arbitrary_filter_t; 291*61046927SAndroid Build Coastguard Worker 292*61046927SAndroid Build Coastguard Worker typedef enum { 293*61046927SAndroid Build Coastguard Worker SAMPLE_CENTROID = 0, 294*61046927SAndroid Build Coastguard Worker SAMPLE_CENTER = 1, 295*61046927SAndroid Build Coastguard Worker } instr_sample_loc_t; 296*61046927SAndroid Build Coastguard Worker 297*61046927SAndroid Build Coastguard Worker typedef enum a2xx_sq_surfaceformat instr_surf_fmt_t; 298*61046927SAndroid Build Coastguard Worker 299*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 300*61046927SAndroid Build Coastguard Worker /* dword0: */ 301*61046927SAndroid Build Coastguard Worker instr_fetch_opc_t opc : 5; 302*61046927SAndroid Build Coastguard Worker uint32_t src_reg : 6; 303*61046927SAndroid Build Coastguard Worker uint8_t src_reg_am : 1; 304*61046927SAndroid Build Coastguard Worker uint32_t dst_reg : 6; 305*61046927SAndroid Build Coastguard Worker uint8_t dst_reg_am : 1; 306*61046927SAndroid Build Coastguard Worker uint8_t fetch_valid_only : 1; 307*61046927SAndroid Build Coastguard Worker uint32_t const_idx : 5; 308*61046927SAndroid Build Coastguard Worker uint8_t tx_coord_denorm : 1; 309*61046927SAndroid Build Coastguard Worker uint8_t src_swiz : 6; 310*61046927SAndroid Build Coastguard Worker /* dword1: */ 311*61046927SAndroid Build Coastguard Worker uint16_t dst_swiz : 12; 312*61046927SAndroid Build Coastguard Worker instr_tex_filter_t mag_filter : 2; 313*61046927SAndroid Build Coastguard Worker instr_tex_filter_t min_filter : 2; 314*61046927SAndroid Build Coastguard Worker instr_tex_filter_t mip_filter : 2; 315*61046927SAndroid Build Coastguard Worker instr_aniso_filter_t aniso_filter : 3; 316*61046927SAndroid Build Coastguard Worker instr_arbitrary_filter_t arbitrary_filter : 3; 317*61046927SAndroid Build Coastguard Worker instr_tex_filter_t vol_mag_filter : 2; 318*61046927SAndroid Build Coastguard Worker instr_tex_filter_t vol_min_filter : 2; 319*61046927SAndroid Build Coastguard Worker uint8_t use_comp_lod : 1; 320*61046927SAndroid Build Coastguard Worker uint8_t use_reg_lod : 2; /* 0 for cube, 1 for 2d */ 321*61046927SAndroid Build Coastguard Worker uint8_t pred_select : 1; 322*61046927SAndroid Build Coastguard Worker /* dword2: */ 323*61046927SAndroid Build Coastguard Worker uint8_t use_reg_gradients : 1; 324*61046927SAndroid Build Coastguard Worker instr_sample_loc_t sample_location : 1; 325*61046927SAndroid Build Coastguard Worker uint32_t lod_bias : 7; 326*61046927SAndroid Build Coastguard Worker uint8_t unused : 7; 327*61046927SAndroid Build Coastguard Worker uint8_t offset_x : 5; 328*61046927SAndroid Build Coastguard Worker uint32_t offset_y : 5; 329*61046927SAndroid Build Coastguard Worker uint8_t offset_z : 5; 330*61046927SAndroid Build Coastguard Worker uint8_t pred_condition : 1; 331*61046927SAndroid Build Coastguard Worker } instr_fetch_tex_t; 332*61046927SAndroid Build Coastguard Worker 333*61046927SAndroid Build Coastguard Worker typedef struct PACKED { 334*61046927SAndroid Build Coastguard Worker /* dword0: */ 335*61046927SAndroid Build Coastguard Worker instr_fetch_opc_t opc : 5; 336*61046927SAndroid Build Coastguard Worker uint32_t src_reg : 6; 337*61046927SAndroid Build Coastguard Worker uint8_t src_reg_am : 1; 338*61046927SAndroid Build Coastguard Worker uint32_t dst_reg : 6; 339*61046927SAndroid Build Coastguard Worker uint8_t dst_reg_am : 1; 340*61046927SAndroid Build Coastguard Worker uint8_t must_be_one : 1; 341*61046927SAndroid Build Coastguard Worker uint32_t const_index : 5; 342*61046927SAndroid Build Coastguard Worker uint8_t const_index_sel : 2; 343*61046927SAndroid Build Coastguard Worker uint8_t reserved0 : 3; 344*61046927SAndroid Build Coastguard Worker uint8_t src_swiz : 2; 345*61046927SAndroid Build Coastguard Worker /* dword1: */ 346*61046927SAndroid Build Coastguard Worker uint16_t dst_swiz : 12; 347*61046927SAndroid Build Coastguard Worker uint8_t format_comp_all : 1; /* '1' for signed, '0' for unsigned? */ 348*61046927SAndroid Build Coastguard Worker uint8_t num_format_all : 1; /* '0' for normalized, '1' for unnormalized */ 349*61046927SAndroid Build Coastguard Worker uint8_t signed_rf_mode_all : 1; 350*61046927SAndroid Build Coastguard Worker uint8_t reserved1 : 1; 351*61046927SAndroid Build Coastguard Worker instr_surf_fmt_t format : 6; 352*61046927SAndroid Build Coastguard Worker uint8_t reserved2 : 2; 353*61046927SAndroid Build Coastguard Worker uint8_t exp_adjust_all : 6; 354*61046927SAndroid Build Coastguard Worker uint8_t reserved3 : 1; 355*61046927SAndroid Build Coastguard Worker uint8_t pred_select : 1; 356*61046927SAndroid Build Coastguard Worker /* dword2: */ 357*61046927SAndroid Build Coastguard Worker uint8_t stride : 8; 358*61046927SAndroid Build Coastguard Worker uint32_t offset : 22; 359*61046927SAndroid Build Coastguard Worker uint8_t reserved4 : 1; 360*61046927SAndroid Build Coastguard Worker uint8_t pred_condition : 1; 361*61046927SAndroid Build Coastguard Worker } instr_fetch_vtx_t; 362*61046927SAndroid Build Coastguard Worker 363*61046927SAndroid Build Coastguard Worker typedef union PACKED { 364*61046927SAndroid Build Coastguard Worker instr_fetch_tex_t tex; 365*61046927SAndroid Build Coastguard Worker instr_fetch_vtx_t vtx; 366*61046927SAndroid Build Coastguard Worker struct PACKED { 367*61046927SAndroid Build Coastguard Worker /* dword0: */ 368*61046927SAndroid Build Coastguard Worker instr_fetch_opc_t opc : 5; 369*61046927SAndroid Build Coastguard Worker uint32_t dummy0 : 27; 370*61046927SAndroid Build Coastguard Worker /* dword1: */ 371*61046927SAndroid Build Coastguard Worker uint32_t dummy1 : 31; 372*61046927SAndroid Build Coastguard Worker uint8_t pred_select : 1; 373*61046927SAndroid Build Coastguard Worker /* dword2: */ 374*61046927SAndroid Build Coastguard Worker uint32_t dummy2 : 31; 375*61046927SAndroid Build Coastguard Worker uint8_t pred_condition : 1; 376*61046927SAndroid Build Coastguard Worker }; 377*61046927SAndroid Build Coastguard Worker } instr_fetch_t; 378*61046927SAndroid Build Coastguard Worker 379*61046927SAndroid Build Coastguard Worker typedef union PACKED { 380*61046927SAndroid Build Coastguard Worker instr_alu_t alu; 381*61046927SAndroid Build Coastguard Worker instr_fetch_t fetch; 382*61046927SAndroid Build Coastguard Worker } instr_t; 383*61046927SAndroid Build Coastguard Worker 384*61046927SAndroid Build Coastguard Worker #endif /* INSTR_H_ */ 385