mesa/st: Add support for GL_ARB_cull_distance (v2)
authorTobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Sun, 8 May 2016 20:44:08 +0000 (22:44 +0200)
committerDave Airlie <airlied@redhat.com>
Fri, 13 May 2016 22:28:23 +0000 (08:28 +1000)
v2: don't bother with cull dist varyings except to assert.

Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/state_tracker/st_extensions.c
src/mesa/state_tracker/st_program.c

index 746f4fcdd9e12428d629ccefb1f109801f9437f8..4b9a3bd2858b9490a82998fbea1d5cecd6ebf89f 100644 (file)
@@ -574,6 +574,7 @@ void st_init_extensions(struct pipe_screen *screen,
       { o(ARB_color_buffer_float),           PIPE_CAP_VERTEX_COLOR_UNCLAMPED           },
       { o(ARB_conditional_render_inverted),  PIPE_CAP_CONDITIONAL_RENDER_INVERTED      },
       { o(ARB_copy_image),                   PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS },
+      { o(ARB_cull_distance),                PIPE_CAP_CULL_DISTANCE                    },
       { o(ARB_depth_clamp),                  PIPE_CAP_DEPTH_CLIP_DISABLE               },
       { o(ARB_depth_texture),                PIPE_CAP_TEXTURE_SHADOW_MAP               },
       { o(ARB_derivative_control),           PIPE_CAP_TGSI_FS_FINE_DERIVATIVE          },
index 444e5aac7bdcf22965e6a924dddc40526f8f0c7f..4e37a1707c2874d1e1871b451fcc47cc4565d6c7 100644 (file)
@@ -310,6 +310,11 @@ st_translate_vertex_program(struct st_context *st,
             output_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
             output_semantic_index[slot] = 1;
             break;
+         case VARYING_SLOT_CULL_DIST0:
+         case VARYING_SLOT_CULL_DIST1:
+            /* these should have been lowered by GLSL */
+            assert(0);
+            break;
          case VARYING_SLOT_EDGE:
             assert(0);
             break;
@@ -366,6 +371,9 @@ st_translate_vertex_program(struct st_context *st,
    if (stvp->Base.Base.ClipDistanceArraySize)
       ureg_property(ureg, TGSI_PROPERTY_NUM_CLIPDIST_ENABLED,
                     stvp->Base.Base.ClipDistanceArraySize);
+   if (stvp->Base.Base.CullDistanceArraySize)
+      ureg_property(ureg, TGSI_PROPERTY_NUM_CULLDIST_ENABLED,
+                    stvp->Base.Base.CullDistanceArraySize);
 
    if (ST_DEBUG & DEBUG_MESA) {
       _mesa_print_program(&stvp->Base.Base);
@@ -627,6 +635,11 @@ st_translate_fragment_program(struct st_context *st,
             input_semantic_index[slot] = 1;
             interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
             break;
+         case VARYING_SLOT_CULL_DIST0:
+         case VARYING_SLOT_CULL_DIST1:
+            /* these should have been lowered by GLSL */
+            assert(0);
+            break;
             /* In most cases, there is nothing special about these
              * inputs, so adopt a convention to use the generic
              * semantic name and the mesa VARYING_SLOT_ number as the
@@ -1044,6 +1057,9 @@ st_translate_program_common(struct st_context *st,
    if (prog->ClipDistanceArraySize)
       ureg_property(ureg, TGSI_PROPERTY_NUM_CLIPDIST_ENABLED,
                     prog->ClipDistanceArraySize);
+   if (prog->CullDistanceArraySize)
+      ureg_property(ureg, TGSI_PROPERTY_NUM_CULLDIST_ENABLED,
+                    prog->CullDistanceArraySize);
 
    /*
     * Convert Mesa program inputs to TGSI input register semantics.
@@ -1089,6 +1105,11 @@ st_translate_program_common(struct st_context *st,
             input_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
             input_semantic_index[slot] = 1;
             break;
+         case VARYING_SLOT_CULL_DIST0:
+         case VARYING_SLOT_CULL_DIST1:
+            /* these should have been lowered by GLSL */
+            assert(0);
+            break;
          case VARYING_SLOT_PSIZ:
             input_semantic_name[slot] = TGSI_SEMANTIC_PSIZE;
             input_semantic_index[slot] = 0;
@@ -1191,6 +1212,11 @@ st_translate_program_common(struct st_context *st,
             output_semantic_name[slot] = TGSI_SEMANTIC_CLIPDIST;
             output_semantic_index[slot] = 1;
             break;
+         case VARYING_SLOT_CULL_DIST0:
+         case VARYING_SLOT_CULL_DIST1:
+            /* these should have been lowered by GLSL */
+            assert(0);
+            break;
          case VARYING_SLOT_LAYER:
             output_semantic_name[slot] = TGSI_SEMANTIC_LAYER;
             output_semantic_index[slot] = 0;