diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-09-24 06:03:27 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-09-24 06:03:27 +0200 |
commit | 25bfaffdffc96f1e32800eaca0eb97715fa651a6 (patch) | |
tree | d79978ebee91098879d6ee9c221bf81ad5e02773 /src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |
parent | Merge pull request #2869 from ReinUsesLisp/suld (diff) | |
download | yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.tar yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.tar.gz yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.tar.bz2 yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.tar.lz yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.tar.xz yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.tar.zst yuzu-25bfaffdffc96f1e32800eaca0eb97715fa651a6.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 49 |
1 files changed, 23 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..1eda0cb44 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) { } } +constexpr const char* GetImageTypeDeclaration(Tegra::Shader::ImageType image_type) { + switch (image_type) { + case Tegra::Shader::ImageType::Texture1D: + return "1D"; + case Tegra::Shader::ImageType::TextureBuffer: + return "Buffer"; + case Tegra::Shader::ImageType::Texture1DArray: + return "1DArray"; + case Tegra::Shader::ImageType::Texture2D: + return "2D"; + case Tegra::Shader::ImageType::Texture2DArray: + return "2DArray"; + case Tegra::Shader::ImageType::Texture3D: + return "3D"; + default: + UNREACHABLE(); + return "1D"; + } +} + /// Generates code to use for a swizzle operation. constexpr const char* GetSwizzle(u32 element) { constexpr std::array swizzle = {".x", ".y", ".z", ".w"}; @@ -721,26 +741,6 @@ private: void DeclareImages() { const auto& images{ir.GetImages()}; for (const auto& [offset, image] : images) { - const char* image_type = [&] { - switch (image.GetType()) { - case Tegra::Shader::ImageType::Texture1D: - return "1D"; - case Tegra::Shader::ImageType::TextureBuffer: - return "Buffer"; - case Tegra::Shader::ImageType::Texture1DArray: - return "1DArray"; - case Tegra::Shader::ImageType::Texture2D: - return "2D"; - case Tegra::Shader::ImageType::Texture2DArray: - return "2DArray"; - case Tegra::Shader::ImageType::Texture3D: - return "3D"; - default: - UNREACHABLE(); - return "1D"; - } - }(); - std::string qualifier = "coherent volatile"; if (image.IsRead() && !image.IsWritten()) { qualifier += " readonly"; @@ -748,13 +748,10 @@ private: qualifier += " writeonly"; } - std::string format; - if (image.IsAtomic()) { - format = "r32ui, "; - } - + const char* format = image.IsAtomic() ? "r32ui, " : ""; + const char* type_declaration = GetImageTypeDeclaration(image.GetType()); code.AddLine("layout ({}binding = IMAGE_BINDING_{}) {} uniform uimage{} {};", format, - image.GetIndex(), qualifier, image_type, GetImage(image)); + image.GetIndex(), qualifier, type_declaration, GetImage(image)); } if (!images.empty()) { code.AddNewLine(); |