aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Kańtoch <marcin.kantoch@amd.com>2020-09-15 13:35:35 +0200
committerMarcin Kańtoch <marcin.kantoch@amd.com>2020-09-15 14:22:35 +0200
commit3186d2f5e74588fa139ba646be58383a801c8c3c (patch)
tree870db08b6d4ab7e963973b09151cd9b2651dc3ec
parent9112bee66eabd421a0a91c3138d12bd8ce6eb7a7 (diff)
downloaddeqp-3186d2f5e74588fa139ba646be58383a801c8c3c.tar.gz
Coverage not correct for pixels on shared edges
Added coverage check for the second "friend" triangle. Components: Vulkan VK-GL-CTS Issue: 2580 Affects: dEQP-VK.rasterization.* Change-Id: If30814ed81fb9b91ace4655c0ba50dfbcff7b37b
-rw-r--r--framework/common/tcuRasterizationVerifier.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/framework/common/tcuRasterizationVerifier.cpp b/framework/common/tcuRasterizationVerifier.cpp
index b39153219..ab734c780 100644
--- a/framework/common/tcuRasterizationVerifier.cpp
+++ b/framework/common/tcuRasterizationVerifier.cpp
@@ -2344,7 +2344,18 @@ bool verifyTriangleGroupRasterization (const tcu::Surface& surface, const Triang
bool friendFound = false;
for (int friendTriNdx = 0; friendTriNdx < (int)scene.triangles.size(); ++friendTriNdx)
{
- if (friendTriNdx != triNdx && pixelOnlyOnASharedEdge(tcu::IVec2(x, y), scene.triangles[friendTriNdx], viewportSize))
+ if (friendTriNdx == triNdx)
+ continue;
+
+ const CoverageType friendCoverage = calculateTriangleCoverage(scene.triangles[friendTriNdx].positions[0],
+ scene.triangles[friendTriNdx].positions[1],
+ scene.triangles[friendTriNdx].positions[2],
+ tcu::IVec2(x, y),
+ viewportSize,
+ subPixelBits,
+ multisampled);
+
+ if (friendCoverage != COVERAGE_NONE && pixelOnlyOnASharedEdge(tcu::IVec2(x, y), scene.triangles[friendTriNdx], viewportSize))
{
friendFound = true;
break;