mesa/glsl: set {clip,cull}_distance_array_size directly in gl_program
authorTimothy Arceri <timothy.arceri@collabora.com>
Sun, 20 Nov 2016 12:05:42 +0000 (23:05 +1100)
committerTimothy Arceri <timothy.arceri@collabora.com>
Mon, 23 Jan 2017 03:48:04 +0000 (14:48 +1100)
There are some line wrapping violations here but those lines will get
deleted in the following patch.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/compiler/glsl/glsl_to_nir.cpp
src/compiler/glsl/linker.cpp
src/mesa/drivers/dri/i965/brw_vs.c
src/mesa/main/mtypes.h
src/mesa/main/shaderapi.c
src/mesa/state_tracker/st_program.c

index faf621001206d1d3f729a3a8f54d566c7a813199..fde6a018750166a45aaf2a343795c2d2366d26e9 100644 (file)
@@ -169,8 +169,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;
 
index 846f77f4c7d447efacddff324b743ebf0bd740d4..261ac2365516497f7c226b4843f63f3418925ecd 100644 (file)
@@ -634,8 +634,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
  */
@@ -690,8 +690,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
@@ -703,8 +703,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);
 }
 
 
@@ -735,8 +735,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
  */
@@ -752,8 +752,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);
 }
 
 /**
@@ -4776,14 +4776,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 */
index 3bcd7c67ee6e313c595a032943d66784ec2662f9..a8225801858e4a83c6d788915376817399fed48b 100644 (file)
@@ -294,7 +294,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;
    }
index e8eddce0603794fef41f61e391b746b2010b38e0..274dbd534b46c77165cf73bf8f780f25a549a524 100644 (file)
@@ -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;
@@ -2747,20 +2743,6 @@ struct gl_shader_program
    /** Post-link gl_FragDepth layout for ARB_conservative_depth. */
    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().
@@ -2768,30 +2750,10 @@ struct gl_shader_program
    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().
index 8ad4e36a3092f119491382ff283c3a9c85caeb8f..889ac0fad86a284ca067f642e50e3a6108a7329b 100644 (file)
@@ -2202,17 +2202,11 @@ _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_EVAL: {
       dst->info.tess.primitive_mode = dst_sh->info.TessEval.PrimitiveMode;
       dst->info.tess.spacing = dst_sh->info.TessEval.Spacing;
       dst->info.tess.ccw = dst_sh->info.TessEval.VertexOrder == GL_CCW;
       dst->info.tess.point_mode = dst_sh->info.TessEval.PointMode;
-      dst->ClipDistanceArraySize = src->TessEval.ClipDistanceArraySize;
-      dst->CullDistanceArraySize = src->TessEval.CullDistanceArraySize;
       break;
    }
    case MESA_SHADER_GEOMETRY: {
@@ -2221,8 +2215,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;
index fb0a138c245c7b49de41ea87cc760ab556fe412b..94204d7bd32dfbceaf626f6fe7e6e84dd7dc8078 100644 (file)
@@ -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.