diff options
author | Tim Rowley <[email protected]> | 2016-08-02 15:07:24 -0600 |
---|---|---|
committer | Tim Rowley <[email protected]> | 2016-08-10 11:07:47 -0500 |
commit | 6624e01114c6d15ed48813f0cec97940885aca45 (patch) | |
tree | 502b3e651d0efb146322d9d7c8bd46d9a28ea77a /src/gallium | |
parent | 7cf187d08ae6a64c959de1cdf9004f5fb2fd097a (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]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/core/rasterizer.cpp | 9 |
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 |