mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 02:40:11 +01:00
intel/fs: use nomask for setting cr0 for float controls
The instructions manipulation cr0 use the default mask on lane0. So if for some reason that lane is disabled in some of the dispatchs, we can end up not executing the instructions. Fixes flakyness in dEQP-VK.spirv_assembly.instruction.graphics.16bit_storage.uniform_float_32_to_16.uniform_matrix_float_rtz_frag Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: mesa-stable Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22314>
This commit is contained in:
parent
45a682650c
commit
daa8003e45
2 changed files with 13 additions and 11 deletions
|
|
@ -3614,6 +3614,8 @@ void
|
|||
brw_float_controls_mode(struct brw_codegen *p,
|
||||
unsigned mode, unsigned mask)
|
||||
{
|
||||
assert(p->current->mask_control == BRW_MASK_DISABLE);
|
||||
|
||||
/* From the Skylake PRM, Volume 7, page 760:
|
||||
* "Implementation Restriction on Register Access: When the control
|
||||
* register is used as an explicit source and/or destination, hardware
|
||||
|
|
|
|||
|
|
@ -1030,7 +1030,7 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr,
|
|||
rnd = brw_rnd_mode_from_nir_op(instr->op);
|
||||
|
||||
if (BRW_RND_MODE_UNSPECIFIED != rnd)
|
||||
bld.emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(), brw_imm_d(rnd));
|
||||
bld.exec_all().emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(), brw_imm_d(rnd));
|
||||
|
||||
assert(type_sz(op[0].type) < 8); /* brw_nir_lower_conversions */
|
||||
inst = bld.F32TO16(result, op[0]);
|
||||
|
|
@ -1139,7 +1139,7 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr,
|
|||
if (nir_has_any_rounding_mode_enabled(execution_mode)) {
|
||||
brw_rnd_mode rnd =
|
||||
brw_rnd_mode_from_execution_mode(execution_mode);
|
||||
bld.emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
bld.exec_all().emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
brw_imm_d(rnd));
|
||||
}
|
||||
|
||||
|
|
@ -1192,7 +1192,7 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr,
|
|||
if (nir_has_any_rounding_mode_enabled(execution_mode)) {
|
||||
brw_rnd_mode rnd =
|
||||
brw_rnd_mode_from_execution_mode(execution_mode);
|
||||
bld.emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
bld.exec_all().emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
brw_imm_d(rnd));
|
||||
}
|
||||
FALLTHROUGH;
|
||||
|
|
@ -1258,7 +1258,7 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr,
|
|||
if (nir_has_any_rounding_mode_enabled(execution_mode)) {
|
||||
brw_rnd_mode rnd =
|
||||
brw_rnd_mode_from_execution_mode(execution_mode);
|
||||
bld.emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
bld.exec_all().emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
brw_imm_d(rnd));
|
||||
}
|
||||
|
||||
|
|
@ -1806,7 +1806,7 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr,
|
|||
if (nir_has_any_rounding_mode_enabled(execution_mode)) {
|
||||
brw_rnd_mode rnd =
|
||||
brw_rnd_mode_from_execution_mode(execution_mode);
|
||||
bld.emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
bld.exec_all().emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
brw_imm_d(rnd));
|
||||
}
|
||||
|
||||
|
|
@ -1817,7 +1817,7 @@ fs_visitor::nir_emit_alu(const fs_builder &bld, nir_alu_instr *instr,
|
|||
if (nir_has_any_rounding_mode_enabled(execution_mode)) {
|
||||
brw_rnd_mode rnd =
|
||||
brw_rnd_mode_from_execution_mode(execution_mode);
|
||||
bld.emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
bld.exec_all().emit(SHADER_OPCODE_RND_MODE, bld.null_reg_ud(),
|
||||
brw_imm_d(rnd));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue