gl-renderer: Add EXT_texture_norm16 support to utilities

EXT_texture_norm16 allows OpenGL ES 3 implementations to support
GL_R16_EXT, GL_R16_SNORM_EXT, GL_RG16_EXT, GL_RG16_SNORM_EXT,
GL_RGB16_EXT, GL_RGB16_SNORM_EXT, GL_RGBA16_EXT and
GL_RGBA16_SNORM_EXT 16-bit fixed-point texture and FBO formats.

Signed-off-by: Loïc Molinari <loic.molinari@collabora.com>
This commit is contained in:
Loïc Molinari 2024-09-20 09:38:58 +02:00 committed by Daniel Stone
parent 46603446d7
commit db25130e15

View file

@ -40,6 +40,8 @@
* GL_R8 3.0 3.0 3.0 GL_RED GL_UNSIGNED_BYTE
* GL_SR8_EXT E E GL_RED GL_UNSIGNED_BYTE
* GL_R8_SNORM 3.0 3.0 GL_RED GL_BYTE
* GL_R16_EXT E E E GL_RED GL_UNSIGNED_SHORT
* GL_R16_SNORM_EXT E E GL_RED GL_SHORT
* GL_R16F 3.0 3.0 3.2 GL_RED GL_HALF_FLOAT,
* GL_FLOAT
* GL_R32F 3.0 3.2 GL_RED GL_FLOAT
@ -52,6 +54,8 @@
* GL_RG8 3.0 3.0 3.0 GL_RG GL_UNSIGNED_BYTE
* GL_SRG8_EXT E E GL_RG GL_UNSIGNED_BYTE
* GL_RG8_SNORM 3.0 3.0 GL_RG GL_BYTE
* GL_RG16_EXT E E E GL_RG GL_UNSIGNED_SHORT
* GL_RG16_SNORM_EXT E E GL_RG GL_SHORT
* GL_RG16F 3.0 3.0 3.2 GL_RG GL_HALF_FLOAT,
* GL_FLOAT
* GL_RG32F 3.0 3.2 GL_RG GL_FLOAT
@ -66,6 +70,8 @@
* GL_RGB565 3.0 3.0 3.0 GL_RGB GL_UNSIGNED_BYTE,
* GL_UNSIGNED_SHORT_5_6_5
* GL_RGB8_SNORM 3.0 3.0 GL_RGB GL_BYTE
* GL_RGB16_EXT E E GL_RGB GL_UNSIGNED_SHORT
* GL_RGB16_SNORM_EXT E E GL_RGB GL_SHORT
* GL_R11F_G11F_B10F 3.0 3.0 3.2 GL_RGB GL_UNSIGNED_INT_10F_11F_11F_REV,
* GL_HALF_FLOAT,
* GL_FLOAT
@ -90,6 +96,8 @@
* GL_RGBA4 3.0 3.0 3.0 GL_RGBA GL_UNSIGNED_BYTE,
* GL_UNSIGNED_SHORT_4_4_4_4
* GL_RGB10_A2 3.0 3.0 3.0 GL_RGBA GL_UNSIGNED_INT_2_10_10_10_REV
* GL_RGBA16_EXT E E E GL_RGBA GL_UNSIGNED_SHORT
* GL_RGBA16_SNORM_EXT E E GL_RGBA GL_SHORT
* GL_RGBA16F 3.0 3.0 3.2 GL_RGBA GL_HALF_FLOAT,
* GL_FLOAT
* GL_RGBA32F 3.0 3.2 GL_RGBA GL_FLOAT
@ -141,6 +149,11 @@ is_valid_format_es3(struct gl_renderer *gr,
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_SRGB_R8) &&
external_format == GL_RED;
case GL_R16_EXT:
case GL_R16_SNORM_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16) &&
external_format == GL_RED;
case GL_RG8I:
case GL_RG8UI:
case GL_RG16I:
@ -159,6 +172,11 @@ is_valid_format_es3(struct gl_renderer *gr,
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_SRGB_RG8) &&
external_format == GL_RG;
case GL_RG16_EXT:
case GL_RG16_SNORM_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16) &&
external_format == GL_RG;
case GL_RGB8I:
case GL_RGB8UI:
case GL_RGB16I:
@ -177,6 +195,11 @@ is_valid_format_es3(struct gl_renderer *gr,
case GL_SRGB8:
return external_format == GL_RGB;
case GL_RGB16_EXT:
case GL_RGB16_SNORM_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16) &&
external_format == GL_RGB;
case GL_RGBA8I:
case GL_RGBA8UI:
case GL_RGBA16I:
@ -196,6 +219,11 @@ is_valid_format_es3(struct gl_renderer *gr,
case GL_RGBA4:
return external_format == GL_RGBA;
case GL_RGBA16_EXT:
case GL_RGBA16_SNORM_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16) &&
external_format == GL_RGBA;
default:
return false;
}
@ -254,6 +282,20 @@ is_valid_type_es3(struct gl_renderer *gr,
case GL_RGBA16I:
return type == GL_SHORT;
case GL_R16_EXT:
case GL_RG16_EXT:
case GL_RGB16_EXT:
case GL_RGBA16_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16) &&
type == GL_UNSIGNED_SHORT;
case GL_R16_SNORM_EXT:
case GL_RG16_SNORM_EXT:
case GL_RGB16_SNORM_EXT:
case GL_RGBA16_SNORM_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16) &&
type == GL_SHORT;
case GL_R32UI:
case GL_RG32UI:
case GL_RGB32UI:
@ -332,6 +374,10 @@ is_valid_combination_es3(struct gl_renderer *gr,
case GL_FLOAT:
return true;
case GL_UNSIGNED_SHORT:
case GL_SHORT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16);
default:
return false;
}
@ -363,6 +409,10 @@ is_valid_combination_es3(struct gl_renderer *gr,
case GL_FLOAT:
return true;
case GL_UNSIGNED_SHORT:
case GL_SHORT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16);
default:
return false;
}
@ -378,6 +428,10 @@ is_valid_combination_es3(struct gl_renderer *gr,
case GL_FLOAT:
return true;
case GL_UNSIGNED_SHORT:
case GL_SHORT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16);
default:
return false;
}
@ -540,6 +594,16 @@ gl_texture_is_format_supported(struct gl_renderer *gr,
return gr->gl_version >= gl_version(3, 0) ||
gl_extensions_has(gr, EXTENSION_APPLE_TEXTURE_PACKED_FLOAT);
case GL_R16_EXT:
case GL_RG16_EXT:
case GL_RGB16_EXT:
case GL_RGBA16_EXT:
case GL_R16_SNORM_EXT:
case GL_RG16_SNORM_EXT:
case GL_RGB16_SNORM_EXT:
case GL_RGBA16_SNORM_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16);
case GL_R8I:
case GL_R8UI:
case GL_R8_SNORM:
@ -935,12 +999,21 @@ gl_fbo_is_format_supported(struct gl_renderer *gr,
(gl_extensions_has(gr, EXTENSION_NV_PACKED_FLOAT) &&
gl_extensions_has(gr, EXTENSION_EXT_COLOR_BUFFER_HALF_FLOAT));
case GL_R16_EXT:
case GL_RG16_EXT:
case GL_RGBA16_EXT:
return gl_extensions_has(gr, EXTENSION_EXT_TEXTURE_NORM16);
case GL_R8_SNORM:
case GL_R16_SNORM_EXT:
case GL_RG8_SNORM:
case GL_RG16_SNORM_EXT:
case GL_SRGB8:
case GL_RGB9_E5:
case GL_RGB32F:
case GL_RGB8_SNORM:
case GL_RGB16_EXT:
case GL_RGB16_SNORM_EXT:
case GL_RGB8I:
case GL_RGB8UI:
case GL_RGB16I:
@ -948,6 +1021,7 @@ gl_fbo_is_format_supported(struct gl_renderer *gr,
case GL_RGB32I:
case GL_RGB32UI:
case GL_RGBA8_SNORM:
case GL_RGBA16_SNORM_EXT:
return false;
default: