From 6bc08ee56991ac3ca0fa0728c3907835282332b8 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Mon, 23 Jan 2012 16:11:05 -0800 Subject: [PATCH] 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 --- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 7fd83ea..c77d83a 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; -- 2.7.4