Signed-off-by: Tobias Klausmann <tobias.johannes.klausm...@mni.thm.de> --- src/mesa/main/extensions.c | 1 + src/mesa/main/get.c | 26 ++++++++++++++++++++++++++ src/mesa/main/get_hash_params.py | 4 ++++ src/mesa/main/mtypes.h | 22 +++++++++++++--------- src/mesa/main/shaderapi.c | 4 ++-- src/mesa/main/tests/enum_strings.cpp | 2 ++ 6 files changed, 48 insertions(+), 11 deletions(-)
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index c82416a..2145502 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -99,6 +99,7 @@ static const struct extension extension_table[] = { { "GL_ARB_copy_buffer", o(dummy_true), GL, 2008 }, { "GL_ARB_copy_image", o(ARB_copy_image), GL, 2012 }, { "GL_ARB_conservative_depth", o(ARB_conservative_depth), GL, 2011 }, + { "GL_ARB_cull_distance", o(ARB_cull_distance), GL, 2014 }, { "GL_ARB_debug_output", o(dummy_true), GL, 2009 }, { "GL_ARB_depth_buffer_float", o(ARB_depth_buffer_float), GL, 2008 }, { "GL_ARB_depth_clamp", o(ARB_depth_clamp), GL, 2003 }, diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 8a6c81a..1dcfcc9 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -143,6 +143,8 @@ enum value_extra { EXTRA_VALID_DRAW_BUFFER, EXTRA_VALID_TEXTURE_UNIT, EXTRA_VALID_CLIP_DISTANCE, + EXTRA_VALID_CULL_DISTANCE, + EXTRA_VALID_CULL_AND_CLIP_DISTANCE, EXTRA_FLUSH_CURRENT, EXTRA_GLSL_130, EXTRA_EXT_UBO_GS4, @@ -267,6 +269,13 @@ static const int extra_valid_clip_distance[] = { EXTRA_END }; +static const int extra_valid_clip_and_cull_distance[] = { + EXTRA_VALID_CLIP_DISTANCE, + EXTRA_VALID_CULL_DISTANCE, + EXTRA_VALID_CULL_AND_CLIP_DISTANCE, + EXTRA_END +}; + static const int extra_flush_current_valid_texture_unit[] = { EXTRA_FLUSH_CURRENT, EXTRA_VALID_TEXTURE_UNIT, @@ -393,6 +402,7 @@ EXTRA_EXT(INTEL_performance_query); EXTRA_EXT(ARB_explicit_uniform_location); EXTRA_EXT(ARB_clip_control); EXTRA_EXT(EXT_polygon_offset_clamp); +EXTRA_EXT(ARB_cull_distance); static const int extra_ARB_color_buffer_float_or_glcore[] = { @@ -1116,6 +1126,22 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d return GL_FALSE; } break; + case EXTRA_VALID_CULL_DISTANCE: + if (d->pname - GL_MAX_CULL_DISTANCES >= ctx->Const.MaxClipPlanes) { + _mesa_error(ctx, GL_INVALID_ENUM, "%s(cull distance %u)", + func, d->pname - GL_MAX_CULL_DISTANCES); + return GL_FALSE; + } + break; + case EXTRA_VALID_CULL_AND_CLIP_DISTANCE: + if (d->pname - GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES >= + ctx->Const.MaxClipPlanes) { + _mesa_error(ctx, GL_INVALID_ENUM, + "%s(combined clip and cull distance %u)", func, + d->pname - GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES); + return GL_FALSE; + } + break; case EXTRA_GLSL_130: api_check = GL_TRUE; if (ctx->Const.GLSLVersion >= 130) diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py index 41cb2c1..a63aba7 100644 --- a/src/mesa/main/get_hash_params.py +++ b/src/mesa/main/get_hash_params.py @@ -798,6 +798,10 @@ descriptor=[ [ "MIN_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), extra_ARB_gpu_shader5" ], [ "MAX_FRAGMENT_INTERPOLATION_OFFSET", "CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), extra_ARB_gpu_shader5" ], [ "FRAGMENT_INTERPOLATION_OFFSET_BITS", "CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), extra_ARB_gpu_shader5" ], + +# GL_ARB_cull_distance + [ "MAX_CULL_DISTANCES", "CONTEXT_INT(Const.MaxClipPlanes), extra_ARB_cull_distance" ], + [ "MAX_COMBINED_CLIP_AND_CULL_DISTANCES", "CONTEXT_INT(Const.MaxClipPlanes), extra_ARB_cull_distance" ], ]}, # Enums restricted to OpenGL Core profile diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 8342517..6425c06 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -236,6 +236,8 @@ typedef enum VARYING_SLOT_CLIP_VERTEX, /* Does not appear in FS */ VARYING_SLOT_CLIP_DIST0, VARYING_SLOT_CLIP_DIST1, + VARYING_SLOT_CULL_DIST0, + VARYING_SLOT_CULL_DIST1, VARYING_SLOT_PRIMITIVE_ID, /* Does not appear in VS */ VARYING_SLOT_LAYER, /* Appears as VS or GS output */ VARYING_SLOT_VIEWPORT, /* Appears as VS or GS output */ @@ -272,6 +274,8 @@ typedef enum #define VARYING_BIT_CLIP_VERTEX BITFIELD64_BIT(VARYING_SLOT_CLIP_VERTEX) #define VARYING_BIT_CLIP_DIST0 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST0) #define VARYING_BIT_CLIP_DIST1 BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST1) +#define VARYING_BIT_CULL_DIST0 BITFIELD64_BIT(VARYING_SLOT_CULL_DIST0) +#define VARYING_BIT_CULL_DIST1 BITFIELD64_BIT(VARYING_SLOT_CULL_DIST1) #define VARYING_BIT_PRIMITIVE_ID BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_ID) #define VARYING_BIT_LAYER BITFIELD64_BIT(VARYING_SLOT_LAYER) #define VARYING_BIT_VIEWPORT BITFIELD64_BIT(VARYING_SLOT_VIEWPORT) @@ -2111,8 +2115,7 @@ struct gl_program * For vertex and geometry shaders, true if the program uses the * gl_ClipDistance output. Ignored for fragment shaders. */ - GLboolean UsesClipDistanceOut; - + GLboolean UsesClipCullDistanceOut; /** Named parameters, constants, etc. from program text */ struct gl_program_parameter_list *Parameters; @@ -2697,9 +2700,9 @@ struct gl_shader_program * True if gl_ClipDistance is written to. Copied into * gl_geometry_program by _mesa_copy_linked_program_data(). */ - GLboolean UsesClipDistance; - GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or - 0 if not present. */ + GLboolean UsesClipCullDistance; + GLuint ClipCullDistanceArraySize; /**< Size of the gl_ClipDistance array, + or 0 if not present. */ bool UsesEndPrimitive; bool UsesStreams; } Geom; @@ -2710,9 +2713,9 @@ struct gl_shader_program * True if gl_ClipDistance is written to. Copied into gl_vertex_program * by _mesa_copy_linked_program_data(). */ - GLboolean UsesClipDistance; - GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or - 0 if not present. */ + GLboolean UsesClipCullDistance; + GLuint ClipCullDistanceArraySize; /**< Size of the gl_ClipDistance array, + or 0 if not present. */ } Vert; /** @@ -2744,7 +2747,7 @@ struct gl_shader_program * Size of the gl_ClipDistance array that is output from the last pipeline * stage before the fragment shader. */ - unsigned LastClipDistanceArraySize; + unsigned LastClipCullDistanceArraySize; unsigned NumUniformBlocks; struct gl_uniform_block *UniformBlocks; @@ -3617,6 +3620,7 @@ struct gl_extensions GLboolean ARB_conditional_render_inverted; GLboolean ARB_conservative_depth; GLboolean ARB_copy_image; + GLboolean ARB_cull_distance; GLboolean ARB_depth_buffer_float; GLboolean ARB_depth_clamp; GLboolean ARB_depth_texture; diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index a04b287..7b26173 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -1942,7 +1942,7 @@ _mesa_copy_linked_program_data(gl_shader_stage type, { switch (type) { case MESA_SHADER_VERTEX: - dst->UsesClipDistanceOut = src->Vert.UsesClipDistance; + dst->UsesClipCullDistanceOut = src->Vert.UsesClipCullDistance; break; case MESA_SHADER_GEOMETRY: { struct gl_geometry_program *dst_gp = (struct gl_geometry_program *) dst; @@ -1951,7 +1951,7 @@ _mesa_copy_linked_program_data(gl_shader_stage type, dst_gp->Invocations = src->Geom.Invocations; dst_gp->InputType = src->Geom.InputType; dst_gp->OutputType = src->Geom.OutputType; - dst->UsesClipDistanceOut = src->Geom.UsesClipDistance; + dst->UsesClipCullDistanceOut = src->Geom.UsesClipCullDistance; dst_gp->UsesEndPrimitive = src->Geom.UsesEndPrimitive; dst_gp->UsesStreams = src->Geom.UsesStreams; } diff --git a/src/mesa/main/tests/enum_strings.cpp b/src/mesa/main/tests/enum_strings.cpp index dc5fe75..959db15 100644 --- a/src/mesa/main/tests/enum_strings.cpp +++ b/src/mesa/main/tests/enum_strings.cpp @@ -789,6 +789,8 @@ const struct enum_info everything[] = { { 0x8261, "GL_NO_RESET_NOTIFICATION_ARB" }, { 0x826E, "GL_MAX_UNIFORM_LOCATIONS" }, { 0x82DF, "GL_TEXTURE_IMMUTABLE_LEVELS" }, + { 0x82F9, "GL_MAX_CULL_DISTANCES" }, + { 0x82FA, "GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES" }, { 0x8362, "GL_UNSIGNED_BYTE_2_3_3_REV" }, { 0x8363, "GL_UNSIGNED_SHORT_5_6_5" }, { 0x8364, "GL_UNSIGNED_SHORT_5_6_5_REV" }, -- 2.4.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev