summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2012-01-23 16:11:05 -0800
committerIan Romanick <ian.d.romanick@intel.com>2012-02-02 11:39:28 -0700
commit0e08205421c88d19a8a8955bc27602444df6a0ab (patch)
treee21ebaf2c78815accddb8854ce046244889b7cc0
parentcc27a42b6f268cfa8fb6021ed0e12789cc51ac92 (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 <eric@anholt.net> (cherry picked from commit 6bc08ee56991ac3ca0fa0728c3907835282332b8)
-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;