diff options
| author | 2021-01-04 01:54:54 -0300 | |
|---|---|---|
| committer | 2021-01-04 01:54:54 -0300 | |
| commit | 3a49c1a691c7e97b2eea0dffd4c1e05b3296f58c (patch) | |
| tree | 5eacf88dbc1d857ade8ef77ced052f6e903b4445 | |
| parent | Merge pull request #5230 from ReinUsesLisp/vulkan-common (diff) | |
| download | yuzu-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.
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 193 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.h | 6 |
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 | ||
| 67 | constexpr std::array<FormatTuple, MaxPixelFormat> FORMAT_TABLE = {{ | 66 | constexpr 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 | |||
| 99 | private: | 103 | private: |
| 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 | }; |