Re: [Mesa-dev] [PATCH 4/9] i965: Disassemble atomic operations and other DP:DC1 stuff on Broadwell.
Kenneth Graunke kenn...@whitecape.org writes: This is similar to what Eric did for Gen7 a little while ago; it also has support for untyped surface reads. Signed-off-by: Kenneth Graunke kenn...@whitecape.org --- src/mesa/drivers/dri/i965/gen8_disasm.c | 65 + 1 file changed, 65 insertions(+) diff --git a/src/mesa/drivers/dri/i965/gen8_disasm.c b/src/mesa/drivers/dri/i965/gen8_disasm.c index cc3d864..e0ebd8b 100644 --- a/src/mesa/drivers/dri/i965/gen8_disasm.c +++ b/src/mesa/drivers/dri/i965/gen8_disasm.c @@ -222,6 +222,39 @@ static const char *const m_sfid[16] = { [HSW_SFID_CRE] = cre, }; +static const char *const dp_dc1_msg_type[16] = { + [HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ] = untyped surface read, + [HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP] = DC untyped atomic op, + [HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2] = DC untyped 4x2 atomic op, + [HSW_DATAPORT_DC_PORT1_MEDIA_BLOCK_READ] = DC media block read, + [HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ]= DC typed surface read, + [HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP] = DC typed atomic, + [HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2] = DC typed 4x2 atomic op, + [HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE] = DC untyped surface write, + [HSW_DATAPORT_DC_PORT1_MEDIA_BLOCK_WRITE] = DC media block write, + [HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP] = DC atomic counter op, + [HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP_SIMD4X2] = DC 4x2 atomic counter op, + [HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE] = DC typed surface write, +}; + +static const char * const aop[16] = { + [BRW_AOP_AND]= and, + [BRW_AOP_OR] = or, + [BRW_AOP_XOR]= xoo, xor + [BRW_AOP_MOV]= mov, + [BRW_AOP_INC]= inc, + [BRW_AOP_DEC]= dec, + [BRW_AOP_ADD]= add, + [BRW_AOP_SUB]= sub, + [BRW_AOP_REVSUB] = revsub, + [BRW_AOP_IMAX] = imax, + [BRW_AOP_IMIN] = imin, + [BRW_AOP_UMAX] = umax, + [BRW_AOP_UMIN] = umin, + [BRW_AOP_CMPWR] = cmpwr, + [BRW_AOP_PREDEC] = predec, +}; + static const char *const m_math_function[16] = { [BRW_MATH_FUNCTION_INV]= inv, [BRW_MATH_FUNCTION_LOG]= log, @@ -911,6 +944,38 @@ gen8_disassemble(FILE *file, struct gen8_instruction *inst, int gen) gen8_function_control(inst)); break; + case HSW_SFID_DATAPORT_DATA_CACHE_1: + err |= control(file, DP DC1 message type, +dp_dc1_msg_type, gen8_dp_message_type(inst), space); + format(file, , Surface = %d, , gen8_binding_table_index(inst)); + switch (gen8_dp_message_type(inst)) { + case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP: + case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP: + case HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP: +format(file, SIMD%d,, + (gen8_dp_message_control(inst) (1 4)) ? 8 : 16); +/* fallthrough */ + case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2: + case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2: + case HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP_SIMD4X2: +control(file, atomic op, aop, +gen8_dp_message_control(inst) 0xf, space); +break; + case HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ: + case HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE: + case HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ: + case HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE: { +const char *simd_modes[] = { 4x2, 16, 8 }; static const char * (otherwise the compiler will emit code to assemble the array on the stack each time. yay compilers!) pgpgx_xHfoD0w.pgp Description: PGP signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 4/9] i965: Disassemble atomic operations and other DP:DC1 stuff on Broadwell.
This is similar to what Eric did for Gen7 a little while ago; it also has support for untyped surface reads. Signed-off-by: Kenneth Graunke kenn...@whitecape.org --- src/mesa/drivers/dri/i965/gen8_disasm.c | 65 + 1 file changed, 65 insertions(+) diff --git a/src/mesa/drivers/dri/i965/gen8_disasm.c b/src/mesa/drivers/dri/i965/gen8_disasm.c index cc3d864..e0ebd8b 100644 --- a/src/mesa/drivers/dri/i965/gen8_disasm.c +++ b/src/mesa/drivers/dri/i965/gen8_disasm.c @@ -222,6 +222,39 @@ static const char *const m_sfid[16] = { [HSW_SFID_CRE] = cre, }; +static const char *const dp_dc1_msg_type[16] = { + [HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ] = untyped surface read, + [HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP] = DC untyped atomic op, + [HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2] = DC untyped 4x2 atomic op, + [HSW_DATAPORT_DC_PORT1_MEDIA_BLOCK_READ] = DC media block read, + [HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ]= DC typed surface read, + [HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP] = DC typed atomic, + [HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2] = DC typed 4x2 atomic op, + [HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE] = DC untyped surface write, + [HSW_DATAPORT_DC_PORT1_MEDIA_BLOCK_WRITE] = DC media block write, + [HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP] = DC atomic counter op, + [HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP_SIMD4X2] = DC 4x2 atomic counter op, + [HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE] = DC typed surface write, +}; + +static const char * const aop[16] = { + [BRW_AOP_AND]= and, + [BRW_AOP_OR] = or, + [BRW_AOP_XOR]= xoo, + [BRW_AOP_MOV]= mov, + [BRW_AOP_INC]= inc, + [BRW_AOP_DEC]= dec, + [BRW_AOP_ADD]= add, + [BRW_AOP_SUB]= sub, + [BRW_AOP_REVSUB] = revsub, + [BRW_AOP_IMAX] = imax, + [BRW_AOP_IMIN] = imin, + [BRW_AOP_UMAX] = umax, + [BRW_AOP_UMIN] = umin, + [BRW_AOP_CMPWR] = cmpwr, + [BRW_AOP_PREDEC] = predec, +}; + static const char *const m_math_function[16] = { [BRW_MATH_FUNCTION_INV]= inv, [BRW_MATH_FUNCTION_LOG]= log, @@ -911,6 +944,38 @@ gen8_disassemble(FILE *file, struct gen8_instruction *inst, int gen) gen8_function_control(inst)); break; + case HSW_SFID_DATAPORT_DATA_CACHE_1: + err |= control(file, DP DC1 message type, +dp_dc1_msg_type, gen8_dp_message_type(inst), space); + format(file, , Surface = %d, , gen8_binding_table_index(inst)); + switch (gen8_dp_message_type(inst)) { + case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP: + case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP: + case HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP: +format(file, SIMD%d,, + (gen8_dp_message_control(inst) (1 4)) ? 8 : 16); +/* fallthrough */ + case HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2: + case HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2: + case HSW_DATAPORT_DC_PORT1_ATOMIC_COUNTER_OP_SIMD4X2: +control(file, atomic op, aop, +gen8_dp_message_control(inst) 0xf, space); +break; + case HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ: + case HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE: + case HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ: + case HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE: { +const char *simd_modes[] = { 4x2, 16, 8 }; +unsigned msg_ctrl = gen8_dp_message_control(inst); +format(file, SIMD%s, Mask = 0x%x, + simd_modes[msg_ctrl 4], msg_ctrl 0xf); +break; + } + default: +format(file, 0x%x, gen8_dp_message_control(inst)); + } + break; + default: format(file, unsupported shared function ID (%d), sfid); break; -- 1.9.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev