From dd1232755b11ef3034909d3f57f740bc8b94867f Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Wed, 1 Apr 2020 01:44:15 -0300 Subject: [PATCH] gl_texture_cache: Fix software ASTC fallback --- .../renderer_opengl/gl_texture_cache.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index b64027f31..36590a6d0 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -129,8 +129,7 @@ constexpr std::array tex_format const FormatTuple& GetFormatTuple(PixelFormat pixel_format) { ASSERT(static_cast(pixel_format) < tex_format_tuples.size()); - const auto& format{tex_format_tuples[static_cast(pixel_format)]}; - return format; + return tex_format_tuples[static_cast(pixel_format)]; } GLenum GetTextureTarget(const SurfaceTarget& target) { @@ -243,11 +242,17 @@ OGLTexture CreateTexture(const SurfaceParams& params, GLenum target, GLenum inte CachedSurface::CachedSurface(const GPUVAddr gpu_addr, const SurfaceParams& params, bool is_astc_supported) : VideoCommon::SurfaceBase(gpu_addr, params, is_astc_supported) { - const auto& tuple{GetFormatTuple(params.pixel_format)}; - internal_format = tuple.internal_format; - format = tuple.format; - type = tuple.type; - is_compressed = !is_converted && params.IsCompressed(); + if (is_converted) { + internal_format = params.srgb_conversion ? GL_SRGB8_ALPHA8 : GL_RGBA8; + format = GL_RGBA; + type = GL_UNSIGNED_BYTE; + } else { + const auto& tuple{GetFormatTuple(params.pixel_format)}; + internal_format = tuple.internal_format; + format = tuple.format; + type = tuple.type; + is_compressed = params.IsCompressed(); + } target = GetTextureTarget(params.target); texture = CreateTexture(params, target, internal_format, texture_buffer); DecorateSurfaceName();