From: Francisco Jerez Date: Fri, 16 Mar 2018 21:28:59 +0000 (-0700) Subject: i965: Use intel_bufferobj_buffer() wrapper in image surface state setup. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=936cd3c87a212c28fe89a5c059fc4febd8b52ab7;p=mesa.git i965: Use intel_bufferobj_buffer() wrapper in image surface state setup. Instead of directly using intel_obj->buffer. Among other things intel_bufferobj_buffer() will update intel_buffer_object:: gpu_active_start/end, which are used by glBufferSubData() to decide which path to take. Fixes a failure in the Piglit ARB_shader_image_load_store-host-mem-barrier Buffer Update/WaW tests, which could be reproduced with a non-standard glGetTexSubImage implementation (see bug report). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105351 Reported-by: Nanley Chery Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Nanley Chery --- 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 39e898243db..73cae9ef7c5 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -1520,14 +1520,16 @@ update_image_surface(struct brw_context *brw, const unsigned format = get_image_format(brw, u->_ActualFormat, access); if (obj->Target == GL_TEXTURE_BUFFER) { - struct intel_buffer_object *intel_obj = - intel_buffer_object(obj->BufferObject); const unsigned texel_size = (format == ISL_FORMAT_RAW ? 1 : _mesa_get_format_bytes(u->_ActualFormat)); const unsigned buffer_size = buffer_texture_range_size(brw, obj); + struct brw_bo *const bo = !obj->BufferObject ? NULL : + intel_bufferobj_buffer(brw, intel_buffer_object(obj->BufferObject), + obj->BufferOffset, buffer_size, + access != GL_READ_ONLY); brw_emit_buffer_surface_state( - brw, surf_offset, intel_obj->buffer, obj->BufferOffset, + brw, surf_offset, bo, obj->BufferOffset, format, buffer_size, texel_size, access != GL_READ_ONLY ? RELOC_WRITE : 0);