diff options
author | Francisco Jerez <currojerez@riseup.net> | 2016-09-07 13:38:20 -0700 |
---|---|---|
committer | Francisco Jerez <currojerez@riseup.net> | 2016-09-14 14:50:53 -0700 |
commit | 69570bbad876bb9da609c3b651aacda28cecc542 (patch) | |
tree | 11f5930c4426d05b013ab874e489a3c8a1d51c7a /src/mesa/drivers/dri/i965/brw_fs_nir.cpp | |
parent | d28cfa35fec75c367b940ff829ba8eaa035fbd22 (diff) | |
download | external_mesa3d-69570bbad876bb9da609c3b651aacda28cecc542.zip external_mesa3d-69570bbad876bb9da609c3b651aacda28cecc542.tar.gz external_mesa3d-69570bbad876bb9da609c3b651aacda28cecc542.tar.bz2 |
i965/fs: Replace fs_inst::regs_written with ::size_written field in bytes.
The previous regs_written field can be recovered by rewriting each
rvalue reference of regs_written like 'x = i.regs_written' to 'x =
DIV_ROUND_UP(i.size_written, reg_unit)', and each lvalue reference
like 'i.regs_written = x' to 'i.size_written = x * reg_unit'.
For the same reason as in the previous patches, this doesn't attempt
to be particularly clever about simplifying the result in the interest
of keeping the rather lengthy patch as obvious as possible. I'll come
back later to clean up any ugliness introduced here.
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_fs_nir.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index cd4005c..42ed131 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -1661,7 +1661,7 @@ emit_pixel_interpolater_send(const fs_builder &bld, inst = bld.emit(opcode, dst, payload, desc); inst->mlen = mlen; /* 2 floats per slot returned */ - inst->regs_written = 2 * bld.dispatch_width() / 8; + inst->size_written = 2 * bld.dispatch_width() / 8 * REG_SIZE; inst->pi_noperspective = interpolation == INTERP_MODE_NOPERSPECTIVE; wm_prog_data->pulls_bary = true; @@ -2144,7 +2144,7 @@ fs_visitor::emit_gs_input_load(const fs_reg &dst, unsigned read_components = num_components + first_component; fs_reg tmp = bld.vgrf(dst.type, read_components); inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp, icp_handle); - inst->regs_written = read_components * type_sz(tmp_dst.type) / 4; + inst->size_written = read_components * type_sz(tmp_dst.type) / 4 * REG_SIZE; for (unsigned i = 0; i < num_components; i++) { bld.MOV(offset(tmp_dst, bld, i), offset(tmp, bld, i + first_component)); @@ -2152,7 +2152,7 @@ fs_visitor::emit_gs_input_load(const fs_reg &dst, } else { inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp_dst, icp_handle); - inst->regs_written = num_components * type_sz(tmp_dst.type) / 4; + inst->size_written = num_components * type_sz(tmp_dst.type) / 4 * REG_SIZE; } inst->offset = base_offset + offset_const->u32[0]; inst->mlen = 1; @@ -2166,7 +2166,7 @@ fs_visitor::emit_gs_input_load(const fs_reg &dst, if (first_component != 0) { inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, tmp, payload); - inst->regs_written = read_components * type_sz(tmp_dst.type) / 4; + inst->size_written = read_components * type_sz(tmp_dst.type) / 4 * REG_SIZE; for (unsigned i = 0; i < num_components; i++) { bld.MOV(offset(tmp_dst, bld, i), offset(tmp, bld, i + first_component)); @@ -2174,7 +2174,7 @@ fs_visitor::emit_gs_input_load(const fs_reg &dst, } else { inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, tmp_dst, payload); - inst->regs_written = num_components * type_sz(tmp_dst.type) / 4; + inst->size_written = num_components * type_sz(tmp_dst.type) / 4 * REG_SIZE; } inst->offset = base_offset; inst->mlen = 2; @@ -2204,7 +2204,7 @@ fs_visitor::emit_gs_input_load(const fs_reg &dst, /* Read the whole VUE header (because of alignment) and read .w. */ fs_reg tmp = bld.vgrf(dst.type, 4); inst->dst = tmp; - inst->regs_written = 4; + inst->size_written = 4 * REG_SIZE; bld.MOV(dst, offset(tmp, bld, 3)); } } @@ -2510,8 +2510,8 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, inst->offset = imm_offset; inst->mlen = 2; } - inst->regs_written = - ((num_components + first_component) * type_sz(dst.type) / 4); + inst->size_written = + ((num_components + first_component) * type_sz(dst.type) / 4) * REG_SIZE; /* If we are reading 64-bit data using 32-bit read messages we need * build proper 64-bit data elements by shuffling the low and high @@ -2535,7 +2535,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, if (inst->offset == 0 && indirect_offset.file == BAD_FILE) { assert(type_sz(dst.type) < 8); inst->dst = bld.vgrf(dst.type, 4); - inst->regs_written = 4; + inst->size_written = 4 * REG_SIZE; bld.MOV(dst, offset(inst->dst, bld, 3)); } @@ -2576,7 +2576,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp, patch_handle); inst->offset = 0; inst->mlen = 1; - inst->regs_written = 4; + inst->size_written = 4 * REG_SIZE; /* dst.xy = tmp.wz */ bld.MOV(dst, offset(tmp, bld, 3)); @@ -2584,11 +2584,11 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, break; } case GL_TRIANGLES: - /* DWord 4; hardcode offset = 1 and regs_written = 1 */ + /* DWord 4; hardcode offset = 1 and size_written = REG_SIZE */ inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, dst, patch_handle); inst->offset = 1; inst->mlen = 1; - inst->regs_written = 1; + inst->size_written = REG_SIZE; break; case GL_ISOLINES: /* All channels are undefined. */ @@ -2606,7 +2606,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp, patch_handle); inst->offset = 1; inst->mlen = 1; - inst->regs_written = 4; + inst->size_written = 4 * REG_SIZE; /* Reswizzle: WZYX */ fs_reg srcs[4] = { @@ -2641,7 +2641,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, fs_reg tmp = bld.vgrf(dst.type, read_components); inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp, patch_handle); - inst->regs_written = read_components; + inst->size_written = read_components * REG_SIZE; for (unsigned i = 0; i < instr->num_components; i++) { bld.MOV(offset(dst, bld, i), offset(tmp, bld, i + first_component)); @@ -2649,7 +2649,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, } else { inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, dst, patch_handle); - inst->regs_written = instr->num_components; + inst->size_written = instr->num_components * REG_SIZE; } inst->offset = imm_offset; inst->mlen = 1; @@ -2668,7 +2668,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, fs_reg tmp = bld.vgrf(dst.type, read_components); inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, tmp, payload); - inst->regs_written = read_components; + inst->size_written = read_components * REG_SIZE; for (unsigned i = 0; i < instr->num_components; i++) { bld.MOV(offset(dst, bld, i), offset(tmp, bld, i + first_component)); @@ -2676,7 +2676,7 @@ fs_visitor::nir_emit_tcs_intrinsic(const fs_builder &bld, } else { inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8_PER_SLOT, dst, payload); - inst->regs_written = instr->num_components; + inst->size_written = instr->num_components * REG_SIZE; } inst->offset = imm_offset; inst->mlen = 2; @@ -2976,7 +2976,7 @@ fs_visitor::nir_emit_tes_intrinsic(const fs_builder &bld, fs_reg tmp = bld.vgrf(dest.type, read_components); inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, tmp, patch_handle); - inst->regs_written = read_components; + inst->size_written = read_components * REG_SIZE; for (unsigned i = 0; i < instr->num_components; i++) { bld.MOV(offset(dest, bld, i), offset(tmp, bld, i + first_component)); @@ -2984,7 +2984,7 @@ fs_visitor::nir_emit_tes_intrinsic(const fs_builder &bld, } else { inst = bld.emit(SHADER_OPCODE_URB_READ_SIMD8, dest, patch_handle); - inst->regs_written = instr->num_components; + inst->size_written = instr->num_components * REG_SIZE; } inst->mlen = 1; inst->offset = imm_offset; @@ -3032,8 +3032,9 @@ fs_visitor::nir_emit_tes_intrinsic(const fs_builder &bld, } inst->mlen = 2; inst->offset = imm_offset; - inst->regs_written = - ((num_components + first_component) * type_sz(dest.type) / 4); + inst->size_written = + ((num_components + first_component) * type_sz(dest.type) / 4) * + REG_SIZE; /* If we are reading 64-bit data using 32-bit read messages we need * build proper 64-bit data elements by shuffling the low and high @@ -3207,8 +3208,7 @@ fs_visitor::emit_non_coherent_fb_read(const fs_builder &bld, const fs_reg &dst, STATIC_ASSERT(ARRAY_SIZE(srcs) == TEX_LOGICAL_NUM_SRCS); fs_inst *inst = bld.emit(op, dst, srcs, ARRAY_SIZE(srcs)); - inst->regs_written = 4 * inst->dst.component_size(inst->exec_size) / - REG_SIZE; + inst->size_written = 4 * inst->dst.component_size(inst->exec_size); return inst; } @@ -3223,8 +3223,7 @@ emit_coherent_fb_read(const fs_builder &bld, const fs_reg &dst, unsigned target) assert(bld.shader->devinfo->gen >= 9); fs_inst *inst = bld.emit(FS_OPCODE_FB_READ_LOGICAL, dst); inst->target = target; - inst->regs_written = 4 * inst->dst.component_size(inst->exec_size) / - REG_SIZE; + inst->size_written = 4 * inst->dst.component_size(inst->exec_size); return inst; } @@ -3903,7 +3902,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr const fs_builder ubld = bld.group(8, 0); const fs_reg tmp = ubld.vgrf(BRW_REGISTER_TYPE_UD, 2); ubld.emit(SHADER_OPCODE_MEMORY_FENCE, tmp) - ->regs_written = 2; + ->size_written = 2 * REG_SIZE; break; } @@ -4338,7 +4337,7 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr src_payload, brw_imm_ud(index)); inst->header_size = 0; inst->mlen = 1; - inst->regs_written = 4; + inst->size_written = 4 * REG_SIZE; bld.MOV(retype(dest, ret_payload.type), component(ret_payload, 0)); brw_mark_surface_used(prog_data, index); @@ -4685,9 +4684,9 @@ fs_visitor::nir_emit_texture(const fs_builder &bld, nir_tex_instr *instr) nir_ssa_def_components_read(&instr->dest.ssa): (1 << dest_size) - 1; assert(write_mask != 0); /* dead code should have been eliminated */ - inst->regs_written = util_last_bit(write_mask) * dispatch_width / 8; + inst->size_written = util_last_bit(write_mask) * dispatch_width / 8 * REG_SIZE; } else { - inst->regs_written = 4 * dispatch_width / 8; + inst->size_written = 4 * dispatch_width / 8 * REG_SIZE; } if (srcs[TEX_LOGICAL_SRC_SHADOW_C].file != BAD_FILE) |