summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/extensions_table.h1
-rw-r--r--src/mesa/main/formats.c2
-rw-r--r--src/mesa/main/formats.csv1
-rw-r--r--src/mesa/main/formats.h1
-rw-r--r--src/mesa/main/glformats.c17
-rw-r--r--src/mesa/main/glheader.h3
-rw-r--r--src/mesa/main/mtypes.h1
-rw-r--r--src/mesa/main/texformat.c3
8 files changed, 26 insertions, 3 deletions
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index e3bf7c9fcee..a516a1b17f8 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -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)
diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
index d4cd5d2182c..cf2d2bc555a 100644
--- a/src/mesa/main/formats.c
+++ b/src/mesa/main/formats.c
@@ -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;
diff --git a/src/mesa/main/formats.csv b/src/mesa/main/formats.csv
index ce53f8f0561..cb821fec62f 100644
--- a/src/mesa/main/formats.csv
+++ b/src/mesa/main/formats.csv
@@ -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
diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h
index 335e4de9955..15c561225d6 100644
--- a/src/mesa/main/formats.h
+++ b/src/mesa/main/formats.h
@@ -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 */
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index f8fc36e9311..6cdc7818756 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -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)
diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h
index e95fc9fb4fe..4dd9a182be1 100644
--- a/src/mesa/main/glheader.h
+++ b/src/mesa/main/glheader.h
@@ -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
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 9ed49b7ff24..656e1226f94 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -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;
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index 822f80f89ed..381edd55451 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -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);