diff options
| author | 2019-12-09 21:46:12 -0300 | |
|---|---|---|
| committer | 2019-12-10 16:45:03 -0300 | |
| commit | 425a254fa24d7179124b4544ffeb2b1fe4fa99dc (patch) | |
| tree | ffe458cdf75e70e072eab574051c72d0c4c837dc /src/video_core/engines | |
| parent | Merge pull request #3208 from ReinUsesLisp/vk-shader-decompiler (diff) | |
| download | yuzu-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.h | 18 |
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 | ||
| 385 | enum class IsberdShift : u64 { None = 0, U16 = 1, B32 = 2 }; | 385 | enum class IsberdShift : u64 { None = 0, U16 = 1, B32 = 2 }; |
| 386 | 386 | ||
| 387 | enum class MembarType : u64 { | ||
| 388 | CTA = 0, | ||
| 389 | GL = 1, | ||
| 390 | SYS = 2, | ||
| 391 | VC = 3, | ||
| 392 | }; | ||
| 393 | |||
| 394 | enum class MembarUnknown : u64 { Default = 0, IVALLD = 1, IVALLT = 2, IVALLTD = 3 }; | ||
| 395 | |||
| 387 | enum class HalfType : u64 { | 396 | enum 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"), |