From: Samuel Iglesias Gonsalvez <sigles...@igalia.com>

Otherwise we can expect odd things to happen if, for example, we ask
for the size of the attached buffer from shader code, since that
might query this value from the surface we uploaded and get random
results.

Signed-off-by: Samuel Iglesias Gonsalvez <sigles...@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
---
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 44 ++++++++++++++----------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c 
b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index 4c96572..5b73c28 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -932,28 +932,36 @@ brw_upload_ubo_surfaces(struct brw_context *brw,
          struct gl_uniform_buffer_binding *binding;
          binding =
             &ctx->UniformBufferBindings[shader->UniformBlocks[i].Binding];
-         intel_bo = intel_buffer_object(binding->BufferObject);
-         drm_intel_bo *bo =
-            intel_bufferobj_buffer(brw, intel_bo,
-                                   binding->Offset,
-                                   binding->BufferObject->Size - 
binding->Offset);
-         brw_create_constant_surface(brw, bo, binding->Offset,
-                                     bo->size - binding->Offset,
-                                     &surf_offsets[i],
-                                     dword_pitch);
+         if (binding->BufferObject == ctx->Shared->NullBufferObj) {
+            brw->vtbl.emit_null_surface_state(brw, 1, 1, 1, &surf_offsets[i]);
+         } else {
+            intel_bo = intel_buffer_object(binding->BufferObject);
+            drm_intel_bo *bo =
+               intel_bufferobj_buffer(brw, intel_bo,
+                                      binding->Offset,
+                                      binding->BufferObject->Size - 
binding->Offset);
+            brw_create_constant_surface(brw, bo, binding->Offset,
+                                        bo->size - binding->Offset,
+                                        &surf_offsets[i],
+                                        dword_pitch);
+         }
       } else {
          struct gl_shader_storage_buffer_binding *binding;
          binding =
             
&ctx->ShaderStorageBufferBindings[shader->UniformBlocks[i].Binding];
-         intel_bo = intel_buffer_object(binding->BufferObject);
-         drm_intel_bo *bo =
-            intel_bufferobj_buffer(brw, intel_bo,
-                                   binding->Offset,
-                                   binding->BufferObject->Size - 
binding->Offset);
-         brw_create_buffer_surface(brw, bo, binding->Offset,
-                                   bo->size - binding->Offset,
-                                   &surf_offsets[i],
-                                   dword_pitch);
+         if (binding->BufferObject == ctx->Shared->NullBufferObj) {
+            brw->vtbl.emit_null_surface_state(brw, 1, 1, 1, &surf_offsets[i]);
+         } else {
+            intel_bo = intel_buffer_object(binding->BufferObject);
+            drm_intel_bo *bo =
+               intel_bufferobj_buffer(brw, intel_bo,
+                                      binding->Offset,
+                                      binding->BufferObject->Size - 
binding->Offset);
+            brw_create_buffer_surface(brw, bo, binding->Offset,
+                                      bo->size - binding->Offset,
+                                      &surf_offsets[i],
+                                      dword_pitch);
+         }
       }
    }
 
-- 
1.9.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to