mesa: replace UsesClipDistance with ClipDistanceArraySize
This is more practical and needed by gallium. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
+18
-21
@@ -651,7 +651,7 @@ link_invalidate_variable_locations(exec_list *ir)
|
||||
|
||||
|
||||
/**
|
||||
* Set UsesClipDistance and ClipDistanceArraySize based on the given shader.
|
||||
* Set clip_distance_array_size based on the given shader.
|
||||
*
|
||||
* Also check for errors based on incorrect usage of gl_ClipVertex and
|
||||
* gl_ClipDistance.
|
||||
@@ -660,10 +660,10 @@ link_invalidate_variable_locations(exec_list *ir)
|
||||
*/
|
||||
static void
|
||||
analyze_clip_usage(struct gl_shader_program *prog,
|
||||
struct gl_shader *shader, GLboolean *UsesClipDistance,
|
||||
GLuint *ClipDistanceArraySize)
|
||||
struct gl_shader *shader,
|
||||
GLuint *clip_distance_array_size)
|
||||
{
|
||||
*ClipDistanceArraySize = 0;
|
||||
*clip_distance_array_size = 0;
|
||||
|
||||
if (!prog->IsES && prog->Version >= 130) {
|
||||
/* From section 7.1 (Vertex Shader Special Variables) of the
|
||||
@@ -686,13 +686,14 @@ analyze_clip_usage(struct gl_shader_program *prog,
|
||||
_mesa_shader_stage_to_string(shader->Stage));
|
||||
return;
|
||||
}
|
||||
*UsesClipDistance = clip_distance.variable_found();
|
||||
ir_variable *clip_distance_var =
|
||||
shader->symbols->get_variable("gl_ClipDistance");
|
||||
if (clip_distance_var)
|
||||
*ClipDistanceArraySize = clip_distance_var->type->length;
|
||||
} else {
|
||||
*UsesClipDistance = false;
|
||||
|
||||
if (clip_distance.variable_found()) {
|
||||
ir_variable *clip_distance_var =
|
||||
shader->symbols->get_variable("gl_ClipDistance");
|
||||
|
||||
assert(clip_distance_var);
|
||||
*clip_distance_array_size = clip_distance_var->type->length;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -700,8 +701,7 @@ analyze_clip_usage(struct gl_shader_program *prog,
|
||||
/**
|
||||
* Verify that a vertex shader executable meets all semantic requirements.
|
||||
*
|
||||
* Also sets prog->Vert.UsesClipDistance and prog->Vert.ClipDistanceArraySize
|
||||
* as a side effect.
|
||||
* Also sets prog->Vert.ClipDistanceArraySize as a side effect.
|
||||
*
|
||||
* \param shader Vertex shader executable to be verified
|
||||
*/
|
||||
@@ -754,8 +754,7 @@ validate_vertex_shader_executable(struct gl_shader_program *prog,
|
||||
}
|
||||
}
|
||||
|
||||
analyze_clip_usage(prog, shader, &prog->Vert.UsesClipDistance,
|
||||
&prog->Vert.ClipDistanceArraySize);
|
||||
analyze_clip_usage(prog, shader, &prog->Vert.ClipDistanceArraySize);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -765,8 +764,7 @@ validate_tess_eval_shader_executable(struct gl_shader_program *prog,
|
||||
if (shader == NULL)
|
||||
return;
|
||||
|
||||
analyze_clip_usage(prog, shader, &prog->TessEval.UsesClipDistance,
|
||||
&prog->TessEval.ClipDistanceArraySize);
|
||||
analyze_clip_usage(prog, shader, &prog->TessEval.ClipDistanceArraySize);
|
||||
}
|
||||
|
||||
|
||||
@@ -797,8 +795,8 @@ validate_fragment_shader_executable(struct gl_shader_program *prog,
|
||||
/**
|
||||
* Verify that a geometry shader executable meets all semantic requirements
|
||||
*
|
||||
* Also sets prog->Geom.VerticesIn, prog->Geom.UsesClipDistance, and
|
||||
* prog->Geom.ClipDistanceArraySize as a side effect.
|
||||
* Also sets prog->Geom.VerticesIn, and prog->Geom.ClipDistanceArraySize as
|
||||
* a side effect.
|
||||
*
|
||||
* \param shader Geometry shader executable to be verified
|
||||
*/
|
||||
@@ -812,8 +810,7 @@ validate_geometry_shader_executable(struct gl_shader_program *prog,
|
||||
unsigned num_vertices = vertices_per_prim(prog->Geom.InputType);
|
||||
prog->Geom.VerticesIn = num_vertices;
|
||||
|
||||
analyze_clip_usage(prog, shader, &prog->Geom.UsesClipDistance,
|
||||
&prog->Geom.ClipDistanceArraySize);
|
||||
analyze_clip_usage(prog, shader, &prog->Geom.ClipDistanceArraySize);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -162,7 +162,8 @@ glsl_to_nir(const struct gl_shader_program *shader_prog,
|
||||
shader->info.outputs_written = sh->Program->OutputsWritten;
|
||||
shader->info.system_values_read = sh->Program->SystemValuesRead;
|
||||
shader->info.uses_texture_gather = sh->Program->UsesGather;
|
||||
shader->info.uses_clip_distance_out = sh->Program->UsesClipDistanceOut;
|
||||
shader->info.uses_clip_distance_out =
|
||||
sh->Program->ClipDistanceArraySize != 0;
|
||||
shader->info.separate_shader = shader_prog->SeparateShader;
|
||||
shader->info.has_transform_feedback_varyings =
|
||||
shader_prog->TransformFeedback.NumVarying > 0;
|
||||
|
||||
@@ -312,7 +312,7 @@ brw_vs_populate_key(struct brw_context *brw,
|
||||
|
||||
if (ctx->Transform.ClipPlanesEnabled != 0 &&
|
||||
ctx->API == API_OPENGL_COMPAT &&
|
||||
!vp->program.Base.UsesClipDistanceOut) {
|
||||
vp->program.Base.ClipDistanceArraySize == 0) {
|
||||
key->nr_userclip_plane_consts =
|
||||
_mesa_logbase2(ctx->Transform.ClipPlanesEnabled) + 1;
|
||||
}
|
||||
|
||||
@@ -1891,7 +1891,7 @@ struct gl_program
|
||||
* For vertex and geometry shaders, true if the program uses the
|
||||
* gl_ClipDistance output. Ignored for fragment shaders.
|
||||
*/
|
||||
GLboolean UsesClipDistanceOut;
|
||||
unsigned ClipDistanceArraySize;
|
||||
|
||||
|
||||
/** Named parameters, constants, etc. from program text */
|
||||
@@ -2614,7 +2614,6 @@ struct gl_shader_program
|
||||
* True if gl_ClipDistance is written to. Copied into
|
||||
* gl_tess_eval_program by _mesa_copy_linked_program_data().
|
||||
*/
|
||||
GLboolean UsesClipDistance;
|
||||
GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
|
||||
0 if not present. */
|
||||
} TessEval;
|
||||
@@ -2637,7 +2636,6 @@ 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. */
|
||||
bool UsesEndPrimitive;
|
||||
@@ -2650,7 +2648,6 @@ 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. */
|
||||
} Vert;
|
||||
|
||||
@@ -2068,7 +2068,7 @@ _mesa_copy_linked_program_data(gl_shader_stage type,
|
||||
{
|
||||
switch (type) {
|
||||
case MESA_SHADER_VERTEX:
|
||||
dst->UsesClipDistanceOut = src->Vert.UsesClipDistance;
|
||||
dst->ClipDistanceArraySize = src->Vert.ClipDistanceArraySize;
|
||||
break;
|
||||
case MESA_SHADER_TESS_CTRL: {
|
||||
struct gl_tess_ctrl_program *dst_tcp =
|
||||
@@ -2083,7 +2083,7 @@ _mesa_copy_linked_program_data(gl_shader_stage type,
|
||||
dst_tep->Spacing = src->TessEval.Spacing;
|
||||
dst_tep->VertexOrder = src->TessEval.VertexOrder;
|
||||
dst_tep->PointMode = src->TessEval.PointMode;
|
||||
dst->UsesClipDistanceOut = src->TessEval.UsesClipDistance;
|
||||
dst->ClipDistanceArraySize = src->TessEval.ClipDistanceArraySize;
|
||||
break;
|
||||
}
|
||||
case MESA_SHADER_GEOMETRY: {
|
||||
@@ -2093,7 +2093,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->ClipDistanceArraySize = src->Geom.ClipDistanceArraySize;
|
||||
dst_gp->UsesEndPrimitive = src->Geom.UsesEndPrimitive;
|
||||
dst_gp->UsesStreams = src->Geom.UsesStreams;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user