mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
i965/blorp: Add a param array to prog_data
This array allows the push constants to be re-arranged on upload. The actual arrangement will, eventually, come from the back-end compiler. Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
c46cbe19f4
commit
cd5a2905cf
3 changed files with 22 additions and 5 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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,14 @@ struct brw_blorp_prog_data
|
|||
* than one sample per pixel.
|
||||
*/
|
||||
bool persample_msaa_dispatch;
|
||||
|
||||
/* The compiler will re-arrange push constants and store the upload order
|
||||
* here. Given an index 'i' in the final upload buffer, param[i] gives the
|
||||
* index in the uniform store. In other words, the value to be uploaded can
|
||||
* be found by brw_blorp_params::wm_push_consts[param[i]].
|
||||
*/
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue