From 108b92b1e9f645e9d2ff33b24648f5d089cb89c9 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sat, 10 Jan 2015 13:31:48 -0800 Subject: [PATCH] i965: Respect the no_8 flag on Gen4-5. This flag means to ignore the SIMD8 program and only use the SIMD16 one. It was originally meant for repdata clear shaders, but I plan to use it for other things on Gen4 as well. Signed-off-by: Kenneth Graunke Reviewed-by: Jordan Justen --- src/mesa/drivers/dri/i965/brw_wm_state.c | 55 +++++++++++++++--------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c b/src/mesa/drivers/dri/i965/brw_wm_state.c index afb4ebffc37..28a4aa43d83 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_state.c @@ -95,23 +95,40 @@ brw_upload_wm_unit(struct brw_context *brw) } /* BRW_NEW_PROGRAM_CACHE | BRW_NEW_FS_PROG_DATA */ - wm->thread0.grf_reg_count = prog_data->reg_blocks; - wm->wm9.grf_reg_count_2 = prog_data->reg_blocks_16; - - wm->thread0.kernel_start_pointer = - brw_program_reloc(brw, - brw->wm.base.state_offset + - offsetof(struct brw_wm_unit_state, thread0), - brw->wm.base.prog_offset + - (wm->thread0.grf_reg_count << 1)) >> 6; - - wm->wm9.kernel_start_pointer_2 = - brw_program_reloc(brw, - brw->wm.base.state_offset + - offsetof(struct brw_wm_unit_state, wm9), - brw->wm.base.prog_offset + - prog_data->prog_offset_16 + - (wm->wm9.grf_reg_count_2 << 1)) >> 6; + if (prog_data->no_8) { + wm->wm5.enable_16_pix = 1; + wm->thread0.grf_reg_count = prog_data->reg_blocks_16; + wm->thread0.kernel_start_pointer = + brw_program_reloc(brw, + brw->wm.base.state_offset + + offsetof(struct brw_wm_unit_state, thread0), + brw->wm.base.prog_offset + + prog_data->prog_offset_16 + + (prog_data->reg_blocks_16 << 1)) >> 6; + + } else { + wm->thread0.grf_reg_count = prog_data->reg_blocks; + wm->wm9.grf_reg_count_2 = prog_data->reg_blocks_16; + + wm->wm5.enable_8_pix = 1; + if (prog_data->prog_offset_16) + wm->wm5.enable_16_pix = 1; + + wm->thread0.kernel_start_pointer = + brw_program_reloc(brw, + brw->wm.base.state_offset + + offsetof(struct brw_wm_unit_state, thread0), + brw->wm.base.prog_offset + + (wm->thread0.grf_reg_count << 1)) >> 6; + + wm->wm9.kernel_start_pointer_2 = + brw_program_reloc(brw, + brw->wm.base.state_offset + + offsetof(struct brw_wm_unit_state, wm9), + brw->wm.base.prog_offset + + prog_data->prog_offset_16 + + (wm->wm9.grf_reg_count_2 << 1)) >> 6; + } wm->thread1.depth_coef_urb_read_offset = 1; if (prog_data->base.use_alt_mode) @@ -172,10 +189,6 @@ brw_upload_wm_unit(struct brw_context *brw) wm->wm5.program_uses_killpixel = prog_data->uses_kill || ctx->Color.AlphaEnabled; - wm->wm5.enable_8_pix = 1; - if (prog_data->prog_offset_16) - wm->wm5.enable_16_pix = 1; - wm->wm5.max_threads = brw->max_wm_threads - 1; /* _NEW_BUFFERS | _NEW_COLOR */ -- 2.30.2