On Sun, Oct 18, 2015 at 9:38 PM, Tobias Klausmann <tobias.johannes.klausm...@mni.thm.de> wrote: > > > On 18.10.2015 19:14, Marek Olšák wrote: >> >> From: Marek Olšák <marek.ol...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev