i965/fs: Move the computation of register block count from unit to compile.
No net code size change, but unit update is down 0.8% code size pre-gen6. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
615117ce4e
commit
1791857d7d
|
@ -231,8 +231,8 @@ struct brw_wm_prog_data {
|
||||||
|
|
||||||
GLuint first_curbe_grf;
|
GLuint first_curbe_grf;
|
||||||
GLuint first_curbe_grf_16;
|
GLuint first_curbe_grf_16;
|
||||||
GLuint total_grf;
|
GLuint reg_blocks;
|
||||||
GLuint total_grf_16;
|
GLuint reg_blocks_16;
|
||||||
GLuint total_scratch;
|
GLuint total_scratch;
|
||||||
|
|
||||||
GLuint nr_params; /**< number of float params/constants */
|
GLuint nr_params; /**< number of float params/constants */
|
||||||
|
@ -863,6 +863,17 @@ float convert_param(enum param_conversion conversion, float param)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pre-gen6, the register file of the EUs was shared between threads,
|
||||||
|
* and each thread used some subset allocated on a 16-register block
|
||||||
|
* granularity. The unit states wanted these block counts.
|
||||||
|
*/
|
||||||
|
static inline int
|
||||||
|
brw_register_blocks(int reg_count)
|
||||||
|
{
|
||||||
|
return ALIGN(reg_count, 16) / 16 - 1;
|
||||||
|
}
|
||||||
|
|
||||||
GLboolean brw_do_cubemap_normalize(struct exec_list *instructions);
|
GLboolean brw_do_cubemap_normalize(struct exec_list *instructions);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4170,9 +4170,9 @@ fs_visitor::run()
|
||||||
generate_code();
|
generate_code();
|
||||||
|
|
||||||
if (c->dispatch_width == 8) {
|
if (c->dispatch_width == 8) {
|
||||||
c->prog_data.total_grf = grf_used;
|
c->prog_data.reg_blocks = brw_register_blocks(grf_used);
|
||||||
} else {
|
} else {
|
||||||
c->prog_data.total_grf_16 = grf_used;
|
c->prog_data.reg_blocks_16 = brw_register_blocks(grf_used);
|
||||||
c->prog_data.prog_offset_16 = prog_offset_16;
|
c->prog_data.prog_offset_16 = prog_offset_16;
|
||||||
|
|
||||||
/* Make sure we didn't try to sneak in an extra uniform */
|
/* Make sure we didn't try to sneak in an extra uniform */
|
||||||
|
|
|
@ -115,7 +115,7 @@ brw_wm_non_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c)
|
||||||
brw_wm_pass2(c);
|
brw_wm_pass2(c);
|
||||||
|
|
||||||
/* how many general-purpose registers are used */
|
/* how many general-purpose registers are used */
|
||||||
c->prog_data.total_grf = c->max_wm_grf;
|
c->prog_data.reg_blocks = brw_register_blocks(c->max_wm_grf);
|
||||||
|
|
||||||
/* Emit GEN4 code.
|
/* Emit GEN4 code.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -91,8 +91,8 @@ brw_prepare_wm_unit(struct brw_context *brw)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CACHE_NEW_WM_PROG */
|
/* CACHE_NEW_WM_PROG */
|
||||||
wm->thread0.grf_reg_count = ALIGN(brw->wm.prog_data->total_grf, 16) / 16 - 1;
|
wm->thread0.grf_reg_count = brw->wm.prog_data->reg_blocks;
|
||||||
wm->wm9.grf_reg_count_2 = ALIGN(brw->wm.prog_data->total_grf_16, 16) / 16 - 1;
|
wm->wm9.grf_reg_count_2 = brw->wm.prog_data->reg_blocks_16;
|
||||||
wm->thread0.kernel_start_pointer = brw->wm.prog_bo->offset >> 6; /* reloc */
|
wm->thread0.kernel_start_pointer = brw->wm.prog_bo->offset >> 6; /* reloc */
|
||||||
/* reloc */
|
/* reloc */
|
||||||
wm->wm9.kernel_start_pointer_2 = (brw->wm.prog_bo->offset +
|
wm->wm9.kernel_start_pointer_2 = (brw->wm.prog_bo->offset +
|
||||||
|
|
Loading…
Reference in New Issue