Zero initialize XFB counter buffer
authorMika Väinölä <mika.vainola@siru.fi>
Tue, 16 Nov 2021 12:11:34 +0000 (14:11 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 19 Nov 2021 21:58:45 +0000 (21:58 +0000)
Implementations that don't zero initialize buffers on allocation will
fail these tests when reading uninitialized counter buffers with
vkCmdBeginTransformFeedbackEXT.

Affects: dEQP-VK.rasterization.provoking_vertex.transform_feedback.*

Components: Vulkan

VK-GL-CTS issue: 3311

Change-Id: I3cd9a82aed94e55b5e37cbd287e159c2e5fc69d2

external/vulkancts/modules/vulkan/rasterization/vktRasterizationProvokingVertexTests.cpp

index 24ac6c4..67b89c5 100644 (file)
@@ -669,8 +669,11 @@ tcu::TestStatus ProvokingVertexTestInstance::iterate (void)
                VK_CHECK(vk.bindBufferMemory(device, *xfbBuffer, xfbBufferMemory->getMemory(), xfbBufferMemory->getOffset()));
 
                counterBuffer           = createBuffer(vk, device, &counterBufferInfo);
-               counterBufferMemory     = allocator.allocate(getBufferMemoryRequirements(vk, device, *counterBuffer), MemoryRequirement::Any);
+               counterBufferMemory     = allocator.allocate(getBufferMemoryRequirements(vk, device, *counterBuffer), MemoryRequirement::HostVisible);
                VK_CHECK(vk.bindBufferMemory(device, *counterBuffer, counterBufferMemory->getMemory(), counterBufferMemory->getOffset()));
+               // Make sure uninitialized values are not read when starting XFB for the first time.
+               deMemset(counterBufferMemory->getHostPtr(), 0, static_cast<size_t>(counterBufferSize));
+               flushAlloc(vk, device, *counterBufferMemory);
        }
 
        // Clear the color buffer to red and check the drawing doesn't add any