On Tue, Oct 25, 2016 at 09:13:59AM -0700, Jason Ekstrand wrote: > On Oct 25, 2016 2:18 AM, "Pohjolainen, Topi" > <[1]topi.pohjolai...@gmail.com> wrote: > > > > On Sat, Oct 22, 2016 at 10:50:32AM -0700, Jason Ekstrand wrote: > > > Signed-off-by: Jason Ekstrand <[2]ja...@jlekstrand.net> > > > --- > > > src/intel/blorp/blorp_genX_exec.h | 33 > ++++---------- > > > src/intel/isl/isl.c | 19 ++++++++ > > > src/intel/isl/isl.h | 11 +++++ > > > src/intel/vulkan/anv_batch_chain.c | 4 +- > > > src/intel/vulkan/genX_cmd_buffer.c | 8 +--- > > > src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 56 > +++++++++++------------- > > > 6 files changed, 69 insertions(+), 62 deletions(-) > > > > > > diff --git a/src/intel/blorp/blorp_genX_exec.h > b/src/intel/blorp/blorp_genX_exec.h > > > index ec0d022..d455714 100644 > > > --- a/src/intel/blorp/blorp_genX_exec.h > > > +++ b/src/intel/blorp/blorp_genX_exec.h > > > @@ -995,28 +995,13 @@ blorp_emit_depth_stencil_state(struct > blorp_batch *batch, > > > return offset; > > > } > > > > > > -struct surface_state_info { > > > - unsigned num_dwords; > > > - unsigned ss_align; /* Required alignment of > RENDER_SURFACE_STATE in bytes */ > > > - unsigned reloc_dw; > > > - unsigned aux_reloc_dw; > > > -}; > > > - > > > -static const struct surface_state_info surface_state_infos[] = { > > > - [6] = {6, 32, 1, 0}, > > > - [7] = {8, 32, 1, 6}, > > > - [8] = {13, 64, 8, 10}, > > > - [9] = {16, 64, 8, 10}, > > > -}; > > > - > > > static void > > > blorp_emit_surface_state(struct blorp_batch *batch, > > > const struct brw_blorp_surface_info > *surface, > > > - uint32_t *state, uint32_t state_offset, > > > + void *state, uint32_t state_offset, > > > bool is_render_target) > > > { > > > - const struct surface_state_info ss_info = > surface_state_infos[GEN_GEN]; > > > - > > > + const struct isl_device *isl_dev = batch->blorp->isl_dev; > > > struct isl_surf surf = surface->surf; > > > > > > if (surf.dim == ISL_SURF_DIM_1D && > > > @@ -1038,7 +1023,7 @@ blorp_emit_surface_state(struct blorp_batch > *batch, > > > .aux_surf = &surface->aux_surf, .aux_usage > = aux_usage, > > > .mocs = mocs, .clear_color = > surface->clear_color); > > > > > > - blorp_surface_reloc(batch, state_offset + ss_info.reloc_dw * 4, > > > + blorp_surface_reloc(batch, state_offset + > isl_dev->ss.addr_offset, > > > surface->addr, 0); > > > > > > if (aux_usage != ISL_AUX_USAGE_NONE) { > > > @@ -1047,8 +1032,9 @@ blorp_emit_surface_state(struct blorp_batch > *batch, > > > * surface buffer addresses are always 4K page alinged. > > > */ > > > assert((surface->aux_addr.offset & 0xfff) == 0); > > > - blorp_surface_reloc(batch, state_offset + > ss_info.aux_reloc_dw * 4, > > > - surface->aux_addr, > state[ss_info.aux_reloc_dw]); > > > + uint32_t *aux_addr = state + isl_dev->ss.aux_addr_offset; > > > > Previously 'state' got indexed in dwords (ss_info.aux_reloc_dw). Now > this > > uses 'isl_dev->ss.aux_addr_offset' instead (which is in number of > bytes). > > Aren't we offsetting four times too far? > > No. State is now a void* (See above)
Ah, I missed that. I didn't actually know that arithmetic on void pointers is allowed. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev