summaryrefslogtreecommitdiff
path: root/src/video_core/engines
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-12-09 21:46:12 -0300
committerGravatar ReinUsesLisp2019-12-10 16:45:03 -0300
commit425a254fa24d7179124b4544ffeb2b1fe4fa99dc (patch)
treeffe458cdf75e70e072eab574051c72d0c4c837dc /src/video_core/engines
parentMerge pull request #3208 from ReinUsesLisp/vk-shader-decompiler (diff)
downloadyuzu-425a254fa24d7179124b4544ffeb2b1fe4fa99dc.tar.gz
yuzu-425a254fa24d7179124b4544ffeb2b1fe4fa99dc.tar.xz
yuzu-425a254fa24d7179124b4544ffeb2b1fe4fa99dc.zip
shader: Implement MEMBAR.GL
Implement using memoryBarrier in GLSL and OpMemoryBarrier on SPIR-V.
Diffstat (limited to 'src/video_core/engines')
-rw-r--r--src/video_core/engines/shader_bytecode.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h
index 7703a76a3..290d929df 100644
--- a/src/video_core/engines/shader_bytecode.h
+++ b/src/video_core/engines/shader_bytecode.h
@@ -384,6 +384,15 @@ enum class IsberdMode : u64 {
384 384
385enum class IsberdShift : u64 { None = 0, U16 = 1, B32 = 2 }; 385enum class IsberdShift : u64 { None = 0, U16 = 1, B32 = 2 };
386 386
387enum class MembarType : u64 {
388 CTA = 0,
389 GL = 1,
390 SYS = 2,
391 VC = 3,
392};
393
394enum class MembarUnknown : u64 { Default = 0, IVALLD = 1, IVALLT = 2, IVALLTD = 3 };
395
387enum class HalfType : u64 { 396enum class HalfType : u64 {
388 H0_H1 = 0, 397 H0_H1 = 0,
389 F32 = 1, 398 F32 = 1,
@@ -1546,6 +1555,11 @@ union Instruction {
1546 } isberd; 1555 } isberd;
1547 1556
1548 union { 1557 union {
1558 BitField<8, 2, MembarType> type;
1559 BitField<0, 2, MembarUnknown> unknown;
1560 } membar;
1561
1562 union {
1549 BitField<48, 1, u64> signed_a; 1563 BitField<48, 1, u64> signed_a;
1550 BitField<38, 1, u64> is_byte_chunk_a; 1564 BitField<38, 1, u64> is_byte_chunk_a;
1551 BitField<36, 2, VideoType> type_a; 1565 BitField<36, 2, VideoType> type_a;
@@ -1669,6 +1683,7 @@ public:
1669 IPA, 1683 IPA,
1670 OUT_R, // Emit vertex/primitive 1684 OUT_R, // Emit vertex/primitive
1671 ISBERD, 1685 ISBERD,
1686 MEMBAR,
1672 VMAD, 1687 VMAD,
1673 VSETP, 1688 VSETP,
1674 FFMA_IMM, // Fused Multiply and Add 1689 FFMA_IMM, // Fused Multiply and Add
@@ -1930,7 +1945,7 @@ private:
1930 INST("111000100100----", Id::BRA, Type::Flow, "BRA"), 1945 INST("111000100100----", Id::BRA, Type::Flow, "BRA"),
1931 INST("111000100101----", Id::BRX, Type::Flow, "BRX"), 1946 INST("111000100101----", Id::BRX, Type::Flow, "BRX"),
1932 INST("1111000011111---", Id::SYNC, Type::Flow, "SYNC"), 1947 INST("1111000011111---", Id::SYNC, Type::Flow, "SYNC"),
1933 INST("111000110100---", Id::BRK, Type::Flow, "BRK"), 1948 INST("111000110100----", Id::BRK, Type::Flow, "BRK"),
1934 INST("111000110000----", Id::EXIT, Type::Flow, "EXIT"), 1949 INST("111000110000----", Id::EXIT, Type::Flow, "EXIT"),
1935 INST("1111000011110---", Id::DEPBAR, Type::Synch, "DEPBAR"), 1950 INST("1111000011110---", Id::DEPBAR, Type::Synch, "DEPBAR"),
1936 INST("0101000011011---", Id::VOTE, Type::Warp, "VOTE"), 1951 INST("0101000011011---", Id::VOTE, Type::Warp, "VOTE"),
@@ -1969,6 +1984,7 @@ private:
1969 INST("11100000--------", Id::IPA, Type::Trivial, "IPA"), 1984 INST("11100000--------", Id::IPA, Type::Trivial, "IPA"),
1970 INST("1111101111100---", Id::OUT_R, Type::Trivial, "OUT_R"), 1985 INST("1111101111100---", Id::OUT_R, Type::Trivial, "OUT_R"),
1971 INST("1110111111010---", Id::ISBERD, Type::Trivial, "ISBERD"), 1986 INST("1110111111010---", Id::ISBERD, Type::Trivial, "ISBERD"),
1987 INST("1110111110011---", Id::MEMBAR, Type::Trivial, "MEMBAR"),
1972 INST("01011111--------", Id::VMAD, Type::Video, "VMAD"), 1988 INST("01011111--------", Id::VMAD, Type::Video, "VMAD"),
1973 INST("0101000011110---", Id::VSETP, Type::Video, "VSETP"), 1989 INST("0101000011110---", Id::VSETP, Type::Video, "VSETP"),
1974 INST("0011001-1-------", Id::FFMA_IMM, Type::Ffma, "FFMA_IMM"), 1990 INST("0011001-1-------", Id::FFMA_IMM, Type::Ffma, "FFMA_IMM"),