On 02/06/16 23:09, Kenneth Graunke wrote: > i965 has no special hardware for this, so the best way to implement > this is to pass it in via a uniform.
Is this comment accurate? On the next patch you implement the i965 bits, and you only do the lowering on gen8+, mentioning that you would like to do the same on gen7. So for gen7 it is implemented, but an uniform is not used. Or am I missing something? > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > Cc: mesa-sta...@lists.freedesktop.org > --- > src/compiler/glsl/builtin_variables.cpp | 13 ++++++++++++- > src/mesa/main/mtypes.h | 1 + > src/mesa/program/prog_statevars.c | 4 ++++ > src/mesa/program/prog_statevars.h | 1 + > 4 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/src/compiler/glsl/builtin_variables.cpp > b/src/compiler/glsl/builtin_variables.cpp > index 05b3b0b..35a11bb 100644 > --- a/src/compiler/glsl/builtin_variables.cpp > +++ b/src/compiler/glsl/builtin_variables.cpp > @@ -37,6 +37,11 @@ static const struct gl_builtin_uniform_element > gl_NumSamples_elements[] = { > {NULL, {STATE_NUM_SAMPLES, 0, 0}, SWIZZLE_XXXX} > }; > > +/* only for TCS */ > +static const struct gl_builtin_uniform_element gl_PatchVerticesIn_elements[] > = { > + {NULL, {STATE_INTERNAL, STATE_TCS_PATCH_VERTICES_IN}, 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}, > @@ -234,6 +239,7 @@ static const struct gl_builtin_uniform_element > gl_NormalMatrix_elements[] = { > #define STATEVAR(name) {#name, name ## _elements, ARRAY_SIZE(name ## > _elements)} > > static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = { > + STATEVAR(gl_PatchVerticesIn), > STATEVAR(gl_NumSamples), > STATEVAR(gl_DepthRange), > STATEVAR(gl_ClipPlane), > @@ -1029,9 +1035,14 @@ void > builtin_variable_generator::generate_tcs_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_INVOCATION_ID, int_t, "gl_InvocationID"); > > + if (state->ctx->Const.LowerTCSPatchVerticesIn) { > + add_uniform(int_t, "gl_PatchVerticesIn"); > + } else { > + add_system_value(SYSTEM_VALUE_VERTICES_IN, int_t, > "gl_PatchVerticesIn"); > + } > + > add_output(VARYING_SLOT_TESS_LEVEL_OUTER, array(float_t, 4), > "gl_TessLevelOuter")->data.patch = 1; > add_output(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2), > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 8970274..f1d70fb 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3762,6 +3762,7 @@ struct gl_constants > GLuint MaxTessPatchComponents; > GLuint MaxTessControlTotalOutputComponents; > bool LowerTessLevel; /**< Lower gl_TessLevel* from float[n] to vecn? */ > + bool LowerTCSPatchVerticesIn; /**< Lower gl_PatchVerticesIn to a uniform > */ > bool LowerTESPatchVerticesIn; /**< Lower gl_PatchVerticesIn to a uniform > */ > bool PrimitiveRestartForPatches; > bool LowerCsDerivedVariables; /**< Lower gl_GlobalInvocationID and > diff --git a/src/mesa/program/prog_statevars.c > b/src/mesa/program/prog_statevars.c > index 23e3015..8dddc0b 100644 > --- a/src/mesa/program/prog_statevars.c > +++ b/src/mesa/program/prog_statevars.c > @@ -598,6 +598,10 @@ _mesa_fetch_state(struct gl_context *ctx, const > gl_state_index state[], > } > return; > > + case STATE_TCS_PATCH_VERTICES_IN: > + val[0].i = ctx->TessCtrlProgram.patch_vertices; > + return; > + > case STATE_TES_PATCH_VERTICES_IN: > if (ctx->TessCtrlProgram._Current) > val[0].i = ctx->TessCtrlProgram._Current->VerticesOut; > diff --git a/src/mesa/program/prog_statevars.h > b/src/mesa/program/prog_statevars.h > index 4b27527..e716d90 100644 > --- a/src/mesa/program/prog_statevars.h > +++ b/src/mesa/program/prog_statevars.h > @@ -128,6 +128,7 @@ 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_TCS_PATCH_VERTICES_IN, /**< gl_PatchVerticesIn for TCS (integer) */ > STATE_TES_PATCH_VERTICES_IN, /**< gl_PatchVerticesIn for TES (integer) */ > STATE_INTERNAL_DRIVER /* first available state index for drivers > (must be last) */ > } gl_state_index; _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev