summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2012-01-23 16:11:05 -0800
committerPaul Berry <[email protected]>2012-01-25 09:42:49 -0800
commit6bc08ee56991ac3ca0fa0728c3907835282332b8 (patch)
treee2a23e7986389f4497787d2f62fd9ca5e2d257e1
parent33f8a3cfbe85db6514231d8ebc622af1f2139a13 (diff)
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 <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_wm_surface_state.c5
1 files changed, 4 insertions, 1 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 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;