summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-01-04 01:54:54 -0300
committerGravatar ReinUsesLisp2021-01-04 01:54:54 -0300
commit3a49c1a691c7e97b2eea0dffd4c1e05b3296f58c (patch)
tree5eacf88dbc1d857ade8ef77ced052f6e903b4445 /src
parentMerge pull request #5230 from ReinUsesLisp/vulkan-common (diff)
downloadyuzu-3a49c1a691c7e97b2eea0dffd4c1e05b3296f58c.tar.gz
yuzu-3a49c1a691c7e97b2eea0dffd4c1e05b3296f58c.tar.xz
yuzu-3a49c1a691c7e97b2eea0dffd4c1e05b3296f58c.zip
gl_texture_cache: Create base images with sRGB
This breaks accelerated decoders trying to imageStore into images with sRGB. The decoders are currently disabled so this won't cause issues at runtime.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp193
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.h6
2 files changed, 100 insertions, 99 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 4c690418c..710874311 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -61,100 +61,99 @@ struct FormatTuple {
61 GLenum internal_format; 61 GLenum internal_format;
62 GLenum format = GL_NONE; 62 GLenum format = GL_NONE;
63 GLenum type = GL_NONE; 63 GLenum type = GL_NONE;
64 GLenum store_format = internal_format;
65}; 64};
66 65
67constexpr std::array<FormatTuple, MaxPixelFormat> FORMAT_TABLE = {{ 66constexpr std::array<FormatTuple, MaxPixelFormat> FORMAT_TABLE = {{
68 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_UNORM 67 {GL_RGBA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_UNORM
69 {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // A8B8G8R8_SNORM 68 {GL_RGBA8_SNORM, GL_RGBA, GL_BYTE}, // A8B8G8R8_SNORM
70 {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // A8B8G8R8_SINT 69 {GL_RGBA8I, GL_RGBA_INTEGER, GL_BYTE}, // A8B8G8R8_SINT
71 {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // A8B8G8R8_UINT 70 {GL_RGBA8UI, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE}, // A8B8G8R8_UINT
72 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // R5G6B5_UNORM 71 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5}, // R5G6B5_UNORM
73 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // B5G6R5_UNORM 72 {GL_RGB565, GL_RGB, GL_UNSIGNED_SHORT_5_6_5_REV}, // B5G6R5_UNORM
74 {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1R5G5B5_UNORM 73 {GL_RGB5_A1, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1R5G5B5_UNORM
75 {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UNORM 74 {GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UNORM
76 {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UINT 75 {GL_RGB10_A2UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT_2_10_10_10_REV}, // A2B10G10R10_UINT
77 {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5_UNORM 76 {GL_RGB5_A1, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV}, // A1B5G5R5_UNORM
78 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8_UNORM 77 {GL_R8, GL_RED, GL_UNSIGNED_BYTE}, // R8_UNORM
79 {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8_SNORM 78 {GL_R8_SNORM, GL_RED, GL_BYTE}, // R8_SNORM
80 {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8_SINT 79 {GL_R8I, GL_RED_INTEGER, GL_BYTE}, // R8_SINT
81 {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8_UINT 80 {GL_R8UI, GL_RED_INTEGER, GL_UNSIGNED_BYTE}, // R8_UINT
82 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16A16_FLOAT 81 {GL_RGBA16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16A16_FLOAT
83 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // R16G16B16A16_UNORM 82 {GL_RGBA16, GL_RGBA, GL_UNSIGNED_SHORT}, // R16G16B16A16_UNORM
84 {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // R16G16B16A16_SNORM 83 {GL_RGBA16_SNORM, GL_RGBA, GL_SHORT}, // R16G16B16A16_SNORM
85 {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // R16G16B16A16_SINT 84 {GL_RGBA16I, GL_RGBA_INTEGER, GL_SHORT}, // R16G16B16A16_SINT
86 {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // R16G16B16A16_UINT 85 {GL_RGBA16UI, GL_RGBA_INTEGER, GL_UNSIGNED_SHORT}, // R16G16B16A16_UINT
87 {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // B10G11R11_FLOAT 86 {GL_R11F_G11F_B10F, GL_RGB, GL_UNSIGNED_INT_10F_11F_11F_REV}, // B10G11R11_FLOAT
88 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // R32G32B32A32_UINT 87 {GL_RGBA32UI, GL_RGBA_INTEGER, GL_UNSIGNED_INT}, // R32G32B32A32_UINT
89 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // BC1_RGBA_UNORM 88 {GL_COMPRESSED_RGBA_S3TC_DXT1_EXT}, // BC1_RGBA_UNORM
90 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // BC2_UNORM 89 {GL_COMPRESSED_RGBA_S3TC_DXT3_EXT}, // BC2_UNORM
91 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // BC3_UNORM 90 {GL_COMPRESSED_RGBA_S3TC_DXT5_EXT}, // BC3_UNORM
92 {GL_COMPRESSED_RED_RGTC1}, // BC4_UNORM 91 {GL_COMPRESSED_RED_RGTC1}, // BC4_UNORM
93 {GL_COMPRESSED_SIGNED_RED_RGTC1}, // BC4_SNORM 92 {GL_COMPRESSED_SIGNED_RED_RGTC1}, // BC4_SNORM
94 {GL_COMPRESSED_RG_RGTC2}, // BC5_UNORM 93 {GL_COMPRESSED_RG_RGTC2}, // BC5_UNORM
95 {GL_COMPRESSED_SIGNED_RG_RGTC2}, // BC5_SNORM 94 {GL_COMPRESSED_SIGNED_RG_RGTC2}, // BC5_SNORM
96 {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7_UNORM 95 {GL_COMPRESSED_RGBA_BPTC_UNORM}, // BC7_UNORM
97 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UFLOAT 96 {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT}, // BC6H_UFLOAT
98 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SFLOAT 97 {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT}, // BC6H_SFLOAT
99 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4_UNORM 98 {GL_COMPRESSED_RGBA_ASTC_4x4_KHR}, // ASTC_2D_4X4_UNORM
100 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM 99 {GL_RGBA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM
101 {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // R32G32B32A32_FLOAT 100 {GL_RGBA32F, GL_RGBA, GL_FLOAT}, // R32G32B32A32_FLOAT
102 {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // R32G32B32A32_SINT 101 {GL_RGBA32I, GL_RGBA_INTEGER, GL_INT}, // R32G32B32A32_SINT
103 {GL_RG32F, GL_RG, GL_FLOAT}, // R32G32_FLOAT 102 {GL_RG32F, GL_RG, GL_FLOAT}, // R32G32_FLOAT
104 {GL_RG32I, GL_RG_INTEGER, GL_INT}, // R32G32_SINT 103 {GL_RG32I, GL_RG_INTEGER, GL_INT}, // R32G32_SINT
105 {GL_R32F, GL_RED, GL_FLOAT}, // R32_FLOAT 104 {GL_R32F, GL_RED, GL_FLOAT}, // R32_FLOAT
106 {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16_FLOAT 105 {GL_R16F, GL_RED, GL_HALF_FLOAT}, // R16_FLOAT
107 {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16_UNORM 106 {GL_R16, GL_RED, GL_UNSIGNED_SHORT}, // R16_UNORM
108 {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16_SNORM 107 {GL_R16_SNORM, GL_RED, GL_SHORT}, // R16_SNORM
109 {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16_UINT 108 {GL_R16UI, GL_RED_INTEGER, GL_UNSIGNED_SHORT}, // R16_UINT
110 {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16_SINT 109 {GL_R16I, GL_RED_INTEGER, GL_SHORT}, // R16_SINT
111 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // R16G16_UNORM 110 {GL_RG16, GL_RG, GL_UNSIGNED_SHORT}, // R16G16_UNORM
112 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // R16G16_FLOAT 111 {GL_RG16F, GL_RG, GL_HALF_FLOAT}, // R16G16_FLOAT
113 {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // R16G16_UINT 112 {GL_RG16UI, GL_RG_INTEGER, GL_UNSIGNED_SHORT}, // R16G16_UINT
114 {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // R16G16_SINT 113 {GL_RG16I, GL_RG_INTEGER, GL_SHORT}, // R16G16_SINT
115 {GL_RG16_SNORM, GL_RG, GL_SHORT}, // R16G16_SNORM 114 {GL_RG16_SNORM, GL_RG, GL_SHORT}, // R16G16_SNORM
116 {GL_RGB32F, GL_RGB, GL_FLOAT}, // R32G32B32_FLOAT 115 {GL_RGB32F, GL_RGB, GL_FLOAT}, // R32G32B32_FLOAT
117 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, GL_RGBA8}, // A8B8G8R8_SRGB 116 {GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV}, // A8B8G8R8_SRGB
118 {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // R8G8_UNORM 117 {GL_RG8, GL_RG, GL_UNSIGNED_BYTE}, // R8G8_UNORM
119 {GL_RG8_SNORM, GL_RG, GL_BYTE}, // R8G8_SNORM 118 {GL_RG8_SNORM, GL_RG, GL_BYTE}, // R8G8_SNORM
120 {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // R8G8_SINT 119 {GL_RG8I, GL_RG_INTEGER, GL_BYTE}, // R8G8_SINT
121 {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // R8G8_UINT 120 {GL_RG8UI, GL_RG_INTEGER, GL_UNSIGNED_BYTE}, // R8G8_UINT
122 {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // R32G32_UINT 121 {GL_RG32UI, GL_RG_INTEGER, GL_UNSIGNED_INT}, // R32G32_UINT
123 {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16X16_FLOAT 122 {GL_RGB16F, GL_RGBA, GL_HALF_FLOAT}, // R16G16B16X16_FLOAT
124 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32_UINT 123 {GL_R32UI, GL_RED_INTEGER, GL_UNSIGNED_INT}, // R32_UINT
125 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32_SINT 124 {GL_R32I, GL_RED_INTEGER, GL_INT}, // R32_SINT
126 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8_UNORM 125 {GL_COMPRESSED_RGBA_ASTC_8x8_KHR}, // ASTC_2D_8X8_UNORM
127 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5_UNORM 126 {GL_COMPRESSED_RGBA_ASTC_8x5_KHR}, // ASTC_2D_8X5_UNORM
128 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4_UNORM 127 {GL_COMPRESSED_RGBA_ASTC_5x4_KHR}, // ASTC_2D_5X4_UNORM
129 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE, GL_RGBA8}, // B8G8R8A8_UNORM 128 {GL_SRGB8_ALPHA8, GL_BGRA, GL_UNSIGNED_BYTE}, // B8G8R8A8_UNORM
130 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // BC1_RGBA_SRGB 129 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT}, // BC1_RGBA_SRGB
131 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // BC2_SRGB 130 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT}, // BC2_SRGB
132 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // BC3_SRGB 131 {GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}, // BC3_SRGB
133 {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7_SRGB 132 {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM}, // BC7_SRGB
134 {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // A4B4G4R4_UNORM 133 {GL_RGBA4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4_REV}, // A4B4G4R4_UNORM
135 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB 134 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR}, // ASTC_2D_4X4_SRGB
136 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR}, // ASTC_2D_8X8_SRGB 135 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR}, // ASTC_2D_8X8_SRGB
137 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_SRGB 136 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR}, // ASTC_2D_8X5_SRGB
138 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR}, // ASTC_2D_5X4_SRGB 137 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR}, // ASTC_2D_5X4_SRGB
139 {GL_COMPRESSED_RGBA_ASTC_5x5_KHR}, // ASTC_2D_5X5_UNORM 138 {GL_COMPRESSED_RGBA_ASTC_5x5_KHR}, // ASTC_2D_5X5_UNORM
140 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR}, // ASTC_2D_5X5_SRGB 139 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR}, // ASTC_2D_5X5_SRGB
141 {GL_COMPRESSED_RGBA_ASTC_10x8_KHR}, // ASTC_2D_10X8_UNORM 140 {GL_COMPRESSED_RGBA_ASTC_10x8_KHR}, // ASTC_2D_10X8_UNORM
142 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR}, // ASTC_2D_10X8_SRGB 141 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR}, // ASTC_2D_10X8_SRGB
143 {GL_COMPRESSED_RGBA_ASTC_6x6_KHR}, // ASTC_2D_6X6_UNORM 142 {GL_COMPRESSED_RGBA_ASTC_6x6_KHR}, // ASTC_2D_6X6_UNORM
144 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR}, // ASTC_2D_6X6_SRGB 143 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR}, // ASTC_2D_6X6_SRGB
145 {GL_COMPRESSED_RGBA_ASTC_10x10_KHR}, // ASTC_2D_10X10_UNORM 144 {GL_COMPRESSED_RGBA_ASTC_10x10_KHR}, // ASTC_2D_10X10_UNORM
146 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR}, // ASTC_2D_10X10_SRGB 145 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR}, // ASTC_2D_10X10_SRGB
147 {GL_COMPRESSED_RGBA_ASTC_12x12_KHR}, // ASTC_2D_12X12_UNORM 146 {GL_COMPRESSED_RGBA_ASTC_12x12_KHR}, // ASTC_2D_12X12_UNORM
148 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}, // ASTC_2D_12X12_SRGB 147 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR}, // ASTC_2D_12X12_SRGB
149 {GL_COMPRESSED_RGBA_ASTC_8x6_KHR}, // ASTC_2D_8X6_UNORM 148 {GL_COMPRESSED_RGBA_ASTC_8x6_KHR}, // ASTC_2D_8X6_UNORM
150 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR}, // ASTC_2D_8X6_SRGB 149 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR}, // ASTC_2D_8X6_SRGB
151 {GL_COMPRESSED_RGBA_ASTC_6x5_KHR}, // ASTC_2D_6X5_UNORM 150 {GL_COMPRESSED_RGBA_ASTC_6x5_KHR}, // ASTC_2D_6X5_UNORM
152 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR}, // ASTC_2D_6X5_SRGB 151 {GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR}, // ASTC_2D_6X5_SRGB
153 {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV}, // E5B9G9R9_FLOAT 152 {GL_RGB9_E5, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV}, // E5B9G9R9_FLOAT
154 {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32_FLOAT 153 {GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT}, // D32_FLOAT
155 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // D16_UNORM 154 {GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT}, // D16_UNORM
156 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // D24_UNORM_S8_UINT 155 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // D24_UNORM_S8_UINT
157 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // S8_UINT_D24_UNORM 156 {GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8}, // S8_UINT_D24_UNORM
158 {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL, 157 {GL_DEPTH32F_STENCIL8, GL_DEPTH_STENCIL,
159 GL_FLOAT_32_UNSIGNED_INT_24_8_REV}, // D32_FLOAT_S8_UINT 158 GL_FLOAT_32_UNSIGNED_INT_24_8_REV}, // D32_FLOAT_S8_UINT
160}}; 159}};
@@ -651,13 +650,11 @@ Image::Image(TextureCacheRuntime& runtime, const VideoCommon::ImageInfo& info_,
651 if (IsConverted(runtime.device, info.format, info.type)) { 650 if (IsConverted(runtime.device, info.format, info.type)) {
652 flags |= ImageFlagBits::Converted; 651 flags |= ImageFlagBits::Converted;
653 gl_internal_format = IsPixelFormatSRGB(info.format) ? GL_SRGB8_ALPHA8 : GL_RGBA8; 652 gl_internal_format = IsPixelFormatSRGB(info.format) ? GL_SRGB8_ALPHA8 : GL_RGBA8;
654 gl_store_format = GL_RGBA8;
655 gl_format = GL_RGBA; 653 gl_format = GL_RGBA;
656 gl_type = GL_UNSIGNED_INT_8_8_8_8_REV; 654 gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
657 } else { 655 } else {
658 const auto& tuple = GetFormatTuple(info.format); 656 const auto& tuple = GetFormatTuple(info.format);
659 gl_internal_format = tuple.internal_format; 657 gl_internal_format = tuple.internal_format;
660 gl_store_format = tuple.store_format;
661 gl_format = tuple.format; 658 gl_format = tuple.format;
662 gl_type = tuple.type; 659 gl_type = tuple.type;
663 } 660 }
@@ -677,23 +674,23 @@ Image::Image(TextureCacheRuntime& runtime, const VideoCommon::ImageInfo& info_,
677 } 674 }
678 switch (target) { 675 switch (target) {
679 case GL_TEXTURE_1D_ARRAY: 676 case GL_TEXTURE_1D_ARRAY:
680 glTextureStorage2D(handle, num_levels, gl_store_format, width, num_layers); 677 glTextureStorage2D(handle, num_levels, gl_internal_format, width, num_layers);
681 break; 678 break;
682 case GL_TEXTURE_2D_ARRAY: 679 case GL_TEXTURE_2D_ARRAY:
683 glTextureStorage3D(handle, num_levels, gl_store_format, width, height, num_layers); 680 glTextureStorage3D(handle, num_levels, gl_internal_format, width, height, num_layers);
684 break; 681 break;
685 case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: { 682 case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: {
686 // TODO: Where should 'fixedsamplelocations' come from? 683 // TODO: Where should 'fixedsamplelocations' come from?
687 const auto [samples_x, samples_y] = SamplesLog2(info.num_samples); 684 const auto [samples_x, samples_y] = SamplesLog2(info.num_samples);
688 glTextureStorage3DMultisample(handle, num_samples, gl_store_format, width >> samples_x, 685 glTextureStorage3DMultisample(handle, num_samples, gl_internal_format, width >> samples_x,
689 height >> samples_y, num_layers, GL_FALSE); 686 height >> samples_y, num_layers, GL_FALSE);
690 break; 687 break;
691 } 688 }
692 case GL_TEXTURE_RECTANGLE: 689 case GL_TEXTURE_RECTANGLE:
693 glTextureStorage2D(handle, num_levels, gl_store_format, width, height); 690 glTextureStorage2D(handle, num_levels, gl_internal_format, width, height);
694 break; 691 break;
695 case GL_TEXTURE_3D: 692 case GL_TEXTURE_3D:
696 glTextureStorage3D(handle, num_levels, gl_store_format, width, height, depth); 693 glTextureStorage3D(handle, num_levels, gl_internal_format, width, height, depth);
697 break; 694 break;
698 case GL_TEXTURE_BUFFER: 695 case GL_TEXTURE_BUFFER:
699 buffer.Create(); 696 buffer.Create();
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.h b/src/video_core/renderer_opengl/gl_texture_cache.h
index 04193e31e..15b7c3676 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.h
+++ b/src/video_core/renderer_opengl/gl_texture_cache.h
@@ -96,6 +96,10 @@ public:
96 96
97 FormatProperties FormatInfo(VideoCommon::ImageType type, GLenum internal_format) const; 97 FormatProperties FormatInfo(VideoCommon::ImageType type, GLenum internal_format) const;
98 98
99 bool HasBrokenTextureViewFormats() const noexcept {
100 return has_broken_texture_view_formats;
101 }
102
99private: 103private:
100 struct StagingBuffers { 104 struct StagingBuffers {
101 explicit StagingBuffers(GLenum storage_flags_, GLenum map_flags_); 105 explicit StagingBuffers(GLenum storage_flags_, GLenum map_flags_);
@@ -120,6 +124,7 @@ private:
120 UtilShaders util_shaders; 124 UtilShaders util_shaders;
121 125
122 std::array<std::unordered_map<GLenum, FormatProperties>, 3> format_properties; 126 std::array<std::unordered_map<GLenum, FormatProperties>, 3> format_properties;
127 bool has_broken_texture_view_formats = false;
123 128
124 StagingBuffers upload_buffers{GL_MAP_WRITE_BIT, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT}; 129 StagingBuffers upload_buffers{GL_MAP_WRITE_BIT, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT};
125 StagingBuffers download_buffers{GL_MAP_READ_BIT, GL_MAP_READ_BIT}; 130 StagingBuffers download_buffers{GL_MAP_READ_BIT, GL_MAP_READ_BIT};
@@ -165,7 +170,6 @@ private:
165 OGLTextureView store_view; 170 OGLTextureView store_view;
166 OGLBuffer buffer; 171 OGLBuffer buffer;
167 GLenum gl_internal_format = GL_NONE; 172 GLenum gl_internal_format = GL_NONE;
168 GLenum gl_store_format = GL_NONE;
169 GLenum gl_format = GL_NONE; 173 GLenum gl_format = GL_NONE;
170 GLenum gl_type = GL_NONE; 174 GLenum gl_type = GL_NONE;
171}; 175};