From 3e560b7c851d6b663bfdad4e10f1363404c80ad9 Mon Sep 17 00:00:00 2001 From: George Kyriazis Date: Thu, 1 Feb 2018 17:43:04 -0600 Subject: [PATCH] swr/rast: Cull prims when all verts have negative clip distances Performance optimization, and fixes some clipping issues. Reviewed-by: Bruce Cherniak --- src/gallium/drivers/swr/rasterizer/core/clip.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gallium/drivers/swr/rasterizer/core/clip.h b/src/gallium/drivers/swr/rasterizer/core/clip.h index 1d336b6aff6..519367228ea 100644 --- a/src/gallium/drivers/swr/rasterizer/core/clip.h +++ b/src/gallium/drivers/swr/rasterizer/core/clip.h @@ -417,6 +417,7 @@ public: uint32_t slot = index >> 2; uint32_t component = index & 0x3; + typename SIMD_T::Float vCullMaskElem = SIMD_T::set1_ps(-1.0f); for (uint32_t e = 0; e < NumVertsPerPrim; ++e) { typename SIMD_T::Float vClipComp; @@ -430,8 +431,11 @@ public: } typename SIMD_T::Float vClip = SIMD_T::template cmp_ps(vClipComp, vClipComp); + typename SIMD_T::Float vCull = SIMD_T::template cmp_ps(SIMD_T::setzero_ps(), vClipComp); + vCullMaskElem = SIMD_T::and_ps(vCullMaskElem, vCull); vClipCullMask = SIMD_T::or_ps(vClipCullMask, vClip); } + vClipCullMask = SIMD_T::or_ps(vClipCullMask, vCullMaskElem); } return SIMD_T::movemask_ps(vClipCullMask);