summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Rowley <[email protected]>2016-08-02 15:07:24 -0600
committerTim Rowley <[email protected]>2016-08-10 11:07:47 -0500
commit6624e01114c6d15ed48813f0cec97940885aca45 (patch)
tree502b3e651d0efb146322d9d7c8bd46d9a28ea77a
parent7cf187d08ae6a64c959de1cdf9004f5fb2fd097a (diff)
swr: [rasterizer core] update trivial accept test conditions
enable/disable raster tile trivial accept test based on scissor enable trait. Can be optimized further. Signed-off-by: Tim Rowley <[email protected]>
-rw-r--r--src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp b/src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp
index 88a483fd185..768b58a1d97 100644
--- a/src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp
@@ -729,7 +729,7 @@ INLINE bool TrivialRejectTest<NoEdgesValidT>(const int, const int, const int)
/// @brief Primary function template for TrivialAcceptTest. Always returns
/// false, since it will only be called for degenerate tris, and as such
/// will never cover the entire raster tile
-template <typename ValidEdgeMaskT>
+template <typename ScissorEnableT>
INLINE bool TrivialAcceptTest(const int, const int, const int)
{
return false;
@@ -739,7 +739,7 @@ INLINE bool TrivialAcceptTest(const int, const int, const int)
/// @brief AllEdgesValidT specialization for TrivialAcceptTest. Test all
/// edge masks for a fully covered raster tile
template <>
-INLINE bool TrivialAcceptTest<AllEdgesValidT>(const int mask0, const int mask1, const int mask2)
+INLINE bool TrivialAcceptTest<std::false_type>(const int mask0, const int mask1, const int mask2)
{
return ((mask0 & mask1 & mask2) == 0xf);
};
@@ -1166,7 +1166,10 @@ void RasterizeTriangle(DRAW_CONTEXT* pDC, uint32_t workerId, uint32_t macroTile,
UpdateEdgeMasksInnerConservative<RT, typename RT::ValidEdgeMaskT, typename RT::InputCoverageT>
(vEdgeTileBbox, vEdgeFix16, vAi, vBi, mask0, mask1, mask2);
- if (TrivialAcceptTest<typename RT::ValidEdgeMaskT>(mask0, mask1, mask2))
+ // @todo Make this a bit smarter to allow use of trivial accept when:
+ // 1) scissor/vp intersection rect is raster tile aligned
+ // 2) raster tile is entirely within scissor/vp intersection rect
+ if (TrivialAcceptTest<typename RT::RasterizeScissorEdgesT>(mask0, mask1, mask2))
{
// trivial accept, all 4 corners of all 3 edges are negative
// i.e. raster tile completely inside triangle