llvmpipe: remove setup fallback path
authorKeith Whitwell <keithw@vmware.com>
Mon, 18 Oct 2010 01:29:28 +0000 (18:29 -0700)
committerKeith Whitwell <keithw@vmware.com>
Mon, 18 Oct 2010 01:29:28 +0000 (18:29 -0700)
src/gallium/drivers/llvmpipe/Makefile
src/gallium/drivers/llvmpipe/SConscript
src/gallium/drivers/llvmpipe/lp_state_setup.c
src/gallium/drivers/llvmpipe/lp_state_setup_fallback.c [deleted file]

index 55b877b4ab9992075318b2bd44112b82772f2e7b..379f14b43d23d8cc85377eb9466737e4c06d3a1d 100644 (file)
@@ -38,6 +38,7 @@ C_SOURCES = \
        lp_state_clip.c \
        lp_state_derived.c \
        lp_state_fs.c \
+       lp_state_setup.c \
        lp_state_gs.c \
        lp_state_rasterizer.c \
        lp_state_sampler.c \
index 6ddce659206f99c71ddc7f2b762ba0b52f577c65..f893878daab3ef4199b9114bc31a496b24e281be 100644 (file)
@@ -71,7 +71,6 @@ llvmpipe = env.ConvenienceLibrary(
                'lp_state_derived.c',
                'lp_state_fs.c',
                'lp_state_setup.c',
-               'lp_state_setup_fallback.c',
                'lp_state_gs.c',
                'lp_state_rasterizer.c',
                'lp_state_sampler.c',
index 3261c53f516756165100ee3b8c87c06f6bbea039..ee4991bf8d2d633cafd561291dfecec4123bbafb 100644 (file)
@@ -704,17 +704,8 @@ llvmpipe_update_setup(struct llvmpipe_context *lp)
       }
 
       variant = generate_setup_variant(screen, key);
-      if (variant) {
-         insert_at_head(&lp->setup_variants_list, &variant->list_item_global);
-         lp->nr_setup_variants++;
-      }
-      else {
-        /* Keep the old path around for debugging, and also perhaps
-         * in case malloc fails during compilation.
-         */
-        variant = &lp->setup_variant;
-        variant->jit_function = lp_setup_tri_fallback;
-      }
+      insert_at_head(&lp->setup_variants_list, &variant->list_item_global);
+      lp->nr_setup_variants++;
    }
 
    lp_setup_set_setup_variant(lp->setup,
diff --git a/src/gallium/drivers/llvmpipe/lp_state_setup_fallback.c b/src/gallium/drivers/llvmpipe/lp_state_setup_fallback.c
deleted file mode 100644 (file)
index 1922efc..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/**************************************************************************
- *
- * Copyright 2010, VMware.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-/*
- * Fallback (non-llvm) path for triangle setup.  Will remove once llvm
- * is up and running.
- *
- * TODO: line/point setup.
- */
-
-#include "util/u_math.h"
-#include "util/u_memory.h"
-#include "lp_state_setup.h"
-
-
-
-#if defined(PIPE_ARCH_SSE)
-#include <emmintrin.h>
-
-struct setup_args {
-   float (*a0)[4];             /* aligned */
-   float (*dadx)[4];           /* aligned */
-   float (*dady)[4];           /* aligned */
-
-   float x0_center;
-   float y0_center;
-
-   /* turn these into an aligned float[4] */
-   float dy01_ooa;
-   float dy20_ooa;
-   float dx01_ooa;
-   float dx20_ooa;
-
-   const float (*v0)[4];       /* aligned */
-   const float (*v1)[4];       /* aligned */
-   const float (*v2)[4];       /* aligned */
-
-   boolean frontfacing;                /* remove eventually */
-};
-
-
-static void constant_coef4( struct setup_args *args,
-                           unsigned slot,
-                           const float *attr)
-{
-   *(__m128 *)args->a0[slot]   = *(__m128 *)attr;
-   *(__m128 *)args->dadx[slot] = _mm_set1_ps(0.0);
-   *(__m128 *)args->dady[slot] = _mm_set1_ps(0.0);
-}
-
-
-
-/**
- * Setup the fragment input attribute with the front-facing value.
- * \param frontface  is the triangle front facing?
- */
-static void setup_facing_coef( struct setup_args *args,
-                              unsigned slot )
-{
-   /* XXX: just pass frontface directly to the shader, don't bother
-    * treating it as an input.
-    */
-   __m128 a0 = _mm_setr_ps(args->frontfacing ? 1.0 : -1.0,
-                          0, 0, 0);
-
-   *(__m128 *)args->a0[slot]   = a0;
-   *(__m128 *)args->dadx[slot] = _mm_set1_ps(0.0);
-   *(__m128 *)args->dady[slot] = _mm_set1_ps(0.0);
-}
-
-
-
-static void calc_coef4( struct setup_args *args,
-                       unsigned slot,
-                       __m128 a0,
-                       __m128 a1,
-                       __m128 a2)
-{
-   __m128 da01          = _mm_sub_ps(a0, a1);
-   __m128 da20          = _mm_sub_ps(a2, a0);
-
-   __m128 da01_dy20_ooa = _mm_mul_ps(da01, _mm_set1_ps(args->dy20_ooa));
-   __m128 da20_dy01_ooa = _mm_mul_ps(da20, _mm_set1_ps(args->dy01_ooa));   
-   __m128 dadx          = _mm_sub_ps(da01_dy20_ooa, da20_dy01_ooa);
-
-   __m128 da01_dx20_ooa = _mm_mul_ps(da01, _mm_set1_ps(args->dx20_ooa));
-   __m128 da20_dx01_ooa = _mm_mul_ps(da20, _mm_set1_ps(args->dx01_ooa));
-   __m128 dady          = _mm_sub_ps(da20_dx01_ooa, da01_dx20_ooa);
-
-   __m128 dadx_x0       = _mm_mul_ps(dadx, _mm_set1_ps(args->x0_center));
-   __m128 dady_y0       = _mm_mul_ps(dady, _mm_set1_ps(args->y0_center));
-   __m128 attr_v0       = _mm_add_ps(dadx_x0, dady_y0);
-   __m128 attr_0        = _mm_sub_ps(a0, attr_v0);
-
-   *(__m128 *)args->a0[slot]   = attr_0;
-   *(__m128 *)args->dadx[slot] = dadx;
-   *(__m128 *)args->dady[slot] = dady;
-}
-
-
-static void linear_coef( struct setup_args *args,
-                         unsigned slot,
-                         unsigned vert_attr)
-{
-   __m128 a0 = *(const __m128 *)args->v0[vert_attr];
-   __m128 a1 = *(const __m128 *)args->v1[vert_attr];
-   __m128 a2 = *(const __m128 *)args->v2[vert_attr];
-
-   calc_coef4(args, slot, a0, a1, a2);
-}
-
-
-
-/**
- * Compute a0, dadx and dady for a perspective-corrected interpolant,
- * for a triangle.
- * We basically multiply the vertex value by 1/w before computing
- * the plane coefficients (a0, dadx, dady).
- * Later, when we compute the value at a particular fragment position we'll
- * divide the interpolated value by the interpolated W at that fragment.
- */
-static void perspective_coef( struct setup_args *args,
-                              unsigned slot,
-                             unsigned vert_attr)
-{
-   /* premultiply by 1/w  (v[0][3] is always 1/w):
-    */
-   __m128 a0 = *(const __m128 *)args->v0[vert_attr];
-   __m128 a1 = *(const __m128 *)args->v1[vert_attr];
-   __m128 a2 = *(const __m128 *)args->v2[vert_attr];
-
-   __m128 a0_oow = _mm_mul_ps(a0, _mm_set1_ps(args->v0[0][3]));
-   __m128 a1_oow = _mm_mul_ps(a1, _mm_set1_ps(args->v1[0][3]));
-   __m128 a2_oow = _mm_mul_ps(a2, _mm_set1_ps(args->v2[0][3]));
-
-   calc_coef4(args, slot, a0_oow, a1_oow, a2_oow);
-}
-
-
-
-
-
-/**
- * Compute the args-> dadx, dady, a0 values.
- *
- * Note that this was effectively a little interpreted program, where
- * the opcodes were LP_INTERP_*.  This is the program which is now
- * being code-generated in lp_state_setup.c.
- */
-void lp_setup_tri_fallback( const float (*v0)[4],
-                           const float (*v1)[4],
-                           const float (*v2)[4],
-                           boolean front_facing,
-                           float (*a0)[4],
-                           float (*dadx)[4],
-                           float (*dady)[4],
-                           const struct lp_setup_variant_key *key )
-{
-   struct setup_args args;
-   float pixel_offset = key->pixel_center_half ? 0.5 : 0.0;
-   float dx01 = v0[0][0] - v1[0][0];
-   float dy01 = v0[0][1] - v1[0][1];
-   float dx20 = v2[0][0] - v0[0][0];
-   float dy20 = v2[0][1] - v0[0][1];
-   float oneoverarea = 1.0f / (dx01 * dy20 - dx20 * dy01);
-   unsigned slot;
-
-   args.v0 = v0;
-   args.v1 = v1;
-   args.v2 = v2;
-   args.frontfacing = front_facing;
-   args.a0 = a0;
-   args.dadx = dadx;
-   args.dady = dady;
-
-   args.x0_center = v0[0][0] - pixel_offset;
-   args.y0_center = v0[0][1] - pixel_offset;
-   args.dx01_ooa  = dx01 * oneoverarea;
-   args.dx20_ooa  = dx20 * oneoverarea;
-   args.dy01_ooa  = dy01 * oneoverarea;
-   args.dy20_ooa  = dy20 * oneoverarea;
-
-   /* The internal position input is in slot zero:
-    */
-   linear_coef(&args, 0, 0);
-
-   /* setup interpolation for all the remaining attributes:
-    */
-   for (slot = 0; slot < key->num_inputs; slot++) {
-      unsigned vert_attr = key->inputs[slot].src_index;
-
-      switch (key->inputs[slot].interp) {
-      case LP_INTERP_CONSTANT:
-         if (key->flatshade_first) {
-           constant_coef4(&args, slot+1, args.v0[vert_attr]);
-         }
-         else {
-           constant_coef4(&args, slot+1, args.v2[vert_attr]);
-         }
-         break;
-
-      case LP_INTERP_LINEAR:
-        linear_coef(&args, slot+1, vert_attr);
-         break;
-
-      case LP_INTERP_PERSPECTIVE:
-        perspective_coef(&args, slot+1, vert_attr);
-         break;
-
-      case LP_INTERP_POSITION:
-         /*
-          * The generated pixel interpolators will pick up the coeffs from
-          * slot 0.
-          */
-         break;
-
-      case LP_INTERP_FACING:
-         setup_facing_coef(&args, slot+1);
-         break;
-
-      default:
-         assert(0);
-      }
-   }
-}
-
-#else
-
-void lp_setup_tri_fallback( const float (*v0)[4],
-                           const float (*v1)[4],
-                           const float (*v2)[4],
-                           boolean front_facing,
-                           float (*a0)[4],
-                           float (*dadx)[4],
-                           float (*dady)[4],
-                           const struct lp_setup_variant_key *key )
-{
-   /* this path for debugging only, don't need a non-sse version. */
-}
-
-#endif