mesa/core: Add definitions and translations for EXT_texture_sRGB_R8
v2: - fix format definition line
- disable for desktop GL
- don't add GL_R8_EXT to glext.h since it is already in
GLES2/gl2ext.h in glext.h and include this header where needed
(all Emil)
v3: - swrast: Fill the function table for sRGB_R8
The size of the function table is checked at compile time and must
correspond to the number of mesa texture formats.
dri/swrast being gles-2.0 doesn't support the extension though
v4: - correct format layout comment (Ilia Mirkin)
- correct logic for accepting GL_RED only textures (in part Ilia Mirkin)
EXT_texture_sRGB_R8 requires OpenGL ES 3.0 which includes
ARB_texture_rg/EXT_texture_rg, so one only must check for the first
when SR8_EXT is really requested.
v5: - add define for GL_ES8_XT to glheader.h and don't include GLES
headers (Ilia Mirkin)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
@@ -296,6 +296,7 @@ EXT(EXT_texture_object , dummy_true
|
||||
EXT(EXT_texture_rectangle , NV_texture_rectangle , GLL, x , x , x , 2004)
|
||||
EXT(EXT_texture_rg , ARB_texture_rg , x , x , x , ES2, 2011)
|
||||
EXT(EXT_texture_sRGB , EXT_texture_sRGB , GLL, GLC, x , x , 2004)
|
||||
EXT(EXT_texture_sRGB_R8 , EXT_texture_sRGB_R8 , x , x , x , 30, 2015)
|
||||
EXT(EXT_texture_sRGB_decode , EXT_texture_sRGB_decode , GLL, GLC, x , 30, 2006)
|
||||
EXT(EXT_texture_shared_exponent , EXT_texture_shared_exponent , GLL, GLC, x , x , 2004)
|
||||
EXT(EXT_texture_snorm , EXT_texture_snorm , GLL, GLC, x , x , 2009)
|
||||
|
||||
@@ -1108,6 +1108,7 @@ _mesa_uncompressed_format_to_type_and_comps(mesa_format format,
|
||||
*comps = 4;
|
||||
return;
|
||||
case MESA_FORMAT_L_SRGB8:
|
||||
case MESA_FORMAT_R_SRGB8:
|
||||
*datatype = GL_UNSIGNED_BYTE;
|
||||
*comps = 1;
|
||||
return;
|
||||
@@ -1670,6 +1671,7 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
|
||||
(type == GL_UNSIGNED_SHORT_8_8_REV_MESA && littleEndian != swapBytes));
|
||||
|
||||
case MESA_FORMAT_R_UNORM8:
|
||||
case MESA_FORMAT_R_SRGB8:
|
||||
return format == GL_RED && type == GL_UNSIGNED_BYTE;
|
||||
case MESA_FORMAT_R8G8_UNORM:
|
||||
return format == GL_RG && type == GL_UNSIGNED_BYTE && littleEndian;
|
||||
|
||||
@@ -158,6 +158,7 @@ MESA_FORMAT_L8A8_SRGB , packed, 1, 1, 1, un8 , un8 , ,
|
||||
MESA_FORMAT_A8L8_SRGB , packed, 1, 1, 1, un8 , un8 , , , yyyx, srgb
|
||||
|
||||
# Array sRGB formats
|
||||
MESA_FORMAT_R_SRGB8 , array , 1, 1, 1, un8 , , , , x001, srgb
|
||||
MESA_FORMAT_L_SRGB8 , array , 1, 1, 1, un8 , , , , xxx1, srgb
|
||||
MESA_FORMAT_BGR_SRGB8 , array , 1, 1, 1, un8 , un8 , un8 , , zyx1, srgb
|
||||
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 9 and column 3.
|
@@ -440,6 +440,7 @@ typedef enum
|
||||
MESA_FORMAT_X8B8G8R8_SRGB, /* RRRR RRRR GGGG GGGG BBBB BBBB xxxx xxxx */
|
||||
MESA_FORMAT_L8A8_SRGB, /* AAAA AAAA LLLL LLLL */
|
||||
MESA_FORMAT_A8L8_SRGB, /* LLLL LLLL AAAA AAAA */
|
||||
MESA_FORMAT_R_SRGB8, /* RRRR RRRR */
|
||||
|
||||
/* Array sRGB formats */
|
||||
MESA_FORMAT_L_SRGB8, /* ubyte[i] = L */
|
||||
|
||||
@@ -2486,6 +2486,15 @@ _mesa_base_tex_format(const struct gl_context *ctx, GLint internalFormat)
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->Extensions.EXT_texture_sRGB_R8) {
|
||||
switch (internalFormat) {
|
||||
case GL_SR8_EXT:
|
||||
return GL_RED;
|
||||
default:
|
||||
; /* fallthrough */
|
||||
}
|
||||
}
|
||||
|
||||
if (ctx->Version >= 30 ||
|
||||
ctx->Extensions.EXT_texture_integer) {
|
||||
switch (internalFormat) {
|
||||
@@ -3215,9 +3224,11 @@ _mesa_es3_error_check_format_and_type(const struct gl_context *ctx,
|
||||
return GL_INVALID_OPERATION;
|
||||
switch (type) {
|
||||
case GL_UNSIGNED_BYTE:
|
||||
if (internalFormat != GL_R8)
|
||||
return GL_INVALID_OPERATION;
|
||||
break;
|
||||
if (internalFormat == GL_R8 ||
|
||||
((internalFormat == GL_SR8_EXT) &&
|
||||
ctx->Extensions.EXT_texture_sRGB_R8))
|
||||
break;
|
||||
return GL_INVALID_OPERATION;
|
||||
|
||||
case GL_BYTE:
|
||||
if (internalFormat != GL_R8_SNORM)
|
||||
|
||||
@@ -138,6 +138,9 @@ typedef int GLclampx;
|
||||
#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837
|
||||
#endif
|
||||
|
||||
#ifndef GL_EXT_texture_sRGB_R8
|
||||
#define GL_SR8_EXT 0x8FBD
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Internal token to represent a GLSL shader program (a collection of
|
||||
|
||||
@@ -4264,6 +4264,7 @@ struct gl_extensions
|
||||
GLboolean EXT_texture_shared_exponent;
|
||||
GLboolean EXT_texture_snorm;
|
||||
GLboolean EXT_texture_sRGB;
|
||||
GLboolean EXT_texture_sRGB_R8;
|
||||
GLboolean EXT_texture_sRGB_decode;
|
||||
GLboolean EXT_texture_swizzle;
|
||||
GLboolean EXT_texture_type_2_10_10_10_REV;
|
||||
|
||||
@@ -477,6 +477,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_B8G8R8A8_SRGB);
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_A8R8G8B8_SRGB);
|
||||
break;
|
||||
case GL_SR8_EXT:
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_R_SRGB8);
|
||||
break;
|
||||
case GL_SLUMINANCE_EXT:
|
||||
case GL_SLUMINANCE8_EXT:
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_L_SRGB8);
|
||||
|
||||
@@ -257,6 +257,7 @@ texfetch_funcs[] =
|
||||
FETCH_FUNCS(A8L8_SRGB),
|
||||
|
||||
/* Array sRGB formats */
|
||||
FETCH_FUNCS(R_SRGB8),
|
||||
FETCH_FUNCS(L_SRGB8),
|
||||
FETCH_FUNCS(BGR_SRGB8),
|
||||
|
||||
|
||||
@@ -153,6 +153,7 @@ FETCH_RGBA(A8R8G8B8_SRGB, GLuint, 1)
|
||||
FETCH_RGBA(R8G8B8A8_SRGB, GLuint, 1)
|
||||
FETCH_RGBA(R8G8B8X8_SRGB, GLuint, 1)
|
||||
FETCH_RGBA(X8B8G8R8_SRGB, GLuint, 1)
|
||||
FETCH_RGBA(R_SRGB8, GLubyte, 1)
|
||||
FETCH_RGBA(L_SRGB8, GLubyte, 1)
|
||||
FETCH_RGBA(L8A8_SRGB, GLushort, 1)
|
||||
FETCH_RGBA(A8L8_SRGB, GLushort, 2)
|
||||
|
||||
Reference in New Issue
Block a user