summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/decode/video.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-12-26 06:58:47 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-01-15 21:54:53 +0100
commit2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e (patch)
tree3faa264db225f2ae09ccf417fd962eddb40c2235 /src/video_core/shader/decode/video.cpp
parentshader_ir: Remove Ipa primitive (diff)
downloadyuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.tar
yuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.tar.gz
yuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.tar.bz2
yuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.tar.lz
yuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.tar.xz
yuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.tar.zst
yuzu-2faad9bf23dbcedc80dca7ed9ad4b81c0416dd5e.zip
Diffstat (limited to 'src/video_core/shader/decode/video.cpp')
-rw-r--r--src/video_core/shader/decode/video.cpp12
1 files changed, 3 insertions, 9 deletions
diff --git a/src/video_core/shader/decode/video.cpp b/src/video_core/shader/decode/video.cpp
index 9510896e4..b491fbadb 100644
--- a/src/video_core/shader/decode/video.cpp
+++ b/src/video_core/shader/decode/video.cpp
@@ -88,21 +88,15 @@ u32 ShaderIR::DecodeVideo(BasicBlock& bb, u32 pc) {
Node ShaderIR::GetVideoOperand(Node op, bool is_chunk, bool is_signed,
Tegra::Shader::VideoType type, u64 byte_height) {
if (!is_chunk) {
- const auto offset = static_cast<u32>(byte_height * 8);
- const Node shift = SignedOperation(OperationCode::ILogicalShiftRight, is_signed, NO_PRECISE,
- op, Immediate(offset));
- return SignedOperation(OperationCode::IBitwiseAnd, is_signed, NO_PRECISE, shift,
- Immediate(0xff));
+ return BitfieldExtract(op, static_cast<u32>(byte_height * 8), 8);
}
const Node zero = Immediate(0);
switch (type) {
case Tegra::Shader::VideoType::Size16_Low:
- return SignedOperation(OperationCode::IBitwiseAnd, is_signed, NO_PRECISE, op,
- Immediate(0xffff));
+ return BitfieldExtract(op, 0, 16);
case Tegra::Shader::VideoType::Size16_High:
- return SignedOperation(OperationCode::ILogicalShiftRight, is_signed, NO_PRECISE, op,
- Immediate(16));
+ return BitfieldExtract(op, 16, 16);
case Tegra::Shader::VideoType::Size32:
// TODO(Rodrigo): From my hardware tests it becomes a bit "mad" when this type is used
// (1 * 1 + 0 == 0x5b800000). Until a better explanation is found: abort.