[Mesa-dev] [PATCH 7/8] swr/rast: Remove use of C++14 template variable
Tim Rowley
timothy.o.rowley at intel.com
Tue Sep 5 18:57:33 UTC 2017
SWR rasterizer must remain C++11 compliant.
---
src/gallium/drivers/swr/rasterizer/core/binner.cpp | 6 +++---
src/gallium/drivers/swr/rasterizer/core/binner.h | 14 +++++++++++---
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/gallium/drivers/swr/rasterizer/core/binner.cpp b/src/gallium/drivers/swr/rasterizer/core/binner.cpp
index 832c47d..01c2f8f 100644
--- a/src/gallium/drivers/swr/rasterizer/core/binner.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/binner.cpp
@@ -502,7 +502,7 @@ void SIMDCALL BinTrianglesImpl(
}
// Adjust for pixel center location
- typename SIMD_T::Float offset = g_pixelOffsets<SIMD_T>[rastState.pixelLocation];
+ typename SIMD_T::Float offset = SwrPixelOffsets<SIMD_T>::GetOffset(rastState.pixelLocation);
tri[0].x = SIMD_T::add_ps(tri[0].x, offset);
tri[0].y = SIMD_T::add_ps(tri[0].y, offset);
@@ -1332,7 +1332,7 @@ void BinPointsImpl(
}
}
- typename SIMD_T::Float offset = g_pixelOffsets<SIMD_T>[rastState.pixelLocation];
+ typename SIMD_T::Float offset = SwrPixelOffsets<SIMD_T>::GetOffset(rastState.pixelLocation);
prim[0].x = SIMD_T::add_ps(prim[0].x, offset);
prim[0].y = SIMD_T::add_ps(prim[0].y, offset);
@@ -1666,7 +1666,7 @@ void SIMDCALL BinLinesImpl(
}
// adjust for pixel center location
- typename SIMD_T::Float offset = g_pixelOffsets<SIMD_T>[rastState.pixelLocation];
+ typename SIMD_T::Float offset = SwrPixelOffsets<SIMD_T>::GetOffset(rastState.pixelLocation);
prim[0].x = SIMD_T::add_ps(prim[0].x, offset);
prim[0].y = SIMD_T::add_ps(prim[0].y, offset);
diff --git a/src/gallium/drivers/swr/rasterizer/core/binner.h b/src/gallium/drivers/swr/rasterizer/core/binner.h
index e842aa6..97e113f 100644
--- a/src/gallium/drivers/swr/rasterizer/core/binner.h
+++ b/src/gallium/drivers/swr/rasterizer/core/binner.h
@@ -31,11 +31,19 @@
//////////////////////////////////////////////////////////////////////////
/// @brief Offsets added to post-viewport vertex positions based on
/// raster state.
+///
+/// Can't use templated variable because we must stick with C++11 features.
+/// Template variables were introduced with C++14
template <typename SIMD_T>
-static const typename SIMD_T::Float g_pixelOffsets[SWR_PIXEL_LOCATION_UL + 1] =
+struct SwrPixelOffsets
{
- SIMD_T::set1_ps(0.0f), // SWR_PIXEL_LOCATION_CENTER
- SIMD_T::set1_ps(0.5f), // SWR_PIXEL_LOCATION_UL
+public:
+ INLINE static typename SIMD_T::Float GetOffset(uint32_t loc)
+ {
+ SWR_ASSERT(loc <= 1);
+
+ return SIMD_T::set1_ps(loc ? 0.5f : 0.0f);
+ }
};
//////////////////////////////////////////////////////////////////////////
--
2.7.4
More information about the mesa-dev
mailing list