On Tue, Apr 28, 2015 at 11:08:09PM +0300, Abdiel Janulgue wrote: > To be able to refer to a constant buffer, the resource streamer needs > to index it with a hardware binding table entry. This blankets the ubo > buffers with hardware binding table indices. > > Gather constants hardware fetches in 16-entry binding table blocks. > So we need to use a block that is unused. > > Signed-off-by: Abdiel Janulgue <abdiel.janul...@linux.intel.com> > --- > src/mesa/drivers/dri/i965/brw_context.h | 11 +++++++++++ > src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 6 ++++++ > 2 files changed, 17 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_context.h > b/src/mesa/drivers/dri/i965/brw_context.h > index e25c64d..276c359 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.h > +++ b/src/mesa/drivers/dri/i965/brw_context.h > @@ -678,6 +678,17 @@ struct brw_vs_prog_data { > > #define SURF_INDEX_GEN6_SOL_BINDING(t) (t) > > +/** Start of hardware binding table index for uniform gather constant > entries. > + * This must be aligned to the start of a hardware binding table block (a > block > + * is a group 16 binding table entries). > + */ > +#define BRW_UNIFORM_GATHER_INDEX_START 32 > + > +/** Appended to the end of the binding table index for uniform constant > buffers to indicate
Wrap this line. > + * start of the UBO gather constant binding table. > + */ > +#define BRW_UBO_GATHER_INDEX_APPEND 2 > + > /* Note: brw_gs_prog_data_compare() must be updated when adding fields to > * this struct! > */ > 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 161d140..ce61554 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > @@ -884,6 +884,7 @@ brw_upload_ubo_surfaces(struct brw_context *brw, > > uint32_t *surf_offsets = > &stage_state->surf_offset[prog_data->binding_table.ubo_start]; > + bool use_gather = (brw->gather_pool.bo != NULL); I would move this closer to the only use. This won't get re-used in the rest of the series. > > for (int i = 0; i < shader->NumUniformBlocks; i++) { > struct gl_uniform_buffer_binding *binding; > @@ -904,6 +905,11 @@ brw_upload_ubo_surfaces(struct brw_context *brw, > bo->size - binding->Offset, > &surf_offsets[i], > dword_pitch); > + if (use_gather) { Or simply: if (brw->gather_pool.bo) { > + int bt_idx = BRW_UNIFORM_GATHER_INDEX_START + > BRW_UBO_GATHER_INDEX_APPEND + i; Wrap this line. > + gen7_update_binding_table(brw, stage_state->stage, > + bt_idx, surf_offsets[i]); > + } > } > > if (shader->NumUniformBlocks) > -- > 1.9.1 > > _______________________________________________ > 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