From a46bd79ee195d699b020a8dde3fda6eab4ece0d4 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 6 Dec 2016 01:50:03 -0800 Subject: [PATCH] glsl: Support gl_TessLevelInner/Outer[] as TES input variables. Upcoming reworks in i965 are going to make it easy to handle this like any other input. Having it as a system value will just require additional code for no benefit. Signed-off-by: Kenneth Graunke Reviewed-by: Jason Ekstrand Reviewed-by: Timothy Arceri --- src/compiler/glsl/builtin_variables.cpp | 15 +++++++++++---- src/mesa/main/mtypes.h | 6 ++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp index ca266a4c37c..d6dac6d7de5 100644 --- a/src/compiler/glsl/builtin_variables.cpp +++ b/src/compiler/glsl/builtin_variables.cpp @@ -1075,10 +1075,17 @@ builtin_variable_generator::generate_tes_special_vars() add_system_value(SYSTEM_VALUE_PRIMITIVE_ID, int_t, "gl_PrimitiveID"); add_system_value(SYSTEM_VALUE_VERTICES_IN, int_t, "gl_PatchVerticesIn"); add_system_value(SYSTEM_VALUE_TESS_COORD, vec3_t, "gl_TessCoord"); - add_system_value(SYSTEM_VALUE_TESS_LEVEL_OUTER, array(float_t, 4), - "gl_TessLevelOuter"); - add_system_value(SYSTEM_VALUE_TESS_LEVEL_INNER, array(float_t, 2), - "gl_TessLevelInner"); + if (this->state->ctx->Const.GLSLTessLevelsAsInputs) { + add_input(VARYING_SLOT_TESS_LEVEL_OUTER, array(float_t, 4), + "gl_TessLevelOuter")->data.patch = 1; + add_input(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2), + "gl_TessLevelInner")->data.patch = 1; + } else { + add_system_value(SYSTEM_VALUE_TESS_LEVEL_OUTER, array(float_t, 4), + "gl_TessLevelOuter"); + add_system_value(SYSTEM_VALUE_TESS_LEVEL_INNER, array(float_t, 2), + "gl_TessLevelInner"); + } if (state->ARB_shader_viewport_layer_array_enable) { var = add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer"); var->data.interpolation = INTERP_MODE_FLAT; diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 243c76ded14..dadedb145ad 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3640,6 +3640,12 @@ struct gl_constants */ bool GLSLOptimizeConservatively; + /** + * True if gl_TessLevelInner/Outer[] in the TES should be inputs + * (otherwise, they're system values). + */ + bool GLSLTessLevelsAsInputs; + /** * Always use the GetTransformFeedbackVertexCount() driver hook, rather * than passing the transform feedback object to the drawing function. -- 2.30.2