[Fix] (MG_Backend/DirectGLES): fix Complementary shaders on Mali

- emulate RGBA8 SNORM fallback writes
This commit is contained in:
2026-06-26 23:33:46 +08:00
parent f6114c9e15
commit 195330ccea
8 changed files with 134 additions and 7 deletions
@@ -35,6 +35,9 @@ namespace MobileGL::MG_Util::TextureFormatProcessor {
applicableOptions |= options & PixelFormatNormalizeOptionBit::NoSnorm16;
break;
case GL_RGBA8_SNORM:
applicableOptions |= options & PixelFormatNormalizeOptionBit::NoSnorm8;
applicableOptions |= options & PixelFormatNormalizeOptionBit::NoRGBA8Snorm;
break;
case GL_RGB8_SNORM:
case GL_RG8_SNORM:
case GL_R8_SNORM:
@@ -123,7 +126,8 @@ namespace MobileGL::MG_Util::TextureFormatProcessor {
*outInternalFormat = internalFormat;
break;
case GL_RGBA8_SNORM:
if (options & PixelFormatNormalizeOptionBit::NoSnorm8) {
if ((options & PixelFormatNormalizeOptionBit::NoSnorm8) ||
(options & PixelFormatNormalizeOptionBit::NoRGBA8Snorm)) {
*outInternalFormat = GL_RGBA16F;
break;
}
@@ -360,7 +364,6 @@ namespace MobileGL::MG_Util::TextureFormatProcessor {
*outType = GL_SHORT;
break;
}
case GL_RGBA8_SNORM:
case GL_RGB8_SNORM:
case GL_RG8_SNORM:
case GL_R8_SNORM:
@@ -370,6 +373,14 @@ namespace MobileGL::MG_Util::TextureFormatProcessor {
}
*outType = GL_BYTE;
break;
case GL_RGBA8_SNORM:
if ((options & PixelFormatNormalizeOptionBit::NoSnorm8) ||
(options & PixelFormatNormalizeOptionBit::NoRGBA8Snorm)) {
*outType = GL_FLOAT;
break;
}
*outType = GL_BYTE;
break;
// Color Unsigned Integer
case GL_RGBA32UI:
@@ -16,6 +16,7 @@ namespace MobileGL {
NoRgb16 = 1 << 2,
NoSnorm8 = 1 << 3,
NoDepthComponent32 = 1 << 4,
NoRGBA8Snorm = 1 << 5,
None = 0,
};
namespace MG_Util::TextureFormatProcessor {