summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-16 22:22:59 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:28 +0200
commit95815a3883d708f71db5119f42243e183f32f9a2 (patch)
treeb479ed61fb90f8bc6dbe25983a431e336f5f5ce9 /src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp
parentspirv: Bitcast non-F32 output attributes to their type before store (diff)
downloadyuzu-95815a3883d708f71db5119f42243e183f32f9a2.tar
yuzu-95815a3883d708f71db5119f42243e183f32f9a2.tar.gz
yuzu-95815a3883d708f71db5119f42243e183f32f9a2.tar.bz2
yuzu-95815a3883d708f71db5119f42243e183f32f9a2.tar.lz
yuzu-95815a3883d708f71db5119f42243e183f32f9a2.tar.xz
yuzu-95815a3883d708f71db5119f42243e183f32f9a2.tar.zst
yuzu-95815a3883d708f71db5119f42243e183f32f9a2.zip
Diffstat (limited to 'src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp')
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp
new file mode 100644
index 000000000..b4767afb5
--- /dev/null
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/pixel_load.cpp
@@ -0,0 +1,46 @@
+// Copyright 2021 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "common/bit_field.h"
+#include "common/common_types.h"
+#include "shader_recompiler/frontend/maxwell/translate/impl/impl.h"
+
+namespace Shader::Maxwell {
+namespace {
+enum class Mode : u64 {
+ Default,
+ CovMask,
+ Covered,
+ Offset,
+ CentroidOffset,
+ MyIndex,
+};
+} // Anonymous namespace
+
+void TranslatorVisitor::PIXLD(u64 insn) {
+ union {
+ u64 raw;
+ BitField<31, 3, Mode> mode;
+ BitField<0, 8, IR::Reg> dest_reg;
+ BitField<8, 8, IR::Reg> addr_reg;
+ BitField<20, 8, s64> addr_offset;
+ BitField<45, 3, IR::Pred> dest_pred;
+ } const pixld{insn};
+
+ if (pixld.dest_pred != IR::Pred::PT) {
+ throw NotImplementedException("Destination predicate");
+ }
+ if (pixld.addr_reg != IR::Reg::RZ || pixld.addr_offset != 0) {
+ throw NotImplementedException("Non-zero source register");
+ }
+ switch (pixld.mode) {
+ case Mode::MyIndex:
+ X(pixld.dest_reg, ir.SampleId());
+ break;
+ default:
+ throw NotImplementedException("Mode {}", pixld.mode.Value());
+ }
+}
+
+} // namespace Shader::Maxwell