From 5db4d623956ceb5ffa8599e7797bd13470898158 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Fri, 20 May 2016 00:13:19 -0700 Subject: [PATCH] i965/fs: Remove FS_OPCODE_PACK_STENCIL_REF virtual instruction. It's just a byte MOV with strided source. Reviewed-by: Jason Ekstrand --- src/mesa/drivers/dri/i965/brw_defines.h | 1 - src/mesa/drivers/dri/i965/brw_fs.cpp | 4 +- src/mesa/drivers/dri/i965/brw_fs.h | 2 - .../drivers/dri/i965/brw_fs_generator.cpp | 45 ------------------- src/mesa/drivers/dri/i965/brw_shader.cpp | 2 - 5 files changed, 2 insertions(+), 52 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h index 91194713ef8..a5f3b52fa35 100644 --- a/src/mesa/drivers/dri/i965/brw_defines.h +++ b/src/mesa/drivers/dri/i965/brw_defines.h @@ -951,7 +951,6 @@ enum opcode { FS_OPCODE_FB_WRITE_LOGICAL, FS_OPCODE_REP_FB_WRITE, - FS_OPCODE_PACK_STENCIL_REF, SHADER_OPCODE_RCP, SHADER_OPCODE_RSQ, SHADER_OPCODE_SQRT, diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 03db084aa8b..5c5354e34f4 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -3824,8 +3824,8 @@ lower_fb_write_logical_send(const fs_builder &bld, fs_inst *inst, sources[length] = bld.vgrf(BRW_REGISTER_TYPE_UD); bld.exec_all().annotate("FB write OS") - .emit(FS_OPCODE_PACK_STENCIL_REF, sources[length], - retype(src_stencil, BRW_REGISTER_TYPE_UB)); + .MOV(retype(sources[length], BRW_REGISTER_TYPE_UB), + subscript(src_stencil, BRW_REGISTER_TYPE_UB, 0)); length++; } diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 5630063ff48..c249c82576a 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -430,8 +430,6 @@ private: void generate_urb_read(fs_inst *inst, struct brw_reg dst, struct brw_reg payload); void generate_urb_write(fs_inst *inst, struct brw_reg payload); void generate_cs_terminate(fs_inst *inst, struct brw_reg payload); - void generate_stencil_ref_packing(fs_inst *inst, struct brw_reg dst, - struct brw_reg src); void generate_barrier(fs_inst *inst, struct brw_reg src); void generate_linterp(fs_inst *inst, struct brw_reg dst, struct brw_reg *src); diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp index 6919a9c023f..78a45b6d919 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp @@ -509,47 +509,6 @@ fs_generator::generate_cs_terminate(fs_inst *inst, struct brw_reg payload) brw_inst_set_mask_control(devinfo, insn, BRW_MASK_DISABLE); } -void -fs_generator::generate_stencil_ref_packing(fs_inst *inst, - struct brw_reg dst, - struct brw_reg src) -{ - assert(dispatch_width == 8); - assert(devinfo->gen >= 9); - - /* Stencil value updates are provided in 8 slots of 1 byte per slot. - * Presumably, in order to save memory bandwidth, the stencil reference - * values written from the FS need to be packed into 2 dwords (this makes - * sense because the stencil values are limited to 1 byte each and a SIMD8 - * send, so stencil slots 0-3 in dw0, and 4-7 in dw1.) - * - * The spec is confusing here because in the payload definition of MDP_RTW_S8 - * (Message Data Payload for Render Target Writes with Stencil 8b) the - * stencil value seems to be dw4.0-dw4.7. However, if you look at the type of - * dw4 it is type MDPR_STENCIL (Message Data Payload Register) which is the - * packed values specified above and diagrammed below: - * - * 31 0 - * -------------------------------- - * DW | | - * 2-7 | IGNORED | - * | | - * -------------------------------- - * DW1 | STC | STC | STC | STC | - * | slot7 | slot6 | slot5 | slot4| - * -------------------------------- - * DW0 | STC | STC | STC | STC | - * | slot3 | slot2 | slot1 | slot0| - * -------------------------------- - */ - - src.vstride = BRW_VERTICAL_STRIDE_4; - src.width = BRW_WIDTH_1; - src.hstride = BRW_HORIZONTAL_STRIDE_0; - assert(src.type == BRW_REGISTER_TYPE_UB); - brw_MOV(p, retype(dst, BRW_REGISTER_TYPE_UB), src); -} - void fs_generator::generate_barrier(fs_inst *inst, struct brw_reg src) { @@ -2102,10 +2061,6 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width) generate_barrier(inst, src[0]); break; - case FS_OPCODE_PACK_STENCIL_REF: - generate_stencil_ref_packing(inst, dst, src[0]); - break; - default: unreachable("Unsupported opcode"); diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp index a9051a89aa6..bdaf513a548 100644 --- a/src/mesa/drivers/dri/i965/brw_shader.cpp +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -163,8 +163,6 @@ brw_instruction_name(const struct brw_device_info *devinfo, enum opcode op) return "fb_write"; case FS_OPCODE_FB_WRITE_LOGICAL: return "fb_write_logical"; - case FS_OPCODE_PACK_STENCIL_REF: - return "pack_stencil_ref"; case FS_OPCODE_REP_FB_WRITE: return "rep_fb_write"; -- 2.30.2