diff options
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 26 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/maxwell_to_gl.h | 2 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index d12076358..f8c6e5c7e 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -182,6 +182,26 @@ GLenum AttachmentType(PixelFormat format) { | |||
| 182 | } | 182 | } |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | GLint ConvertA5B5G5R1_UNORM(SwizzleSource source) { | ||
| 186 | switch (source) { | ||
| 187 | case SwizzleSource::Zero: | ||
| 188 | return GL_ZERO; | ||
| 189 | case SwizzleSource::R: | ||
| 190 | return GL_ALPHA; | ||
| 191 | case SwizzleSource::G: | ||
| 192 | return GL_BLUE; | ||
| 193 | case SwizzleSource::B: | ||
| 194 | return GL_GREEN; | ||
| 195 | case SwizzleSource::A: | ||
| 196 | return GL_RED; | ||
| 197 | case SwizzleSource::OneInt: | ||
| 198 | case SwizzleSource::OneFloat: | ||
| 199 | return GL_ONE; | ||
| 200 | } | ||
| 201 | UNREACHABLE_MSG("Invalid swizzle source={}", source); | ||
| 202 | return GL_NONE; | ||
| 203 | } | ||
| 204 | |||
| 185 | void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4> swizzle) { | 205 | void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4> swizzle) { |
| 186 | switch (format) { | 206 | switch (format) { |
| 187 | case PixelFormat::D24_UNORM_S8_UINT: | 207 | case PixelFormat::D24_UNORM_S8_UINT: |
| @@ -192,6 +212,12 @@ void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4 | |||
| 192 | TextureMode(format, swizzle[0] == SwizzleSource::R)); | 212 | TextureMode(format, swizzle[0] == SwizzleSource::R)); |
| 193 | std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); | 213 | std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed); |
| 194 | break; | 214 | break; |
| 215 | case PixelFormat::A5B5G5R1_UNORM: { | ||
| 216 | std::array<GLint, 4> gl_swizzle; | ||
| 217 | std::ranges::transform(swizzle, gl_swizzle.begin(), ConvertA5B5G5R1_UNORM); | ||
| 218 | glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data()); | ||
| 219 | return; | ||
| 220 | } | ||
| 195 | default: | 221 | default: |
| 196 | break; | 222 | break; |
| 197 | } | 223 | } |
diff --git a/src/video_core/renderer_opengl/maxwell_to_gl.h b/src/video_core/renderer_opengl/maxwell_to_gl.h index db5bf1d30..03adf3d4c 100644 --- a/src/video_core/renderer_opengl/maxwell_to_gl.h +++ b/src/video_core/renderer_opengl/maxwell_to_gl.h | |||
| @@ -30,6 +30,7 @@ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> FORMAT_TAB | |||
| 30 | {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UNORM | 30 | {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UNORM |
| 31 | {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UINT | 31 | {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UINT |
| 32 | {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5_UNORM | 32 | {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5_UNORM |
| 33 | {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1}, // A5B5G5R1_UNORM | ||
| 33 | {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8_UNORM | 34 | {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8_UNORM |
| 34 | {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8_SNORM | 35 | {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8_SNORM |
| 35 | {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8_SINT | 36 | {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8_SINT |
| @@ -87,6 +88,7 @@ constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> FORMAT_TAB | |||
| 87 | {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // BC3_SRGB | 88 | {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // BC3_SRGB |
| 88 | {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7_SRGB | 89 | {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7_SRGB |
| 89 | {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // A4B4G4R4_UNORM | 90 | {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // A4B4G4R4_UNORM |
| 91 | {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R4G4_UNORM | ||
| 90 | {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB | 92 | {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB |
| 91 | {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR}, // ASTC_2D_8X8_SRGB | 93 | {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR}, // ASTC_2D_8X8_SRGB |
| 92 | {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_SRGB | 94 | {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_SRGB |