aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/shader/decode/video.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-07-24 06:33:09 -0700
committerGitHub <noreply@github.com>2020-07-24 06:33:09 -0700
commitf650cf8a9a4f4976356e7e2eef404e81ccc0c8aa (patch)
treeacb35a74ffe2349a7ac0c605a4c43972142bfdb2 /src/video_core/shader/decode/video.cpp
parent1d7de0a8ee04713c5d8011f379524ff53cb8c483 (diff)
parent6adc824d9d15b476320739788564023f995b9da0 (diff)
Merge pull request #4391 from lioncash/nrvo
video_core: Allow copy elision to take place where applicable
Diffstat (limited to 'src/video_core/shader/decode/video.cpp')
-rw-r--r--src/video_core/shader/decode/video.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/video_core/shader/decode/video.cpp b/src/video_core/shader/decode/video.cpp
index 64ba60ea2..1c0957277 100644
--- a/src/video_core/shader/decode/video.cpp
+++ b/src/video_core/shader/decode/video.cpp
@@ -91,29 +91,28 @@ u32 ShaderIR::DecodeVideo(NodeBlock& bb, u32 pc) {
return pc;
}
-Node ShaderIR::GetVideoOperand(Node op, bool is_chunk, bool is_signed,
- Tegra::Shader::VideoType type, u64 byte_height) {
+Node ShaderIR::GetVideoOperand(Node op, bool is_chunk, bool is_signed, VideoType type,
+ u64 byte_height) {
if (!is_chunk) {
return BitfieldExtract(op, static_cast<u32>(byte_height * 8), 8);
}
- const Node zero = Immediate(0);
switch (type) {
- case Tegra::Shader::VideoType::Size16_Low:
+ case VideoType::Size16_Low:
return BitfieldExtract(op, 0, 16);
- case Tegra::Shader::VideoType::Size16_High:
+ case VideoType::Size16_High:
return BitfieldExtract(op, 16, 16);
- case Tegra::Shader::VideoType::Size32:
+ case 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.
UNIMPLEMENTED();
- return zero;
- case Tegra::Shader::VideoType::Invalid:
+ return Immediate(0);
+ case VideoType::Invalid:
UNREACHABLE_MSG("Invalid instruction encoding");
- return zero;
+ return Immediate(0);
default:
UNREACHABLE();
- return zero;
+ return Immediate(0);
}
}