If the hardware needs to always have a control shader present if and evaluation shader is present, then the control shader will need these values. --- src/glsl/builtin_variables.cpp | 14 ++++++++++++++ src/mesa/program/prog_statevars.c | 24 ++++++++++++++++++++++++ src/mesa/program/prog_statevars.h | 3 +++ 3 files changed, 41 insertions(+)
diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp index 97ef68c..0909818 100644 --- a/src/glsl/builtin_variables.cpp +++ b/src/glsl/builtin_variables.cpp @@ -33,6 +33,14 @@ static const struct gl_builtin_uniform_element gl_NumSamples_elements[] = { {NULL, {STATE_NUM_SAMPLES, 0, 0}, SWIZZLE_XXXX} }; +static const struct gl_builtin_uniform_element gl_DefaultTessLevelOuterMESA_elements[] = { + {NULL, {STATE_INTERNAL, STATE_DEFAULT_TESS_LEVEL_OUTER, 0, 0}, SWIZZLE_XXXX} +}; + +static const struct gl_builtin_uniform_element gl_DefaultTessLevelInnerMESA_elements[] = { + {NULL, {STATE_INTERNAL, STATE_DEFAULT_TESS_LEVEL_INNER, 0, 0}, SWIZZLE_XXXX} +}; + static const struct gl_builtin_uniform_element gl_DepthRange_elements[] = { {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX}, {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_YYYY}, @@ -280,6 +288,9 @@ static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { STATEVAR(gl_CurrentAttribVertMESA), STATEVAR(gl_CurrentAttribFragMESA), + STATEVAR(gl_DefaultTessLevelOuterMESA), + STATEVAR(gl_DefaultTessLevelInnerMESA), + {NULL, NULL, 0} }; @@ -743,6 +754,9 @@ builtin_variable_generator::generate_uniforms() add_uniform(array(vec4_t, VERT_ATTRIB_MAX), "gl_CurrentAttribVertMESA"); add_uniform(array(vec4_t, VARYING_SLOT_MAX), "gl_CurrentAttribFragMESA"); + add_uniform(array(float_t, 4), "gl_DefaultTessLevelOuterMESA"); + add_uniform(array(float_t, 2), "gl_DefaultTessLevelInnerMESA"); + if (compatibility) { add_uniform(mat4_t, "gl_ModelViewMatrix"); add_uniform(mat4_t, "gl_ProjectionMatrix"); diff --git a/src/mesa/program/prog_statevars.c b/src/mesa/program/prog_statevars.c index be5ddb1..785257b 100644 --- a/src/mesa/program/prog_statevars.c +++ b/src/mesa/program/prog_statevars.c @@ -593,6 +593,20 @@ _mesa_fetch_state(struct gl_context *ctx, const gl_state_index state[], } return; + case STATE_DEFAULT_TESS_LEVEL_OUTER: + value[0] = ctx->TessCtrlProgram.patch_default_outer_level[state[2]]; + value[1] = 0.0F; + value[2] = 0.0F; + value[3] = 0.0F; + return; + + case STATE_DEFAULT_TESS_LEVEL_INNER: + value[0] = ctx->TessCtrlProgram.patch_default_inner_level[state[2]]; + value[1] = 0.0F; + value[2] = 0.0F; + value[3] = 0.0F; + return; + /* XXX: make sure new tokens added here are also handled in the * _mesa_program_state_flags() switch, below. */ @@ -703,6 +717,10 @@ _mesa_program_state_flags(const gl_state_index state[STATE_LENGTH]) case STATE_FB_WPOS_Y_TRANSFORM: return _NEW_BUFFERS; + case STATE_DEFAULT_TESS_LEVEL_OUTER: + case STATE_DEFAULT_TESS_LEVEL_INNER: + return _NEW_PROGRAM; + default: /* unknown state indexes are silently ignored and * no flag set, since it is handled by the driver. @@ -909,6 +927,12 @@ append_token(char *dst, gl_state_index k) case STATE_FB_WPOS_Y_TRANSFORM: append(dst, "FbWposYTransform"); break; + case STATE_DEFAULT_TESS_LEVEL_OUTER: + append(dst, "DefaultTessLevelOuter"); + break; + case STATE_DEFAULT_TESS_LEVEL_INNER: + append(dst, "DefaultTessLevelInner"); + break; default: /* probably STATE_INTERNAL_DRIVER+i (driver private state) */ append(dst, "driverState"); diff --git a/src/mesa/program/prog_statevars.h b/src/mesa/program/prog_statevars.h index 6333e63..7240398 100644 --- a/src/mesa/program/prog_statevars.h +++ b/src/mesa/program/prog_statevars.h @@ -128,6 +128,9 @@ typedef enum gl_state_index_ { STATE_PT_BIAS, /**< Pixel transfer RGBA bias */ STATE_FB_SIZE, /**< (width-1, height-1, 0, 0) */ STATE_FB_WPOS_Y_TRANSFORM, /**< (1, 0, -1, height) if a FBO is bound, (-1, height, 1, 0) otherwise */ + + STATE_DEFAULT_TESS_LEVEL_OUTER, + STATE_DEFAULT_TESS_LEVEL_INNER, STATE_INTERNAL_DRIVER /* first available state index for drivers (must be last) */ } gl_state_index; -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev