summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2019-10-08 12:00:44 -0400
committerGravatar GitHub2019-10-08 12:00:44 -0400
commit971870b89d36c41c1c170a978a36200bb829167e (patch)
treef151ac58d839f30b571b68c01776901f08b94254
parentMerge pull request #2890 from Morph1984/hid_deactivatenpad (diff)
parentshader/half_set_predicate: Fix HSETP2 for constant buffers (diff)
downloadyuzu-971870b89d36c41c1c170a978a36200bb829167e.tar.gz
yuzu-971870b89d36c41c1c170a978a36200bb829167e.tar.xz
yuzu-971870b89d36c41c1c170a978a36200bb829167e.zip
Merge pull request #2959 from ReinUsesLisp/cbuf-hsetp2
shader/half_set_predicate: Fix HSETP2 for constant buffers
Diffstat (limited to '')
-rw-r--r--src/video_core/shader/decode/half_set_predicate.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/video_core/shader/decode/half_set_predicate.cpp b/src/video_core/shader/decode/half_set_predicate.cpp
index 840694527..fec8f2dbe 100644
--- a/src/video_core/shader/decode/half_set_predicate.cpp
+++ b/src/video_core/shader/decode/half_set_predicate.cpp
@@ -4,6 +4,7 @@
4 4
5#include "common/assert.h" 5#include "common/assert.h"
6#include "common/common_types.h" 6#include "common/common_types.h"
7#include "common/logging/log.h"
7#include "video_core/engines/shader_bytecode.h" 8#include "video_core/engines/shader_bytecode.h"
8#include "video_core/shader/node_helper.h" 9#include "video_core/shader/node_helper.h"
9#include "video_core/shader/shader_ir.h" 10#include "video_core/shader/shader_ir.h"
@@ -18,7 +19,7 @@ u32 ShaderIR::DecodeHalfSetPredicate(NodeBlock& bb, u32 pc) {
18 const Instruction instr = {program_code[pc]}; 19 const Instruction instr = {program_code[pc]};
19 const auto opcode = OpCode::Decode(instr); 20 const auto opcode = OpCode::Decode(instr);
20 21
21 DEBUG_ASSERT(instr.hsetp2.ftz == 0); 22 LOG_DEBUG(HW_GPU, "ftz={}", static_cast<u32>(instr.hsetp2.ftz));
22 23
23 Node op_a = UnpackHalfFloat(GetRegister(instr.gpr8), instr.hsetp2.type_a); 24 Node op_a = UnpackHalfFloat(GetRegister(instr.gpr8), instr.hsetp2.type_a);
24 op_a = GetOperandAbsNegHalf(op_a, instr.hsetp2.abs_a, instr.hsetp2.negate_a); 25 op_a = GetOperandAbsNegHalf(op_a, instr.hsetp2.abs_a, instr.hsetp2.negate_a);
@@ -32,6 +33,8 @@ u32 ShaderIR::DecodeHalfSetPredicate(NodeBlock& bb, u32 pc) {
32 h_and = instr.hsetp2.cbuf_and_imm.h_and; 33 h_and = instr.hsetp2.cbuf_and_imm.h_and;
33 op_b = GetOperandAbsNegHalf(GetConstBuffer(instr.cbuf34.index, instr.cbuf34.GetOffset()), 34 op_b = GetOperandAbsNegHalf(GetConstBuffer(instr.cbuf34.index, instr.cbuf34.GetOffset()),
34 instr.hsetp2.cbuf.abs_b, instr.hsetp2.cbuf.negate_b); 35 instr.hsetp2.cbuf.abs_b, instr.hsetp2.cbuf.negate_b);
36 // F32 is hardcoded in hardware
37 op_b = UnpackHalfFloat(std::move(op_b), Tegra::Shader::HalfType::F32);
35 break; 38 break;
36 case OpCode::Id::HSETP2_IMM: 39 case OpCode::Id::HSETP2_IMM:
37 cond = instr.hsetp2.cbuf_and_imm.cond; 40 cond = instr.hsetp2.cbuf_and_imm.cond;