On 15 September 2013 00:10, Francisco Jerez <curroje...@riseup.net> wrote:
> And add Gen7 implementation. > --- > src/mesa/drivers/dri/i965/brw_context.h | 7 +++++ > src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 35 > +++++++++++++++++++---- > 2 files changed, 37 insertions(+), 5 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_context.h > b/src/mesa/drivers/dri/i965/brw_context.h > index 108e98c..3003d15 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.h > +++ b/src/mesa/drivers/dri/i965/brw_context.h > @@ -895,6 +895,13 @@ struct brw_context > uint32_t *out_offset, > bool dword_pitch); > > + void (*create_raw_surface)(struct brw_context *brw, > + drm_intel_bo *bo, > + uint32_t offset, > + uint32_t size, > + uint32_t *out_offset, > + bool rw); > + > /** Upload a SAMPLER_STATE table. */ > void (*upload_sampler_state_table)(struct brw_context *brw, > struct gl_program *prog, > 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 8f95abe..8b86387 100644 > --- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c > @@ -232,7 +232,8 @@ gen7_emit_buffer_surface_state(struct brw_context *brw, > unsigned surface_format, > unsigned buffer_size, > unsigned pitch, > - unsigned mocs) > + unsigned mocs, > + bool rw) > { > uint32_t *surf = brw_state_batch(brw, AUB_TRACE_SURFACE_STATE, > 8 * 4, 32, out_offset); > @@ -251,7 +252,8 @@ gen7_emit_buffer_surface_state(struct brw_context *brw, > > /* Emit relocation to surface contents */ > drm_intel_bo_emit_reloc(brw->batch.bo, *out_offset + 4, > - bo, buffer_offset, I915_GEM_DOMAIN_SAMPLER, 0); > + bo, buffer_offset, I915_GEM_DOMAIN_SAMPLER, > + (rw ? I915_GEM_DOMAIN_SAMPLER : 0)); > > gen7_check_surface_setup(surf, false /* is_render_target */); > } > @@ -348,7 +350,8 @@ gen7_update_buffer_texture_surface(struct gl_context > *ctx, > surface_format, > w, > texel_size, > - 0 /* mocs */); > + 0 /* mocs */, > + false /* rw */); > } > > static void > @@ -429,7 +432,27 @@ gen7_create_constant_surface(struct brw_context *brw, > BRW_SURFACEFORMAT_R32G32B32A32_FLOAT, > elements - 1, > stride, > - 0 /* mocs */); > + 0 /* mocs */, > + false /* rw */); > +} > + > +/** > + * Create a raw surface for untyped R/W access. > + */ > +static void > +gen7_create_raw_surface(struct brw_context *brw, drm_intel_bo *bo, > + uint32_t offset, uint32_t size, > + uint32_t *out_offset, bool rw) > +{ > + gen7_emit_buffer_surface_state(brw, > + out_offset, > + bo, > + offset, > + BRW_SURFACEFORMAT_RAW, > + size - 1, > Note: if you land this patch after Ken's "i965: Fix off by one errors in texture buffer size calculations.", I believe this will need to be just "size", not "size - 1". In any case, this patch is: Reviewed-by: Paul Berry <stereotype...@gmail.com> > + 1, > + 0 /* mocs */, > + true /* rw */); > } > > /** > @@ -445,7 +468,8 @@ gen7_create_shader_time_surface(struct brw_context > *brw, uint32_t *out_offset) > BRW_SURFACEFORMAT_RAW, > brw->shader_time.bo->size - 1, > 1, > - 0 /* mocs */); > + 0 /* mocs */, > + true /* rw */); > } > > static void > @@ -570,4 +594,5 @@ gen7_init_vtable_surface_functions(struct brw_context > *brw) > brw->vtbl.update_null_renderbuffer_surface = > gen7_update_null_renderbuffer_surface; > brw->vtbl.create_constant_surface = gen7_create_constant_surface; > + brw->vtbl.create_raw_surface = gen7_create_raw_surface; > } > -- > 1.8.3.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev