From 77b440e42d8e7247c22959020bb087c63d298f2e Mon Sep 17 00:00:00 2001 From: Anuj Phogat Date: Fri, 30 Aug 2013 12:52:38 -0700 Subject: mesa: Add new functions and enums required by GL_ARB_sample_shading New functions added by GL_ARB_sample_shading: glMinSampleShadingARB() New enums: GL_SAMPLE_SHADING_ARB GL_MIN_SAMPLE_SHADING_VALUE_ARB V2: Update comments. Create new GL4x.xml. Remove redundant code in get.c. Update the API_XML list in Makefile.am. Add extra_gl40_ARB_sample_shading predicate to get.c. V3: Fix make check failure. Add checks for desktop GL. Use GLfloat in place of GLclampf in glMinSampleShading(). Signed-off-by: Anuj Phogat Reviewed-by: Ken Graunke --- src/mesa/main/enable.c | 18 ++++++++++++++++++ src/mesa/main/get.c | 8 ++++++++ src/mesa/main/get_hash_params.py | 3 +++ src/mesa/main/mtypes.h | 2 ++ src/mesa/main/multisample.c | 18 ++++++++++++++++++ src/mesa/main/multisample.h | 2 ++ src/mesa/main/tests/dispatch_sanity.cpp | 4 ++-- 7 files changed, 53 insertions(+), 2 deletions(-) (limited to 'src/mesa') diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 5e2fd80..dd6a772 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -802,6 +802,17 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state) ctx->Multisample.SampleCoverageInvert = state; break; + /* GL_ARB_sample_shading */ + case GL_SAMPLE_SHADING: + if (!_mesa_is_desktop_gl(ctx)) + goto invalid_enum_error; + CHECK_EXTENSION(ARB_sample_shading, cap); + if (ctx->Multisample.SampleShading == state) + return; + FLUSH_VERTICES(ctx, _NEW_MULTISAMPLE); + ctx->Multisample.SampleShading = state; + break; + /* GL_IBM_rasterpos_clip */ case GL_RASTER_POSITION_UNCLIPPED_IBM: if (ctx->API != API_OPENGL_COMPAT) @@ -1594,6 +1605,13 @@ _mesa_IsEnabled( GLenum cap ) CHECK_EXTENSION(ARB_texture_multisample); return ctx->Multisample.SampleMask; + /* ARB_sample_shading */ + case GL_SAMPLE_SHADING: + if (!_mesa_is_desktop_gl(ctx)) + goto invalid_enum_error; + CHECK_EXTENSION(ARB_sample_shading); + return ctx->Multisample.SampleShading; + default: goto invalid_enum_error; } diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 6e72ff5..6a0de0c 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -131,6 +131,7 @@ enum value_extra { EXTRA_VERSION_30, EXTRA_VERSION_31, EXTRA_VERSION_32, + EXTRA_VERSION_40, EXTRA_API_GL, EXTRA_API_GL_CORE, EXTRA_API_ES2, @@ -391,6 +392,7 @@ extra_NV_primitive_restart[] = { static const int extra_version_30[] = { EXTRA_VERSION_30, EXTRA_END }; static const int extra_version_31[] = { EXTRA_VERSION_31, EXTRA_END }; static const int extra_version_32[] = { EXTRA_VERSION_32, EXTRA_END }; +static const int extra_version_40[] = { EXTRA_VERSION_40, EXTRA_END }; static const int extra_gl30_es3[] = { EXTRA_VERSION_30, @@ -410,6 +412,12 @@ static const int extra_gl32_ARB_geometry_shader4[] = { EXTRA_END }; +static const int extra_gl40_ARB_sample_shading[] = { + EXTRA_VERSION_40, + EXT(ARB_sample_shading), + EXTRA_END +}; + static const int extra_ARB_vertex_program_api_es2[] = { EXT(ARB_vertex_program), diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py index 9f79f34..0851b7b 100644 --- a/src/mesa/main/get_hash_params.py +++ b/src/mesa/main/get_hash_params.py @@ -83,6 +83,9 @@ descriptor=[ [ "SAMPLE_BUFFERS_ARB", "BUFFER_INT(Visual.sampleBuffers), extra_new_buffers" ], [ "SAMPLES_ARB", "BUFFER_INT(Visual.samples), extra_new_buffers" ], +# GL_ARB_sample_shading + [ "MIN_SAMPLE_SHADING_VALUE_ARB", "CONTEXT_FLOAT(Multisample.MinSampleShadingValue), extra_gl40_ARB_sample_shading" ], + # GL_SGIS_generate_mipmap [ "GENERATE_MIPMAP_HINT_SGIS", "CONTEXT_ENUM(Hint.GenerateMipmap), NO_EXTRA" ], diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 476888b..4774c8e 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -872,6 +872,8 @@ struct gl_multisample_attrib GLboolean SampleCoverage; GLfloat SampleCoverageValue; GLboolean SampleCoverageInvert; + GLboolean SampleShading; + GLfloat MinSampleShadingValue; /* ARB_texture_multisample / GL3.2 additions */ GLboolean SampleMask; diff --git a/src/mesa/main/multisample.c b/src/mesa/main/multisample.c index bd97c50..599cdee 100644 --- a/src/mesa/main/multisample.c +++ b/src/mesa/main/multisample.c @@ -119,6 +119,24 @@ _mesa_SampleMaski(GLuint index, GLbitfield mask) ctx->Multisample.SampleMaskValue = mask; } +/** + * Called via glMinSampleShadingARB + */ +void GLAPIENTRY +_mesa_MinSampleShading(GLclampf value) +{ + GET_CURRENT_CONTEXT(ctx); + + if (!ctx->Extensions.ARB_sample_shading || !_mesa_is_desktop_gl(ctx)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glMinSampleShading"); + return; + } + + FLUSH_VERTICES(ctx, 0); + + ctx->Multisample.MinSampleShadingValue = CLAMP(value, 0.0, 1.0); + ctx->NewState |= _NEW_MULTISAMPLE; +} /** * Helper for checking a requested sample count against the limit diff --git a/src/mesa/main/multisample.h b/src/mesa/main/multisample.h index 66848d2..7441d3e 100644 --- a/src/mesa/main/multisample.h +++ b/src/mesa/main/multisample.h @@ -44,6 +44,8 @@ _mesa_GetMultisamplefv(GLenum pname, GLuint index, GLfloat* val); extern void GLAPIENTRY _mesa_SampleMaski(GLuint index, GLbitfield mask); +extern void GLAPIENTRY +_mesa_MinSampleShading(GLclampf value); extern GLenum _mesa_check_sample_count(struct gl_context *ctx, GLenum target, diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 408dbc0..58cff9b 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -542,7 +542,7 @@ const struct function gl_core_functions_possible[] = { { "glVertexAttribDivisor", 33, -1 }, /* GL 4.0 */ -// { "glMinSampleShading", 40, -1 }, // XXX: Add to xml + { "glMinSampleShading", 40, -1 }, // XXX: Add to xml // { "glBlendEquationi", 40, -1 }, // XXX: Add to xml // { "glBlendEquationSeparatei", 40, -1 }, // XXX: Add to xml // { "glBlendFunci", 40, -1 }, // XXX: Add to xml @@ -603,7 +603,7 @@ const struct function gl_core_functions_possible[] = { { "glBlendEquationSeparateiARB", 43, -1 }, { "glBlendFunciARB", 43, -1 }, { "glBlendFuncSeparateiARB", 43, -1 }, -// { "glMinSampleShadingARB", 43, -1 }, // XXX: Add to xml + { "glMinSampleShadingARB", 43, -1 }, // XXX: Add to xml // { "glNamedStringARB", 43, -1 }, // XXX: Add to xml // { "glDeleteNamedStringARB", 43, -1 }, // XXX: Add to xml // { "glCompileShaderIncludeARB", 43, -1 }, // XXX: Add to xml -- cgit v1.1