[Mesa-dev] [PATCH 1/4] mesa: replace UsesClipDistance with ClipDistanceArraySize
Marek Olšák
maraeo at gmail.com
Mon Oct 19 14:34:25 PDT 2015
On Sun, Oct 18, 2015 at 9:38 PM, Tobias Klausmann
<tobias.johannes.klausmann at mni.thm.de> wrote:
>
>
> On 18.10.2015 19:14, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> This is more practical and needed by gallium.
>> ---
>> src/glsl/linker.cpp | 33
>> +++++++++++++++------------------
>> src/glsl/nir/glsl_to_nir.cpp | 3 ++-
>> src/mesa/drivers/dri/i965/brw_vs.c | 2 +-
>> src/mesa/main/mtypes.h | 5 +----
>> src/mesa/main/shaderapi.c | 6 +++---
>> 5 files changed, 22 insertions(+), 27 deletions(-)
>>
>> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
>> index 25ca928..9dd7a49 100644
>> --- a/src/glsl/linker.cpp
>> +++ b/src/glsl/linker.cpp
>> @@ -651,7 +651,7 @@ link_invalidate_variable_locations(exec_list *ir)
>> /**
>> - * Set UsesClipDistance and ClipDistanceArraySize based on the given
>> shader.
>> + * Set ClipDistanceArraySize based on the given shader.
>> *
>> * Also check for errors based on incorrect usage of gl_ClipVertex and
>> * gl_ClipDistance.
>> @@ -660,7 +660,7 @@ link_invalidate_variable_locations(exec_list *ir)
>> */
>> static void
>> analyze_clip_usage(struct gl_shader_program *prog,
>> - struct gl_shader *shader, GLboolean *UsesClipDistance,
>> + struct gl_shader *shader,
>> GLuint *ClipDistanceArraySize)
>> {
>> *ClipDistanceArraySize = 0;
>> @@ -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)
>> +
>> + if (clip_distance.variable_found()) {
>> + ir_variable *clip_distance_var =
>> + shader->symbols->get_variable("gl_ClipDistance");
>> +
>> + assert(clip_distance_var);
>> *ClipDistanceArraySize = clip_distance_var->type->length;
>> - } else {
>> - *UsesClipDistance = false;
>> + }
>> }
>> }
>> @@ -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);
>> }
>> /**
>> diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
>> index cf5bb93..3f7cc83 100644
>> --- a/src/glsl/nir/glsl_to_nir.cpp
>> +++ b/src/glsl/nir/glsl_to_nir.cpp
>> @@ -160,7 +160,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;
>
>
> Have you tested this working? At some place we fix up the size of the arrays
> (from "unsized" to 1 for 1D if i'm not mistaken), not sure if you will break
> something here.
"piglit-run .. -t clip" shows no regressions.
Marek
More information about the mesa-dev
mailing list