[Mesa-dev] [PATCH v2 1/3] mesa/core: Add support for EXT_sRGB_write_control
Gert Wollny
gw.fossdev at gmail.com
Thu Oct 18 08:46:33 UTC 2018
From: Gert Wollny <gert.wollny at collabora.com>
This GLES extension gives the applications the control over deciding whether
the conversion from linear space to sRGB is necessary by enabling or
disabling this conversion at framebuffer write or blending time just
like it is possible for desktop GL.
Note, the extension could also be enabled for GLES 2.0 if EXT_sRGB were
exposed somehow, but for now 3.0 is set as the minimum requirement.
v2: - Correct the extension table to list the extension as GLES only
- drop EXTRA_API_ES3, the requirements for get operations listed
here get OR-ed. (both Ilia Mirkin)
Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
---
src/mesa/main/enable.c | 4 ++--
src/mesa/main/extensions_table.h | 1 +
src/mesa/main/get.c | 5 +++++
src/mesa/main/get_hash_params.py | 1 +
src/mesa/main/mtypes.h | 1 +
5 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index bd3e493da5..06c5a0eb68 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -1125,7 +1125,7 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
/* GL3.0 - GL_framebuffer_sRGB */
case GL_FRAMEBUFFER_SRGB_EXT:
- if (!_mesa_is_desktop_gl(ctx))
+ if (!_mesa_is_desktop_gl(ctx) && !ctx->Extensions.EXT_sRGB_write_control)
goto invalid_enum_error;
CHECK_EXTENSION(EXT_framebuffer_sRGB, cap);
_mesa_set_framebuffer_srgb(ctx, state);
@@ -1765,7 +1765,7 @@ _mesa_IsEnabled( GLenum cap )
/* GL3.0 - GL_framebuffer_sRGB */
case GL_FRAMEBUFFER_SRGB_EXT:
- if (!_mesa_is_desktop_gl(ctx))
+ if (!_mesa_is_desktop_gl(ctx) && !ctx->Extensions.EXT_sRGB_write_control)
goto invalid_enum_error;
CHECK_EXTENSION(EXT_framebuffer_sRGB);
return ctx->Color.sRGBEnabled;
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 09bf923bd0..8679ee2fc5 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -265,6 +265,7 @@ EXT(EXT_shader_integer_mix , EXT_shader_integer_mix
EXT(EXT_shader_io_blocks , dummy_true , x , x , x , 31, 2014)
EXT(EXT_shader_samples_identical , EXT_shader_samples_identical , GLL, GLC, x , 31, 2015)
EXT(EXT_shadow_funcs , ARB_shadow , GLL, x , x , x , 2002)
+EXT(EXT_sRGB_write_control , EXT_sRGB_write_control , x, x , x , 30, 2013)
EXT(EXT_stencil_two_side , EXT_stencil_two_side , GLL, x , x , x , 2001)
EXT(EXT_stencil_wrap , dummy_true , GLL, x , x , x , 2002)
EXT(EXT_subtexture , dummy_true , GLL, x , x , x , 1995)
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 1b1679e8bf..3a77bc6f8d 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -394,6 +394,11 @@ static const int extra_ARB_compute_shader_es31[] = {
EXTRA_END
};
+static const int extra_EXT_sRGB_write_control_es30[] = {
+ EXT(EXT_sRGB_write_control),
+ EXTRA_END
+};
+
static const int extra_ARB_shader_storage_buffer_object_es31[] = {
EXT(ARB_shader_storage_buffer_object),
EXTRA_API_ES31,
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index 1840db6ebb..822fab8151 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -262,6 +262,7 @@ descriptor=[
# Enums in GLES2, GLES3
{ "apis": ["GLES2", "GLES3"], "params": [
[ "GPU_DISJOINT_EXT", "LOC_CUSTOM, TYPE_INT, 0, extra_EXT_disjoint_timer_query" ],
+ [ "FRAMEBUFFER_SRGB_EXT", "CONTEXT_BOOL(Color.sRGBEnabled), extra_EXT_sRGB_write_control_es30" ],
]},
{ "apis": ["GL", "GL_CORE", "GLES2"], "params": [
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 9ed49b7ff2..31cf62fdb6 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4253,6 +4253,7 @@ struct gl_extensions
GLboolean EXT_semaphore_fd;
GLboolean EXT_shader_integer_mix;
GLboolean EXT_shader_samples_identical;
+ GLboolean EXT_sRGB_write_control;
GLboolean EXT_stencil_two_side;
GLboolean EXT_texture_array;
GLboolean EXT_texture_compression_latc;
--
2.18.1
More information about the mesa-dev
mailing list