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
diff --git a/framework/common/tcuRasterizationVerifier.cpp b/framework/common/tcuRasterizationVerifier.cpp
index b391532..ab734c7 100644
--- a/framework/common/tcuRasterizationVerifier.cpp
+++ b/framework/common/tcuRasterizationVerifier.cpp
@@ -2344,7 +2344,18 @@
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;