From: Kenneth Graunke Date: Fri, 25 Oct 2013 18:37:06 +0000 (-0700) Subject: i965: Virtualize emit_buffer_surface_state(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ba836e02a3f09cdc2188c45b6e409a936a840bea;p=mesa.git i965: Virtualize emit_buffer_surface_state(). This entails adding "mocs" and "rw" parameters to the Gen4-5 version. I made it actually pay attention to the rw flag (even though it is always false), but mocs is always ignored. Signed-off-by: Kenneth Graunke Reviewed-by: Paul Berry --- diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 0531c12faad..6065782ee0c 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -989,6 +989,15 @@ struct brw_context uint32_t size, uint32_t *out_offset, bool rw); + void (*emit_buffer_surface_state)(struct brw_context *brw, + uint32_t *out_offset, + drm_intel_bo *bo, + unsigned buffer_offset, + unsigned surface_format, + unsigned buffer_size, + unsigned pitch, + unsigned mocs, + bool rw); /** Upload a SAMPLER_STATE table. */ void (*upload_sampler_state_table)(struct brw_context *brw, 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 46871c7cf55..5d43a0d47f9 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -197,7 +197,9 @@ gen4_emit_buffer_surface_state(struct brw_context *brw, unsigned buffer_offset, unsigned surface_format, unsigned buffer_size, - unsigned pitch) + unsigned pitch, + unsigned mocs, + bool rw) { uint32_t *surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, 6 * 4, 32, out_offset); @@ -219,7 +221,8 @@ gen4_emit_buffer_surface_state(struct brw_context *brw, if (bo) { drm_intel_bo_emit_reloc(brw->batch.bo, *out_offset + 4, bo, buffer_offset, - I915_GEM_DOMAIN_SAMPLER, 0); + I915_GEM_DOMAIN_SAMPLER, + (rw ? I915_GEM_DOMAIN_SAMPLER : 0)); } } @@ -252,7 +255,9 @@ brw_update_buffer_texture_surface(struct gl_context *ctx, tObj->BufferOffset, brw_format, size / texel_size, - texel_size); + texel_size, + 0, + false); } static void @@ -329,7 +334,7 @@ brw_create_constant_surface(struct brw_context *brw, gen4_emit_buffer_surface_state(brw, out_offset, bo, offset, BRW_SURFACEFORMAT_R32G32B32A32_FLOAT, - elements, stride); + elements, stride, 0, false); } /** @@ -927,4 +932,5 @@ gen4_init_vtable_surface_functions(struct brw_context *brw) brw->vtbl.update_null_renderbuffer_surface = brw_update_null_renderbuffer_surface; brw->vtbl.create_constant_surface = brw_create_constant_surface; + brw->vtbl.emit_buffer_surface_state = gen4_emit_buffer_surface_state; } diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c index ed7565fa2a1..2a42e32b19f 100644 --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c @@ -615,4 +615,5 @@ gen7_init_vtable_surface_functions(struct brw_context *brw) gen7_update_null_renderbuffer_surface; brw->vtbl.create_constant_surface = gen7_create_constant_surface; brw->vtbl.create_raw_surface = gen7_create_raw_surface; + brw->vtbl.emit_buffer_surface_state = gen7_emit_buffer_surface_state; }