VulkanUnitTests: Align the buffers to 0x100 for the compute tests

While not necessary for swiftshader, this is needed to compare against certain system vulkan drivers.

Bug: b/128527271
Change-Id: I64c9e39659d565a0369c2989a324e4c09dbf7c02
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/27773
Presubmit-Ready: Ben Clayton <headlessclayton@gmail.com>
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/tests/VulkanUnitTests/unittests.cpp b/tests/VulkanUnitTests/unittests.cpp
index e89b435..faa396a 100644
--- a/tests/VulkanUnitTests/unittests.cpp
+++ b/tests/VulkanUnitTests/unittests.cpp
@@ -26,6 +26,14 @@
 #include <sstream>

 #include <cstring>

 

+namespace

+{

+    size_t alignUp(size_t val, size_t alignment)

+    {

+        return alignment * ((val + alignment - 1) / alignment);

+    }

+} // anonymous namespace

+

 class SwiftShaderVulkanTest : public testing::Test

 {

 };

@@ -206,22 +214,28 @@
 

     // struct Buffers

     // {

+    //     uint32_t pad0[63];

     //     uint32_t magic0;

-    //     uint32_t in[NUM_ELEMENTS];

+    //     uint32_t in[NUM_ELEMENTS]; // Aligned to 0x100

     //     uint32_t magic1;

-    //     uint32_t out[NUM_ELEMENTS];

+    //     uint32_t pad1[N];

     //     uint32_t magic2;

+    //     uint32_t out[NUM_ELEMENTS]; // Aligned to 0x100

+    //     uint32_t magic3;

     // };

     static constexpr uint32_t magic0 = 0x01234567;

     static constexpr uint32_t magic1 = 0x89abcdef;

     static constexpr uint32_t magic2 = 0xfedcba99;

+    static constexpr uint32_t magic3 = 0x87654321;

     size_t numElements = GetParam().numElements;

-    size_t magic0Offset = 0;

+    size_t alignElements = 0x100 / sizeof(uint32_t);

+    size_t magic0Offset = alignElements - 1;

     size_t inOffset = 1 + magic0Offset;

     size_t magic1Offset = numElements + inOffset;

-    size_t outOffset = 1 + magic1Offset;

-    size_t magic2Offset = numElements + outOffset;

-    size_t buffersTotalElements = 1 + magic2Offset;

+    size_t magic2Offset = alignUp(magic1Offset+1, alignElements) - 1;

+    size_t outOffset = 1 + magic2Offset;

+    size_t magic3Offset = numElements + outOffset;

+    size_t buffersTotalElements = alignUp(1 + magic3Offset, alignElements);

     size_t buffersSize = sizeof(uint32_t) * buffersTotalElements;

 

     VkDeviceMemory memory;

@@ -235,6 +249,7 @@
     buffers[magic0Offset] = magic0;

     buffers[magic1Offset] = magic1;

     buffers[magic2Offset] = magic2;

+    buffers[magic3Offset] = magic3;

 

     for(size_t i = 0; i < numElements; i++)

     {

@@ -338,6 +353,7 @@
     EXPECT_EQ(buffers[magic0Offset], magic0);

     EXPECT_EQ(buffers[magic1Offset], magic1);

     EXPECT_EQ(buffers[magic2Offset], magic2);

+    EXPECT_EQ(buffers[magic3Offset], magic3);

 

     device->UnmapMemory(memory);

     buffers = nullptr;