intel/fs: Rework KSP data to be SIMD width-based

Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Jason Ekstrand
2018-05-17 23:49:29 -07:00
parent 9d78abbef8
commit 0b830081f0
3 changed files with 43 additions and 47 deletions

View File

@@ -683,11 +683,11 @@ struct brw_wm_prog_data {
GLuint num_varying_inputs;
uint8_t reg_blocks_0;
uint8_t reg_blocks_2;
uint8_t reg_blocks_8;
uint8_t reg_blocks_16;
uint8_t dispatch_grf_start_reg_2;
uint32_t prog_offset_2;
uint8_t dispatch_grf_start_reg_16;
uint32_t prog_offset_16;
struct {
/** @{
@@ -784,51 +784,48 @@ brw_fs_simd_width_for_ksp(unsigned ksp_idx, bool simd8_enabled,
static inline uint32_t
_brw_wm_prog_data_prog_offset(const struct brw_wm_prog_data *prog_data,
unsigned ksp_idx)
unsigned simd_width)
{
switch (ksp_idx) {
case 0: return 0;
case 1: return 0;
case 2: return prog_data->prog_offset_2;
default:
unreachable("Invalid KSP index");
switch (simd_width) {
case 8: return 0;
case 16: return prog_data->prog_offset_16;
default: return 0;
}
}
#define brw_wm_prog_data_prog_offset(prog_data, wm_state, ksp_idx) \
_brw_wm_prog_data_prog_offset(prog_data, ksp_idx)
_brw_wm_prog_data_prog_offset(prog_data, \
brw_wm_state_simd_width_for_ksp(wm_state, ksp_idx))
static inline uint8_t
_brw_wm_prog_data_dispatch_grf_start_reg(const struct brw_wm_prog_data *prog_data,
unsigned ksp_idx)
unsigned simd_width)
{
switch (ksp_idx) {
case 0: return prog_data->base.dispatch_grf_start_reg;
case 1: return 0;
case 2: return prog_data->dispatch_grf_start_reg_2;
default:
unreachable("Invalid KSP index");
switch (simd_width) {
case 8: return prog_data->base.dispatch_grf_start_reg;
case 16: return prog_data->dispatch_grf_start_reg_16;
default: return 0;
}
}
#define brw_wm_prog_data_dispatch_grf_start_reg(prog_data, wm_state, ksp_idx) \
_brw_wm_prog_data_dispatch_grf_start_reg(prog_data, ksp_idx)
_brw_wm_prog_data_dispatch_grf_start_reg(prog_data, \
brw_wm_state_simd_width_for_ksp(wm_state, ksp_idx))
static inline uint8_t
_brw_wm_prog_data_reg_blocks(const struct brw_wm_prog_data *prog_data,
unsigned ksp_idx)
unsigned simd_width)
{
switch (ksp_idx) {
case 0: return prog_data->reg_blocks_0;
case 1: return 0;
case 2: return prog_data->reg_blocks_2;
default:
unreachable("Invalid KSP index");
switch (simd_width) {
case 8: return prog_data->reg_blocks_8;
case 16: return prog_data->reg_blocks_16;
default: return 0;
}
}
#define brw_wm_prog_data_reg_blocks(prog_data, wm_state, ksp_idx) \
_brw_wm_prog_data_reg_blocks(prog_data, ksp_idx)
_brw_wm_prog_data_reg_blocks(prog_data, \
brw_wm_state_simd_width_for_ksp(wm_state, ksp_idx))
struct brw_push_const_block {
unsigned dwords; /* Dword count, not reg aligned */