summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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};