summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Antognolli <rafael.antognolli@intel.com>2018-06-13 09:49:07 -0700
committerRafael Antognolli <rafael.antognolli@intel.com>2019-12-04 20:48:25 +0000
commit8983622995804aa5279647fc5bea75d0ca3b4612 (patch)
tree483b200e4a408f6eca20b90d578b1ba17021353c
parent2d127614a2e7c851d2966bbd2d5075213e15a6e7 (diff)
downloadmesa-8983622995804aa5279647fc5bea75d0ca3b4612.tar.gz
intel/aubinator: Decode 3DSTATE_CONSTANT_ALL.
Acked-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
-rw-r--r--src/intel/common/gen_batch_decoder.c44
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 },