From e7bd336a2791563007ff6a78db8be397f8272922 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Wed, 9 May 2018 13:14:21 -0400 Subject: [PATCH] Fix image blit mirrored comparisons The old looping would not go through any iterations for mirrored offsets. The looping has to be mirrored when the destination is mirrored, and the source texture coordinate computation adjusted accordingly. Affects: dEQP-VK.api.copy_and_blit.core.blit_image.*.mirror*.* Change-Id: I8feb1d8b90c8013b292865b0e3b20ef414b05920 Components: Vulkan --- .../modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp b/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp index 04205b4..03729ee 100644 --- a/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp +++ b/external/vulkancts/modules/vulkan/api/vktApiCopiesAndBlittingTests.cpp @@ -2029,16 +2029,18 @@ struct CompareEachPixelInEachRegion { const VkImageBlit& blit = regionIter->imageBlit; - const int dx = deSign32(blit.dstOffsets[1].x - blit.dstOffsets[0].x); - const int dy = deSign32(blit.dstOffsets[1].y - blit.dstOffsets[0].y); + const int xStart = deMin32(blit.dstOffsets[0].x, blit.dstOffsets[1].x); + const int yStart = deMin32(blit.dstOffsets[0].y, blit.dstOffsets[1].y); + const int xEnd = deMax32(blit.dstOffsets[0].x, blit.dstOffsets[1].x); + const int yEnd = deMax32(blit.dstOffsets[0].y, blit.dstOffsets[1].y); const float xScale = static_cast(blit.srcOffsets[1].x - blit.srcOffsets[0].x) / static_cast(blit.dstOffsets[1].x - blit.dstOffsets[0].x); const float yScale = static_cast(blit.srcOffsets[1].y - blit.srcOffsets[0].y) / static_cast(blit.dstOffsets[1].y - blit.dstOffsets[0].y); const float srcInvW = 1.0f / static_cast(sourceWidth); const float srcInvH = 1.0f / static_cast(sourceHeight); for (int z = 0; z < sourceDepth; z++) - for (int y = blit.dstOffsets[0].y; y < blit.dstOffsets[1].y; y += dy) - for (int x = blit.dstOffsets[0].x; x < blit.dstOffsets[1].x; x += dx) + for (int y = yStart; y < yEnd; y++) + for (int x = xStart; x < xEnd; x++) { const tcu::Vec2 srcNormCoord ( -- 2.7.4