From: Paul Berry Date: Tue, 24 Jan 2012 00:11:05 +0000 (-0800) Subject: i965/gen6: Fix segfault in transform feedback to DYNAMIC_DRAW buffers. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6bc08ee56991ac3ca0fa0728c3907835282332b8;p=mesa.git i965/gen6: Fix segfault in transform feedback to DYNAMIC_DRAW buffers. When storing data in a buffer of type DYNAMIC_DRAW, we don't create a drm_intel_bo for it; instead we store the data in system memory and defer allocation of the GPU buffer until it is needed. Therefore, in brw_update_sol_surface(), we can't just consult the "buffer" field of the intel_buffer_object structure; we need to call intel_bufferobj_buffer() to ensure that the deferred allocation occurs. This parallels a similar fix for gen7 (see commit ba6f4c9). Fixes piglit test EXT_transform_feedback/buffer-usage on gen6. This is a candidate for the 8.0 release branch. Reviewed-by: Eric Anholt --- 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 7fd83ea984c..c77d83a9509 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -730,7 +730,10 @@ brw_update_sol_surface(struct brw_context *brw, uint32_t *out_offset, unsigned num_vector_components, unsigned stride_dwords, unsigned offset_dwords) { - drm_intel_bo *bo = intel_buffer_object(buffer_obj)->buffer; + struct intel_context *intel = &brw->intel; + struct intel_buffer_object *intel_bo = intel_buffer_object(buffer_obj); + drm_intel_bo *bo = + intel_bufferobj_buffer(intel, intel_bo, INTEL_WRITE_PART); uint32_t *surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 6 * 4, 32, out_offset); uint32_t pitch_minus_1 = 4*stride_dwords - 1;