On Tue, May 10, 2016 at 04:16:35PM -0700, Jason Ekstrand wrote: > This array allows the push constants to be re-arranged on upload. The > actual arrangement will, eventually, come from the back-end compiler. > --- > src/mesa/drivers/dri/i965/brw_blorp.c | 4 ++++ > src/mesa/drivers/dri/i965/brw_blorp.h | 6 ++++++ > src/mesa/drivers/dri/i965/gen6_blorp.c | 12 +++++++----- > 3 files changed, 17 insertions(+), 5 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c > b/src/mesa/drivers/dri/i965/brw_blorp.c > index 4bbe45f..1379804 100644 > --- a/src/mesa/drivers/dri/i965/brw_blorp.c > +++ b/src/mesa/drivers/dri/i965/brw_blorp.c > @@ -139,6 +139,10 @@ brw_blorp_prog_data_init(struct brw_blorp_prog_data > *prog_data) > { > prog_data->first_curbe_grf = 0; > prog_data->persample_msaa_dispatch = false; > + > + prog_data->nr_params = BRW_BLORP_NUM_PUSH_CONSTANT_DWORDS; > + for (unsigned i = 0; i < BRW_BLORP_NUM_PUSH_CONSTANT_DWORDS; i++) > + prog_data->param[i] = i; > } > > > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h > b/src/mesa/drivers/dri/i965/brw_blorp.h > index 4a0e46e..c2f33a1 100644 > --- a/src/mesa/drivers/dri/i965/brw_blorp.h > +++ b/src/mesa/drivers/dri/i965/brw_blorp.h > @@ -199,6 +199,9 @@ struct brw_blorp_wm_push_constants > uint32_t pad[5]; > }; > > +#define BRW_BLORP_NUM_PUSH_CONSTANT_DWORDS \ > + (sizeof(struct brw_blorp_wm_push_constants) / 4) > + > /* Every 32 bytes of push constant data constitutes one GEN register. */ > static const unsigned int BRW_BLORP_NUM_PUSH_CONST_REGS = > sizeof(struct brw_blorp_wm_push_constants) / 32; > @@ -212,6 +215,9 @@ struct brw_blorp_prog_data > * than one sample per pixel. > */ > bool persample_msaa_dispatch; > + > + uint8_t nr_params; > + uint8_t param[BRW_BLORP_NUM_PUSH_CONSTANT_DWORDS]; > }; > > void brw_blorp_prog_data_init(struct brw_blorp_prog_data *prog_data); > diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.c > b/src/mesa/drivers/dri/i965/gen6_blorp.c > index 1955811..950e2b9 100644 > --- a/src/mesa/drivers/dri/i965/gen6_blorp.c > +++ b/src/mesa/drivers/dri/i965/gen6_blorp.c > @@ -308,11 +308,13 @@ gen6_blorp_emit_wm_constants(struct brw_context *brw, > { > uint32_t wm_push_const_offset; > > - void *constants = brw_state_batch(brw, AUB_TRACE_WM_CONSTANTS, > - sizeof(params->wm_push_consts), > - 32, &wm_push_const_offset); > - memcpy(constants, ¶ms->wm_push_consts, > - sizeof(params->wm_push_consts)); > + uint32_t *constants = brw_state_batch(brw, AUB_TRACE_WM_CONSTANTS, > + sizeof(params->wm_push_consts), > + 32, &wm_push_const_offset); > + > + uint32_t *push_consts = (uint32_t *)¶ms->wm_push_consts;
Could be: const uint32_t *push_consts = (const uint32_t *)¶ms->wm_push_consts; > + for (unsigned i = 0; i < params->wm_prog_data->nr_params; i++) > + constants[i] = push_consts[params->wm_prog_data->param[i]]; > > return wm_push_const_offset; > } > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev