panfrost: Handle disabled/empty UBOs
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 20 Jun 2019 23:51:08 +0000 (16:51 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 24 Jun 2019 19:57:40 +0000 (12:57 -0700)
Prevents an assert(0) later in this (not so edge) case. We still have to
have a dummy there.

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

index 3c7b5bb01584567a0e665d2e63f4b7228e127420..9a5e6702a92cfdb1487300c81560ceedf3ace836 100644 (file)
@@ -1311,9 +1311,21 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
                 /* The rest are honest-to-goodness UBOs */
 
                 for (unsigned ubo = 1; ubo < ubo_count; ++ubo) {
-                        mali_ptr gpu = panfrost_map_constant_buffer_gpu(ctx, buf, ubo);
                         size_t sz = buf->cb[ubo].buffer_size;
 
+                        bool enabled = buf->enabled_mask & (1 << ubo);
+                        bool empty = sz == 0;
+
+                        if (!enabled || empty) {
+                                /* Stub out disabled UBOs to catch accesses */
+
+                                ubos[ubo].size = 0;
+                                ubos[ubo].ptr = 0xDEAD0000;
+                                continue;
+                        }
+
+                        mali_ptr gpu = panfrost_map_constant_buffer_gpu(ctx, buf, ubo);
+
                         unsigned bytes_per_field = 16;
                         unsigned aligned = ALIGN(sz, bytes_per_field);
                         unsigned fields = aligned / bytes_per_field;