panfrost/decode: Print COMPUTE uniforms as pointers
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 19 Jun 2019 16:07:13 +0000 (09:07 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 20 Jun 2019 14:48:04 +0000 (07:48 -0700)
In OpenGL, uniforms generally represent fp32 vec4s (at least in highp
mode). In OpenCL, they represent vec2s of 64-bit pointers.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/pandecode/decode.c

index 7b8b2c87f7ee7d3ee4ebe7d3a04dc4c1598070f2..c402ff91cbc461c061e59d7bf910d3e74387d79b 100644 (file)
@@ -1523,7 +1523,9 @@ pandecode_replay_vertex_tiler_postfix_pre(const struct mali_vertex_tiler_postfix
                 pandecode_replay_attribute_meta(job_no, varying_count, p, true, suffix);
         }
 
-        if (p->uniforms) {
+        bool is_compute = job_type == JOB_TYPE_COMPUTE;
+
+        if (p->uniforms && !is_compute) {
                 int rows = uniform_count, width = 4;
                 size_t sz = rows * width * sizeof(float);
 
@@ -1550,6 +1552,27 @@ pandecode_replay_vertex_tiler_postfix_pre(const struct mali_vertex_tiler_postfix
 
                 pandecode_indent--;
                 pandecode_log("};\n");
+        } else if (p->uniforms) {
+                int rows = uniform_count * 2;
+                size_t sz = rows * sizeof(mali_ptr);
+
+                struct pandecode_mapped_memory *uniform_mem = pandecode_find_mapped_gpu_mem_containing(p->uniforms);
+                pandecode_fetch_gpu_mem(uniform_mem, p->uniforms, sz);
+                mali_ptr *PANDECODE_PTR_VAR(uniforms, uniform_mem, p->uniforms);
+
+                pandecode_log("mali_ptr uniforms_%d%s[] = {\n", job_no, suffix);
+
+                pandecode_indent++;
+
+                for (int row = 0; row < rows; row++) {
+                        char *a = pointer_as_memory_reference(uniforms[row]);
+                        pandecode_log("%s,\n", a);
+                        free(a);
+                }
+
+                pandecode_indent--;
+                pandecode_log("};\n");
+
         }
 
         if (p->uniform_buffers) {