i965: Refactor and expose brw_upload_binding_table()
Read and write parts of the state stage are also split into explicit arguments allowing future patches to use constant program data. v2 (Ken): s/BRW_NEW_WM_PROG_DATA/BRW_NEW_FS_PROG_DATA/ Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
parent
c15e20d8f6
commit
21071afc43
|
@ -50,15 +50,13 @@
|
||||||
* This copies brw_stage_state::surf_offset[] into the indirect state section
|
* This copies brw_stage_state::surf_offset[] into the indirect state section
|
||||||
* of the batchbuffer (allocated by brw_state_batch()).
|
* of the batchbuffer (allocated by brw_state_batch()).
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
brw_upload_binding_table(struct brw_context *brw,
|
brw_upload_binding_table(struct brw_context *brw,
|
||||||
uint32_t packet_name,
|
uint32_t packet_name,
|
||||||
GLbitfield brw_new_binding_table,
|
GLbitfield brw_new_binding_table,
|
||||||
|
const struct brw_stage_prog_data *prog_data,
|
||||||
struct brw_stage_state *stage_state)
|
struct brw_stage_state *stage_state)
|
||||||
{
|
{
|
||||||
/* BRW_NEW_*_PROG_DATA */
|
|
||||||
struct brw_stage_prog_data *prog_data = stage_state->prog_data;
|
|
||||||
|
|
||||||
if (prog_data->binding_table.size_bytes == 0) {
|
if (prog_data->binding_table.size_bytes == 0) {
|
||||||
/* There are no surfaces; skip making the binding table altogether. */
|
/* There are no surfaces; skip making the binding table altogether. */
|
||||||
if (stage_state->bind_bo_offset == 0 && brw->gen < 9)
|
if (stage_state->bind_bo_offset == 0 && brw->gen < 9)
|
||||||
|
@ -103,9 +101,12 @@ brw_upload_binding_table(struct brw_context *brw,
|
||||||
static void
|
static void
|
||||||
brw_vs_upload_binding_table(struct brw_context *brw)
|
brw_vs_upload_binding_table(struct brw_context *brw)
|
||||||
{
|
{
|
||||||
|
/* BRW_NEW_VS_PROG_DATA */
|
||||||
|
const struct brw_stage_prog_data *prog_data = brw->vs.base.prog_data;
|
||||||
brw_upload_binding_table(brw,
|
brw_upload_binding_table(brw,
|
||||||
_3DSTATE_BINDING_TABLE_POINTERS_VS,
|
_3DSTATE_BINDING_TABLE_POINTERS_VS,
|
||||||
BRW_NEW_VS_BINDING_TABLE, &brw->vs.base);
|
BRW_NEW_VS_BINDING_TABLE, prog_data,
|
||||||
|
&brw->vs.base);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct brw_tracked_state brw_vs_binding_table = {
|
const struct brw_tracked_state brw_vs_binding_table = {
|
||||||
|
@ -124,9 +125,12 @@ const struct brw_tracked_state brw_vs_binding_table = {
|
||||||
static void
|
static void
|
||||||
brw_upload_wm_binding_table(struct brw_context *brw)
|
brw_upload_wm_binding_table(struct brw_context *brw)
|
||||||
{
|
{
|
||||||
|
/* BRW_NEW_FS_PROG_DATA */
|
||||||
|
const struct brw_stage_prog_data *prog_data = brw->wm.base.prog_data;
|
||||||
brw_upload_binding_table(brw,
|
brw_upload_binding_table(brw,
|
||||||
_3DSTATE_BINDING_TABLE_POINTERS_PS,
|
_3DSTATE_BINDING_TABLE_POINTERS_PS,
|
||||||
BRW_NEW_PS_BINDING_TABLE, &brw->wm.base);
|
BRW_NEW_PS_BINDING_TABLE, prog_data,
|
||||||
|
&brw->wm.base);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct brw_tracked_state brw_wm_binding_table = {
|
const struct brw_tracked_state brw_wm_binding_table = {
|
||||||
|
@ -147,9 +151,12 @@ brw_gs_upload_binding_table(struct brw_context *brw)
|
||||||
if (brw->geometry_program == NULL)
|
if (brw->geometry_program == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* BRW_NEW_GS_PROG_DATA */
|
||||||
|
const struct brw_stage_prog_data *prog_data = brw->gs.base.prog_data;
|
||||||
brw_upload_binding_table(brw,
|
brw_upload_binding_table(brw,
|
||||||
_3DSTATE_BINDING_TABLE_POINTERS_GS,
|
_3DSTATE_BINDING_TABLE_POINTERS_GS,
|
||||||
BRW_NEW_GS_BINDING_TABLE, &brw->gs.base);
|
BRW_NEW_GS_BINDING_TABLE, prog_data,
|
||||||
|
&brw->gs.base);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct brw_tracked_state brw_gs_binding_table = {
|
const struct brw_tracked_state brw_gs_binding_table = {
|
||||||
|
|
|
@ -159,6 +159,13 @@ brw_state_dirty(struct brw_context *brw, GLuint mesa_flags, uint64_t brw_flags)
|
||||||
(brw->ctx.NewDriverState & brw_flags)) != 0;
|
(brw->ctx.NewDriverState & brw_flags)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* brw_binding_tables.c */
|
||||||
|
void brw_upload_binding_table(struct brw_context *brw,
|
||||||
|
uint32_t packet_name,
|
||||||
|
GLbitfield brw_new_binding_table,
|
||||||
|
const struct brw_stage_prog_data *prog_data,
|
||||||
|
struct brw_stage_state *stage_state);
|
||||||
|
|
||||||
/* brw_misc_state.c */
|
/* brw_misc_state.c */
|
||||||
void brw_upload_invariant_state(struct brw_context *brw);
|
void brw_upload_invariant_state(struct brw_context *brw);
|
||||||
uint32_t
|
uint32_t
|
||||||
|
|
Loading…
Reference in New Issue