summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_texture_cache.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2022-04-13 17:01:57 +0200
committerLiam <byteslice@airmail.cc>2022-04-14 17:06:27 +0200
commitf783883bf89311b51aef76b6b8b07d112369eca7 (patch)
tree840182ad79bb2b6025aa79e01adf8a063f8c7ea6 /src/video_core/renderer_opengl/gl_texture_cache.cpp
parentbuffer_cache: cap vertex buffer sizes (diff)
downloadyuzu-f783883bf89311b51aef76b6b8b07d112369eca7.tar
yuzu-f783883bf89311b51aef76b6b8b07d112369eca7.tar.gz
yuzu-f783883bf89311b51aef76b6b8b07d112369eca7.tar.bz2
yuzu-f783883bf89311b51aef76b6b8b07d112369eca7.tar.lz
yuzu-f783883bf89311b51aef76b6b8b07d112369eca7.tar.xz
yuzu-f783883bf89311b51aef76b6b8b07d112369eca7.tar.zst
yuzu-f783883bf89311b51aef76b6b8b07d112369eca7.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp26
1 files changed, 26 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) {
}
}
+GLint ConvertA5B5G5R1_UNORM(SwizzleSource source) {
+ switch (source) {
+ case SwizzleSource::Zero:
+ return GL_ZERO;
+ case SwizzleSource::R:
+ return GL_ALPHA;
+ case SwizzleSource::G:
+ return GL_BLUE;
+ case SwizzleSource::B:
+ return GL_GREEN;
+ case SwizzleSource::A:
+ return GL_RED;
+ case SwizzleSource::OneInt:
+ case SwizzleSource::OneFloat:
+ return GL_ONE;
+ }
+ UNREACHABLE_MSG("Invalid swizzle source={}", source);
+ return GL_NONE;
+}
+
void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4> swizzle) {
switch (format) {
case PixelFormat::D24_UNORM_S8_UINT:
@@ -192,6 +212,12 @@ void ApplySwizzle(GLuint handle, PixelFormat format, std::array<SwizzleSource, 4
TextureMode(format, swizzle[0] == SwizzleSource::R));
std::ranges::transform(swizzle, swizzle.begin(), ConvertGreenRed);
break;
+ case PixelFormat::A5B5G5R1_UNORM: {
+ std::array<GLint, 4> gl_swizzle;
+ std::ranges::transform(swizzle, gl_swizzle.begin(), ConvertA5B5G5R1_UNORM);
+ glTextureParameteriv(handle, GL_TEXTURE_SWIZZLE_RGBA, gl_swizzle.data());
+ return;
+ }
default:
break;
}