[Mesa-dev] [PATCH 36/53] mesa/glsl: set {clip, cull}_distance_array_size directly in gl_program
Timothy Arceri
timothy.arceri at collabora.com
Tue Jan 3 02:43:40 UTC 2017
There are some line wrapping violations here but those lines will get
deleted in the following patch.
---
src/compiler/glsl/glsl_to_nir.cpp | 2 --
src/compiler/glsl/linker.cpp | 32 +++++++++++++++----------------
src/mesa/drivers/dri/i965/brw_vs.c | 2 +-
src/mesa/main/mtypes.h | 38 -------------------------------------
src/mesa/main/shaderapi.c | 8 --------
src/mesa/state_tracker/st_program.c | 16 ++++++++--------
6 files changed, 25 insertions(+), 73 deletions(-)
diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp
index 6cf4f50..5812d46 100644
--- a/src/compiler/glsl/glsl_to_nir.cpp
+++ b/src/compiler/glsl/glsl_to_nir.cpp
@@ -149,8 +149,6 @@ glsl_to_nir(const struct gl_shader_program *shader_prog,
shader->info->name = ralloc_asprintf(shader, "GLSL%d", shader_prog->Name);
if (shader_prog->Label)
shader->info->label = ralloc_strdup(shader, shader_prog->Label);
- shader->info->clip_distance_array_size = sh->Program->ClipDistanceArraySize;
- shader->info->cull_distance_array_size = sh->Program->CullDistanceArraySize;
shader->info->has_transform_feedback_varyings =
shader_prog->TransformFeedback.NumVarying > 0;
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index c3eb973..614f484 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -633,8 +633,8 @@ analyze_clip_cull_usage(struct gl_shader_program *prog,
/**
* Verify that a vertex shader executable meets all semantic requirements.
*
- * Also sets prog->Vert.ClipDistanceArraySize and
- * prog->Vert.CullDistanceArraySize as a side effect.
+ * Also sets info.clip_distance_array_size and
+ * info.cull_distance_array_size as a side effect.
*
* \param shader Vertex shader executable to be verified
*/
@@ -689,8 +689,8 @@ validate_vertex_shader_executable(struct gl_shader_program *prog,
}
analyze_clip_cull_usage(prog, shader, ctx,
- &prog->Vert.ClipDistanceArraySize,
- &prog->Vert.CullDistanceArraySize);
+ &shader->Program->info.clip_distance_array_size,
+ &shader->Program->info.cull_distance_array_size);
}
void
@@ -702,8 +702,8 @@ validate_tess_eval_shader_executable(struct gl_shader_program *prog,
return;
analyze_clip_cull_usage(prog, shader, ctx,
- &prog->TessEval.ClipDistanceArraySize,
- &prog->TessEval.CullDistanceArraySize);
+ &shader->Program->info.clip_distance_array_size,
+ &shader->Program->info.cull_distance_array_size);
}
@@ -734,8 +734,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, and prog->Geom.ClipDistanceArraySize and
- * prog->Geom.CullDistanceArraySize as a side effect.
+ * Also sets prog->Geom.VerticesIn, and info.clip_distance_array_sizeand
+ * info.cull_distance_array_size as a side effect.
*
* \param shader Geometry shader executable to be verified
*/
@@ -751,8 +751,8 @@ validate_geometry_shader_executable(struct gl_shader_program *prog,
prog->Geom.VerticesIn = num_vertices;
analyze_clip_cull_usage(prog, shader, ctx,
- &prog->Geom.ClipDistanceArraySize,
- &prog->Geom.CullDistanceArraySize);
+ &shader->Program->info.clip_distance_array_size,
+ &shader->Program->info.cull_distance_array_size);
}
/**
@@ -4931,14 +4931,14 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
}
if (num_shaders[MESA_SHADER_GEOMETRY] > 0) {
- prog->LastClipDistanceArraySize = prog->Geom.ClipDistanceArraySize;
- prog->LastCullDistanceArraySize = prog->Geom.CullDistanceArraySize;
+ prog->LastClipDistanceArraySize = prog->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program->info.clip_distance_array_size;
+ prog->LastCullDistanceArraySize = prog->_LinkedShaders[MESA_SHADER_GEOMETRY]->Program->info.cull_distance_array_size;
} else if (num_shaders[MESA_SHADER_TESS_EVAL] > 0) {
- prog->LastClipDistanceArraySize = prog->TessEval.ClipDistanceArraySize;
- prog->LastCullDistanceArraySize = prog->TessEval.CullDistanceArraySize;
+ prog->LastClipDistanceArraySize = prog->_LinkedShaders[MESA_SHADER_TESS_EVAL]->Program->info.clip_distance_array_size;
+ prog->LastCullDistanceArraySize = prog->_LinkedShaders[MESA_SHADER_TESS_EVAL]->Program->info.cull_distance_array_size;
} else if (num_shaders[MESA_SHADER_VERTEX] > 0) {
- prog->LastClipDistanceArraySize = prog->Vert.ClipDistanceArraySize;
- prog->LastCullDistanceArraySize = prog->Vert.CullDistanceArraySize;
+ prog->LastClipDistanceArraySize = prog->_LinkedShaders[MESA_SHADER_VERTEX]->Program->info.clip_distance_array_size;
+ prog->LastCullDistanceArraySize = prog->_LinkedShaders[MESA_SHADER_VERTEX]->Program->info.cull_distance_array_size;
} else {
prog->LastClipDistanceArraySize = 0; /* Not used */
prog->LastCullDistanceArraySize = 0; /* Not used */
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
index c1a6938..f3293a7 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -310,7 +310,7 @@ brw_vs_populate_key(struct brw_context *brw,
if (ctx->Transform.ClipPlanesEnabled != 0 &&
(ctx->API == API_OPENGL_COMPAT || ctx->API == API_OPENGLES) &&
- vp->program.ClipDistanceArraySize == 0) {
+ vp->program.info.clip_distance_array_size == 0) {
key->nr_userclip_plane_consts =
_mesa_logbase2(ctx->Transform.ClipPlanesEnabled) + 1;
}
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 8019949..409c36e 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1933,10 +1933,6 @@ struct gl_program
GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */
GLbitfield ExternalSamplersUsed; /**< Texture units used for samplerExternalOES */
- /* Vertex and geometry shaders fields */
- unsigned ClipDistanceArraySize;
- unsigned CullDistanceArraySize;
-
/* Fragement shader only fields */
GLboolean OriginUpperLeft;
GLboolean PixelCenterInteger;
@@ -2750,50 +2746,16 @@ struct gl_shader_program
enum gl_frag_depth_layout FragDepthLayout;
/**
- * Tessellation Evaluation shader state from layout qualifiers.
- */
- struct {
- /**
- * True if gl_ClipDistance is written to. Copied into
- * gl_program by _mesa_copy_linked_program_data().
- */
- GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
- 0 if not present. */
- GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or
- 0 if not present. */
- } TessEval;
-
- /**
* Geometry shader state - copied into gl_program by
* _mesa_copy_linked_program_data().
*/
struct {
GLint VerticesIn;
- /**
- * True if gl_ClipDistance is written to. Copied into
- * gl_program by _mesa_copy_linked_program_data().
- */
- GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
- 0 if not present. */
- GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or
- 0 if not present. */
bool UsesEndPrimitive;
bool UsesStreams;
} Geom;
- /** Vertex shader state */
- struct {
- /**
- * True if gl_ClipDistance is written to. Copied into gl_program
- * by _mesa_copy_linked_program_data().
- */
- GLuint ClipDistanceArraySize; /**< Size of the gl_ClipDistance array, or
- 0 if not present. */
- GLuint CullDistanceArraySize; /**< Size of the gl_CullDistance array, or
- 0 if not present. */
- } Vert;
-
/**
* Compute shader state - copied into gl_program by
* _mesa_copy_linked_program_data().
diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 7c70658..ffef486 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -2188,10 +2188,6 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src,
dst->info.separate_shader = src->SeparateShader;
switch (dst_sh->Stage) {
- case MESA_SHADER_VERTEX:
- dst->ClipDistanceArraySize = src->Vert.ClipDistanceArraySize;
- dst->CullDistanceArraySize = src->Vert.CullDistanceArraySize;
- break;
case MESA_SHADER_TESS_CTRL: {
dst->info.tcs.vertices_out = dst_sh->info.TessCtrl.VerticesOut;
break;
@@ -2201,8 +2197,6 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src,
dst->info.tes.spacing = dst_sh->info.TessEval.Spacing;
dst->info.tes.vertex_order = dst_sh->info.TessEval.VertexOrder;
dst->info.tes.point_mode = dst_sh->info.TessEval.PointMode;
- dst->ClipDistanceArraySize = src->TessEval.ClipDistanceArraySize;
- dst->CullDistanceArraySize = src->TessEval.CullDistanceArraySize;
break;
}
case MESA_SHADER_GEOMETRY: {
@@ -2211,8 +2205,6 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src,
dst->info.gs.invocations = dst_sh->info.Geom.Invocations;
dst->info.gs.input_primitive = dst_sh->info.Geom.InputType;
dst->info.gs.output_primitive = dst_sh->info.Geom.OutputType;
- dst->ClipDistanceArraySize = src->Geom.ClipDistanceArraySize;
- dst->CullDistanceArraySize = src->Geom.CullDistanceArraySize;
dst->info.gs.uses_end_primitive = src->Geom.UsesEndPrimitive;
dst->info.gs.uses_streams = src->Geom.UsesStreams;
break;
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 1e687ed..4a9733e 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -404,12 +404,12 @@ st_translate_vertex_program(struct st_context *st,
if (ureg == NULL)
return false;
- if (stvp->Base.ClipDistanceArraySize)
+ if (stvp->Base.info.clip_distance_array_size)
ureg_property(ureg, TGSI_PROPERTY_NUM_CLIPDIST_ENABLED,
- stvp->Base.ClipDistanceArraySize);
- if (stvp->Base.CullDistanceArraySize)
+ stvp->Base.info.clip_distance_array_size);
+ if (stvp->Base.info.cull_distance_array_size)
ureg_property(ureg, TGSI_PROPERTY_NUM_CULLDIST_ENABLED,
- stvp->Base.CullDistanceArraySize);
+ stvp->Base.info.cull_distance_array_size);
if (ST_DEBUG & DEBUG_MESA) {
_mesa_print_program(&stvp->Base);
@@ -1219,12 +1219,12 @@ st_translate_program_common(struct st_context *st,
memset(outputMapping, 0, sizeof(outputMapping));
memset(out_state, 0, sizeof(*out_state));
- if (prog->ClipDistanceArraySize)
+ if (prog->info.clip_distance_array_size)
ureg_property(ureg, TGSI_PROPERTY_NUM_CLIPDIST_ENABLED,
- prog->ClipDistanceArraySize);
- if (prog->CullDistanceArraySize)
+ prog->info.clip_distance_array_size);
+ if (prog->info.cull_distance_array_size)
ureg_property(ureg, TGSI_PROPERTY_NUM_CULLDIST_ENABLED,
- prog->CullDistanceArraySize);
+ prog->info.cull_distance_array_size);
/*
* Convert Mesa program inputs to TGSI input register semantics.
--
2.9.3
More information about the mesa-dev
mailing list