pan/decode: Validate blend shaders don't access I/O
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 21 Aug 2019 21:04:05 +0000 (14:04 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 22 Aug 2019 19:54:16 +0000 (12:54 -0700)
We could do better by forcing the checks to *equal* zero (right now, an
indeterminate answer will pass the checks), but this is a start to guard
against some egregious cases.

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

index 7c8c5ca95c095ab225e5a2c89aba64960c37d0d4..1b88bbb12e86150b16bc1282d7dee89384303e37 100644 (file)
@@ -2114,8 +2114,27 @@ pandecode_vertex_tiler_postfix_pre(
                                 else
                                         shader = pandecode_midgard_blend_mrt(blend_base, job_no, i);
 
-                                if (shader & ~0xF)
-                                        pandecode_shader_disassemble(shader, job_no, job_type, false, 0);
+                                if (shader & ~0xF) {
+                                        struct midgard_disasm_stats stats =
+                                                pandecode_shader_disassemble(shader, job_no, job_type, false, 0);
+
+                                        bool has_texture = (stats.texture_count > 0);
+                                        bool has_sampler = (stats.sampler_count > 0);
+                                        bool has_attribute = (stats.attribute_count > 0);
+                                        bool has_varying = (stats.varying_count > 0);
+                                        bool has_uniform = (stats.uniform_count > 0);
+                                        bool has_ubo = (stats.uniform_buffer_count > 0);
+
+                                        if (has_texture || has_sampler)
+                                                pandecode_msg("XXX: blend shader accessing textures\n");
+
+                                        if (has_attribute || has_varying)
+                                                pandecode_msg("XXX: blend shader accessing interstage\n");
+
+                                        if (has_uniform || has_ubo)
+                                                pandecode_msg("XXX: blend shader accessing uniforms\n");
+                                }
+
                         }
                 }