Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
On 2015-08-05 01:30:15, Iago Toral Quiroga wrote: > 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> > --- > 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 2fdf716..08ad8e8 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