From 77b440e42d8e7247c22959020bb087c63d298f2e Mon Sep 17 00:00:00 2001 From: Anuj Phogat Date: Fri, 30 Aug 2013 12:52:38 -0700 Subject: [PATCH] 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/mapi/glapi/gen/ARB_sample_shading.xml | 19 +++++++++++++++++++ src/mapi/glapi/gen/GL4x.xml | 21 +++++++++++++++++++++ src/mapi/glapi/gen/Makefile.am | 5 ++++- src/mapi/glapi/gen/gl_API.xml | 4 +++- 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 ++-- 11 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 src/mapi/glapi/gen/ARB_sample_shading.xml create mode 100644 src/mapi/glapi/gen/GL4x.xml diff --git a/src/mapi/glapi/gen/ARB_sample_shading.xml b/src/mapi/glapi/gen/ARB_sample_shading.xml new file mode 100644 index 00000000000..cc8296a4786 --- /dev/null +++ b/src/mapi/glapi/gen/ARB_sample_shading.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/mapi/glapi/gen/GL4x.xml b/src/mapi/glapi/gen/GL4x.xml new file mode 100644 index 00000000000..6706278cef8 --- /dev/null +++ b/src/mapi/glapi/gen/GL4x.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am index 3902452163c..cbbf659dd01 100644 --- a/src/mapi/glapi/gen/Makefile.am +++ b/src/mapi/glapi/gen/Makefile.am @@ -108,6 +108,7 @@ API_XML = \ ARB_invalidate_subdata.xml \ ARB_map_buffer_range.xml \ ARB_robustness.xml \ + ARB_sample_shading.xml \ ARB_sampler_objects.xml \ ARB_seamless_cube_map.xml \ ARB_shader_atomic_counters.xml \ @@ -144,7 +145,9 @@ API_XML = \ NV_texture_barrier.xml \ NV_vdpau_interop.xml \ OES_EGL_image.xml \ - GL3x.xml + GL3x.xml \ + GL4x.xml + COMMON = $(API_XML) \ diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml index 45d69b40a03..69014c5d2f0 100644 --- a/src/mapi/glapi/gen/gl_API.xml +++ b/src/mapi/glapi/gen/gl_API.xml @@ -8187,7 +8187,7 @@ - + @@ -13122,4 +13122,6 @@ + + diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 5e2fd80d227..dd6a772f96c 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 6e72ff5c298..6a0de0c165c 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 9f79f340683..0851b7b7089 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 476888b508b..4774c8eb04c 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 bd97c50960e..599cdee7407 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 66848d2696f..7441d3ee941 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 408dbc0ca74..58cff9b60fa 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 -- 2.30.2