diff options
author | Paul Berry <[email protected]> | 2012-01-23 16:11:05 -0800 |
---|---|---|
committer | Paul Berry <[email protected]> | 2012-01-25 09:42:49 -0800 |
commit | 6bc08ee56991ac3ca0fa0728c3907835282332b8 (patch) | |
tree | e2a23e7986389f4497787d2f62fd9ca5e2d257e1 | |
parent | 33f8a3cfbe85db6514231d8ebc622af1f2139a13 (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.c | 5 |
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; |