diff options
author | Rafael Antognolli <[email protected]> | 2018-06-13 09:49:07 -0700 |
---|---|---|
committer | Rafael Antognolli <[email protected]> | 2019-12-04 20:48:25 +0000 |
commit | 8983622995804aa5279647fc5bea75d0ca3b4612 (patch) | |
tree | 483b200e4a408f6eca20b90d578b1ba17021353c /src/intel | |
parent | 2d127614a2e7c851d2966bbd2d5075213e15a6e7 (diff) |
intel/aubinator: Decode 3DSTATE_CONSTANT_ALL.
Acked-by: Caio Marcelo de Oliveira Filho <[email protected]>
Reviewed-by: Lionel Landwerlin <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/common/gen_batch_decoder.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/intel/common/gen_batch_decoder.c b/src/intel/common/gen_batch_decoder.c index 9462a67d993..41425e8bf68 100644 --- a/src/intel/common/gen_batch_decoder.c +++ b/src/intel/common/gen_batch_decoder.c @@ -586,6 +586,49 @@ decode_ps_kernels(struct gen_batch_decode_ctx *ctx, const uint32_t *p) } static void +decode_3dstate_constant_all(struct gen_batch_decode_ctx *ctx, const uint32_t *p) +{ + struct gen_group *inst = + gen_spec_find_instruction(ctx->spec, ctx->engine, p); + struct gen_group *body = + gen_spec_find_struct(ctx->spec, "3DSTATE_CONSTANT_ALL_DATA"); + + uint32_t read_length[4]; + struct gen_batch_decode_bo buffer[4]; + memset(buffer, 0, sizeof(buffer)); + + struct gen_field_iterator outer; + gen_field_iterator_init(&outer, inst, p, 0, false); + int idx = 0; + while (gen_field_iterator_next(&outer)) { + if (outer.struct_desc != body) + continue; + + struct gen_field_iterator iter; + gen_field_iterator_init(&iter, body, &outer.p[outer.start_bit / 32], + 0, false); + while (gen_field_iterator_next(&iter)) { + if (!strcmp(iter.name, "Pointer To Constant Buffer")) { + buffer[idx] = ctx_get_bo(ctx, true, iter.raw_value); + } else if (!strcmp(iter.name, "Constant Buffer Read Length")) { + read_length[idx] = iter.raw_value; + } + } + idx++; + } + + for (int i = 0; i < 4; i++) { + if (read_length[i] == 0 || buffer[i].map == NULL) + continue; + + unsigned size = read_length[i] * 32; + fprintf(ctx->fp, "constant buffer %d, size %u\n", i, size); + + ctx_print_buffer(ctx, buffer[i], size, 0, -1); + } +} + +static void decode_3dstate_constant(struct gen_batch_decode_ctx *ctx, const uint32_t *p) { struct gen_group *inst = gen_ctx_find_instruction(ctx, p); @@ -806,6 +849,7 @@ struct custom_decoder { { "3DSTATE_CONSTANT_PS", decode_3dstate_constant }, { "3DSTATE_CONSTANT_HS", decode_3dstate_constant }, { "3DSTATE_CONSTANT_DS", decode_3dstate_constant }, + { "3DSTATE_CONSTANT_ALL", decode_3dstate_constant_all }, { "3DSTATE_BINDING_TABLE_POINTERS", decode_gen6_3dstate_binding_table_pointers }, { "3DSTATE_BINDING_TABLE_POINTERS_VS", decode_3dstate_binding_table_pointers }, |