diff options
| author | 2019-09-25 17:46:02 -0400 | |
|---|---|---|
| committer | 2019-09-25 17:46:02 -0400 | |
| commit | da0737359900c6fad1ab8818f883b3da0b79f63e (patch) | |
| tree | 0ac43a4a6ea205dbf8d2fedbf5debec81fd8cfbe | |
| parent | Merge pull request #2869 from ReinUsesLisp/suld (diff) | |
| parent | gl_shader_decompiler: Add tailing return for HUnpack2 (diff) | |
| download | yuzu-da0737359900c6fad1ab8818f883b3da0b79f63e.tar.gz yuzu-da0737359900c6fad1ab8818f883b3da0b79f63e.tar.xz yuzu-da0737359900c6fad1ab8818f883b3da0b79f63e.zip | |
Merge pull request #2864 from ReinUsesLisp/fix-clang-decompiler
gl_shader_decompiler: Fix clang build issues
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index e6b36a0f2..8fa9e6534 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -242,6 +242,26 @@ constexpr const char* GetTypeString(Type type) { | |||
| 242 | } | 242 | } |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | constexpr const char* GetImageTypeDeclaration(Tegra::Shader::ImageType image_type) { | ||
| 246 | switch (image_type) { | ||
| 247 | case Tegra::Shader::ImageType::Texture1D: | ||
| 248 | return "1D"; | ||
| 249 | case Tegra::Shader::ImageType::TextureBuffer: | ||
| 250 | return "Buffer"; | ||
| 251 | case Tegra::Shader::ImageType::Texture1DArray: | ||
| 252 | return "1DArray"; | ||
| 253 | case Tegra::Shader::ImageType::Texture2D: | ||
| 254 | return "2D"; | ||
| 255 | case Tegra::Shader::ImageType::Texture2DArray: | ||
| 256 | return "2DArray"; | ||
| 257 | case Tegra::Shader::ImageType::Texture3D: | ||
| 258 | return "3D"; | ||
| 259 | default: | ||
| 260 | UNREACHABLE(); | ||
| 261 | return "1D"; | ||
| 262 | } | ||
| 263 | } | ||
| 264 | |||
| 245 | /// Generates code to use for a swizzle operation. | 265 | /// Generates code to use for a swizzle operation. |
| 246 | constexpr const char* GetSwizzle(u32 element) { | 266 | constexpr const char* GetSwizzle(u32 element) { |
| 247 | constexpr std::array swizzle = {".x", ".y", ".z", ".w"}; | 267 | constexpr std::array swizzle = {".x", ".y", ".z", ".w"}; |
| @@ -721,26 +741,6 @@ private: | |||
| 721 | void DeclareImages() { | 741 | void DeclareImages() { |
| 722 | const auto& images{ir.GetImages()}; | 742 | const auto& images{ir.GetImages()}; |
| 723 | for (const auto& [offset, image] : images) { | 743 | for (const auto& [offset, image] : images) { |
| 724 | const char* image_type = [&] { | ||
| 725 | switch (image.GetType()) { | ||
| 726 | case Tegra::Shader::ImageType::Texture1D: | ||
| 727 | return "1D"; | ||
| 728 | case Tegra::Shader::ImageType::TextureBuffer: | ||
| 729 | return "Buffer"; | ||
| 730 | case Tegra::Shader::ImageType::Texture1DArray: | ||
| 731 | return "1DArray"; | ||
| 732 | case Tegra::Shader::ImageType::Texture2D: | ||
| 733 | return "2D"; | ||
| 734 | case Tegra::Shader::ImageType::Texture2DArray: | ||
| 735 | return "2DArray"; | ||
| 736 | case Tegra::Shader::ImageType::Texture3D: | ||
| 737 | return "3D"; | ||
| 738 | default: | ||
| 739 | UNREACHABLE(); | ||
| 740 | return "1D"; | ||
| 741 | } | ||
| 742 | }(); | ||
| 743 | |||
| 744 | std::string qualifier = "coherent volatile"; | 744 | std::string qualifier = "coherent volatile"; |
| 745 | if (image.IsRead() && !image.IsWritten()) { | 745 | if (image.IsRead() && !image.IsWritten()) { |
| 746 | qualifier += " readonly"; | 746 | qualifier += " readonly"; |
| @@ -748,13 +748,10 @@ private: | |||
| 748 | qualifier += " writeonly"; | 748 | qualifier += " writeonly"; |
| 749 | } | 749 | } |
| 750 | 750 | ||
| 751 | std::string format; | 751 | const char* format = image.IsAtomic() ? "r32ui, " : ""; |
| 752 | if (image.IsAtomic()) { | 752 | const char* type_declaration = GetImageTypeDeclaration(image.GetType()); |
| 753 | format = "r32ui, "; | ||
| 754 | } | ||
| 755 | |||
| 756 | code.AddLine("layout ({}binding = IMAGE_BINDING_{}) {} uniform uimage{} {};", format, | 753 | code.AddLine("layout ({}binding = IMAGE_BINDING_{}) {} uniform uimage{} {};", format, |
| 757 | image.GetIndex(), qualifier, image_type, GetImage(image)); | 754 | image.GetIndex(), qualifier, type_declaration, GetImage(image)); |
| 758 | } | 755 | } |
| 759 | if (!images.empty()) { | 756 | if (!images.empty()) { |
| 760 | code.AddNewLine(); | 757 | code.AddNewLine(); |
| @@ -1494,6 +1491,8 @@ private: | |||
| 1494 | case Tegra::Shader::HalfType::H1_H1: | 1491 | case Tegra::Shader::HalfType::H1_H1: |
| 1495 | return {fmt::format("vec2({}[1])", operand.AsHalfFloat()), Type::HalfFloat}; | 1492 | return {fmt::format("vec2({}[1])", operand.AsHalfFloat()), Type::HalfFloat}; |
| 1496 | } | 1493 | } |
| 1494 | UNREACHABLE(); | ||
| 1495 | return {"0", Type::Int}; | ||
| 1497 | } | 1496 | } |
| 1498 | 1497 | ||
| 1499 | Expression HMergeF32(Operation operation) { | 1498 | Expression HMergeF32(Operation operation) { |