[Piglit] [PATCH crucible] Add a test for bug 108909
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Tue Dec 4 14:46:31 UTC 2018
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
---
Makefile.am | 1 +
src/tests/bug/108909.c | 106 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 107 insertions(+)
create mode 100644 src/tests/bug/108909.c
diff --git a/Makefile.am b/Makefile.am
index b35e329..528650a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -74,6 +74,7 @@ bin_crucible_SOURCES = \
src/qonos/qonos.c \
src/qonos/qonos_pipeline.c \
src/tests/bug/104809.c \
+ src/tests/bug/108909.c \
src/tests/bench/copy-buffer.c \
src/tests/example/basic.c \
src/tests/example/images.c \
diff --git a/src/tests/bug/108909.c b/src/tests/bug/108909.c
new file mode 100644
index 0000000..1faadbf
--- /dev/null
+++ b/src/tests/bug/108909.c
@@ -0,0 +1,106 @@
+// Copyright 2018 Intel Corporation
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice (including the next
+// paragraph) shall be included in all copies or substantial portions of the
+// Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+
+#include <inttypes.h>
+#include <stdio.h>
+#include "tapi/t.h"
+#include "util/misc.h"
+
+/* This is a test for https://bugs.freedesktop.org/show_bug.cgi?id=108909
+ *
+ * Ensure ordering of operations for between 3d pipeline and command
+ * streamer on Intel HW.
+ */
+
+static void
+test(void)
+{
+ const uint64_t initialData[] = {
+ 0xdeaddeadbeef,
+ 0xdeaddeadbeef,
+ 0xdeaddeadbeef,
+ 0xdeaddeadbeef,
+ };
+ VkBuffer dataBuffer = qoCreateBuffer(t_device,
+ .size = sizeof(initialData),
+ .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
+ VkDeviceMemory dataMem = qoAllocBufferMemory(t_device, dataBuffer,
+ .properties = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
+ memcpy(qoMapMemory(t_device, dataMem, /*offset*/ 0,
+ sizeof(initialData), /*flags*/ 0),
+ initialData,
+ sizeof(initialData));
+ qoBindBufferMemory(t_device, dataBuffer, dataMem, /*offset*/ 0);
+
+ VkBuffer resultBuffer = qoCreateBuffer(t_device,
+ .size = sizeof(initialData),
+ .usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT);
+ VkDeviceMemory resultMem = qoAllocBufferMemory(t_device, resultBuffer,
+ .properties = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
+ qoBindBufferMemory(t_device, resultBuffer, resultMem, /*offset*/ 0);
+
+ VkQueryPool pool = qoCreateQueryPool(t_device,
+ .queryType = VK_QUERY_TYPE_TIMESTAMP,
+ .queryCount = ARRAY_LENGTH(initialData));
+
+
+ /* vkCmdCopyQueryPoolResults should be ordered with regard to vkCmdCopyBuffer. */
+ VkCommandBuffer cmdBuffer = qoAllocateCommandBuffer(t_device, t_cmd_pool);
+ qoBeginCommandBuffer(cmdBuffer);
+ vkCmdWriteTimestamp(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, pool, 0);
+ vkCmdWriteTimestamp(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, pool, 1);
+ vkCmdCopyBuffer(cmdBuffer, dataBuffer, resultBuffer,
+ 1, &(VkBufferCopy){ .srcOffset = 0, .dstOffset = 0, .size = sizeof(initialData) });
+ vkCmdWriteTimestamp(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, pool, 2);
+ vkCmdWriteTimestamp(cmdBuffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, pool, 3);
+ vkCmdCopyQueryPoolResults(cmdBuffer, pool, /*firstQuery*/ 0, /*queryCount*/ 4,
+ resultBuffer, /*dstBufferOffset*/ 0, sizeof(uint64_t),
+ VK_QUERY_RESULT_WAIT_BIT);
+ qoEndCommandBuffer(cmdBuffer);
+
+ qoQueueSubmit(t_queue, 1, &cmdBuffer, VK_NULL_HANDLE);
+ qoQueueWaitIdle(t_queue);
+
+ uint64_t *copiedResults = qoMapMemory(t_device, resultMem, /*offset*/ 0,
+ sizeof(initialData), /*flags*/ 0);
+
+ for (unsigned i = 0; i < ARRAY_LENGTH(initialData); i++) {
+ printf("timestamp%i = 0x%016" PRIx64 "\n",
+ i, copiedResults[i]);
+ if (copiedResults[i] == initialData[i]) {
+ printf("Got unexpected timestamp (index=%i) 0x%016" PRIx64 "\n",
+ i, copiedResults[i]);
+
+ t_fail();
+ return;
+ }
+ }
+
+ t_pass();
+}
+
+test_define {
+ .name = "bug.108909",
+ .start = test,
+ .no_image = true,
+};
--
2.20.0.rc1
More information about the Piglit
mailing list