Adds missing coverage of buffer markers with non-zero memory offset
authorCharlie Turner <cturner@igalia.com>
Tue, 29 Nov 2022 08:05:04 +0000 (09:05 +0100)
committerPiotr Byszewski <piotr.byszewski@mobica.com>
Mon, 19 Dec 2022 10:39:53 +0000 (10:39 +0000)
Ensure that writing buffer markers to VkBuffer's backed with an
allocation at an offset works as intended.

Since SimpleAllocator was passing 0u as an offset to internal helper
classes, it seemed a logical place to expose the ability to perform a
suballocation in the backing device memory.

ExternalHostMemory was not a clean fit to the allocator interfaces, so
there the offset as been wedged in with some pointer arithmetic.

This covers an issue fixed by,

https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16698

Also included are some refactoring's to use more code from the DE
libraries, rather than duplicating in this test class.

Components: Vulkan

Co-authored-by: Amber <amber@igalia.com>
New tests:
dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.draw_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.draw_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.64_offset_24
dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.64_offset_16
dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.65536_offset_1024
dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.64_offset_24

VK-GL-CTS issue: 3721

Change-Id: I5990d2a4903f0b4091cfc6f5dc61ec52699c7bae

android/cts/main/vk-master-2022-03-01/api.txt
android/cts/main/vk-master/api.txt
external/vulkancts/framework/vulkan/vkMemUtil.cpp
external/vulkancts/framework/vulkan/vkMemUtil.hpp
external/vulkancts/modules/vulkan/api/vktApiBufferMarkerTests.cpp
external/vulkancts/mustpass/main/vk-default/api.txt

index 9350b10..9b491fe 100644 (file)
@@ -60098,6 +60098,66 @@ dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_inclu
 dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method2.size_req_acc_struct_usage_bits
 dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method2.video_usage_bits
 dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method2.size_req_video_usage_bits
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.64_offset_16
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.65536_offset_1024
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.64_offset_24
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer.basic.max_size
 dEQP-VK.api.buffer.basic.max_size_sparse
 dEQP-VK.api.buffer.invalid_buffer_features.vk_format_s8_uint
index 19f96bc..067947c 100644 (file)
@@ -224877,100 +224877,160 @@ dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_inclu
 dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method2.size_req_video_usage_bits
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer.suballocation.transfer_src.transfer_dst.uniform_texel.storage_texel.uniform.storage.index.vertex.indirect.create.zero
 dEQP-VK.api.buffer.suballocation.transfer_src.transfer_dst.uniform_texel.storage_texel.uniform.storage.index.vertex.indirect.create.binding
 dEQP-VK.api.buffer.suballocation.transfer_src.transfer_dst.uniform_texel.storage_texel.uniform.storage.index.vertex.indirect.create.binding_residency
index 93530f3..d20bcc1 100644 (file)
@@ -23,6 +23,7 @@
  *//*--------------------------------------------------------------------*/
 
 #include "vkMemUtil.hpp"
+#include "deDefs.h"
 #include "vkStrUtil.hpp"
 #include "vkQueryUtil.hpp"
 #include "vkRef.hpp"
@@ -167,7 +168,7 @@ MemoryRequirement::MemoryRequirement (deUint32 flags)
 class SimpleAllocation : public Allocation
 {
 public:
-                                                                       SimpleAllocation        (Move<VkDeviceMemory> mem, MovePtr<HostPtr> hostPtr);
+                                                                       SimpleAllocation        (Move<VkDeviceMemory> mem, MovePtr<HostPtr> hostPtr, size_t offset);
        virtual                                                 ~SimpleAllocation       (void);
 
 private:
@@ -175,8 +176,8 @@ private:
        const UniquePtr<HostPtr>                m_hostPtr;
 };
 
-SimpleAllocation::SimpleAllocation (Move<VkDeviceMemory> mem, MovePtr<HostPtr> hostPtr)
-       : Allocation    (*mem, (VkDeviceSize)0, hostPtr ? hostPtr->get() : DE_NULL)
+SimpleAllocation::SimpleAllocation (Move<VkDeviceMemory> mem, MovePtr<HostPtr> hostPtr, size_t offset)
+       : Allocation    (*mem, offset, hostPtr ? hostPtr->get() : DE_NULL)
        , m_memHolder   (mem)
        , m_hostPtr             (hostPtr)
 {
@@ -186,34 +187,40 @@ SimpleAllocation::~SimpleAllocation (void)
 {
 }
 
-SimpleAllocator::SimpleAllocator (const DeviceInterface& vk, VkDevice device, const VkPhysicalDeviceMemoryProperties& deviceMemProps)
+SimpleAllocator::SimpleAllocator (const DeviceInterface& vk, VkDevice device, const VkPhysicalDeviceMemoryProperties& deviceMemProps, size_t offset)
        : m_vk          (vk)
        , m_device      (device)
        , m_memProps(deviceMemProps)
+       , m_offset      (offset)
 {
 }
 
 MovePtr<Allocation> SimpleAllocator::allocate (const VkMemoryAllocateInfo& allocInfo, VkDeviceSize alignment)
 {
-       DE_UNREF(alignment);
-
-       Move<VkDeviceMemory>    mem             = allocateMemory(m_vk, m_device, &allocInfo);
+       // Align the offset to the requirements.
+       size_t offset = deAlignSize(m_offset, static_cast<size_t>(alignment));
+       VkMemoryAllocateInfo info = allocInfo;
+       info.allocationSize += offset;
+       Move<VkDeviceMemory>    mem             = allocateMemory(m_vk, m_device, &info);
        MovePtr<HostPtr>                hostPtr;
 
-       if (isHostVisibleMemory(m_memProps, allocInfo.memoryTypeIndex))
-               hostPtr = MovePtr<HostPtr>(new HostPtr(m_vk, m_device, *mem, 0u, allocInfo.allocationSize, 0u));
+       if (isHostVisibleMemory(m_memProps, info.memoryTypeIndex))
+               hostPtr = MovePtr<HostPtr>(new HostPtr(m_vk, m_device, *mem, offset, info.allocationSize, 0u));
 
-       return MovePtr<Allocation>(new SimpleAllocation(mem, hostPtr));
+       return MovePtr<Allocation>(new SimpleAllocation(mem, hostPtr, offset));
 }
 
 MovePtr<Allocation> SimpleAllocator::allocate (const VkMemoryRequirements& memReqs, MemoryRequirement requirement)
 {
        const deUint32                          memoryTypeNdx   = selectMatchingMemoryType(m_memProps, memReqs.memoryTypeBits, requirement);
+       // Align the offset to the requirements.
+       size_t offset = deAlignSize(m_offset, static_cast<size_t>(memReqs.alignment));
+
        VkMemoryAllocateInfo            allocInfo               =
        {
                VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, //      VkStructureType                 sType;
                DE_NULL,                                                                //      const void*                             pNext;
-               memReqs.size,                                                   //      VkDeviceSize                    allocationSize;
+               memReqs.size + offset,                                  //      VkDeviceSize                    allocationSize;
                memoryTypeNdx,                                                  //      deUint32                                memoryTypeIndex;
        };
 
@@ -240,10 +247,10 @@ MovePtr<Allocation> SimpleAllocator::allocate (const VkMemoryRequirements& memRe
        if (requirement & MemoryRequirement::HostVisible)
        {
                DE_ASSERT(isHostVisibleMemory(m_memProps, allocInfo.memoryTypeIndex));
-               hostPtr = MovePtr<HostPtr>(new HostPtr(m_vk, m_device, *mem, 0u, allocInfo.allocationSize, 0u));
+               hostPtr = MovePtr<HostPtr>(new HostPtr(m_vk, m_device, *mem, offset, allocInfo.allocationSize, 0u));
        }
 
-       return MovePtr<Allocation>(new SimpleAllocation(mem, hostPtr));
+       return MovePtr<Allocation>(new SimpleAllocation(mem, hostPtr, offset));
 }
 
 MovePtr<Allocation> allocateExtended (const InstanceInterface&         vki,
@@ -272,7 +279,7 @@ MovePtr<Allocation> allocateExtended (const InstanceInterface&              vki,
                hostPtr = MovePtr<HostPtr>(new HostPtr(vkd, device, *mem, 0u, allocInfo.allocationSize, 0u));
        }
 
-       return MovePtr<Allocation>(new SimpleAllocation(mem, hostPtr));
+       return MovePtr<Allocation>(new SimpleAllocation(mem, hostPtr, 0u));
 }
 
 de::MovePtr<Allocation> allocateDedicated (const InstanceInterface&    vki,
index 185b879..e82216c 100644 (file)
@@ -140,7 +140,7 @@ public:
 class SimpleAllocator : public Allocator
 {
 public:
-                                                                                       SimpleAllocator (const DeviceInterface& vk, VkDevice device, const VkPhysicalDeviceMemoryProperties& deviceMemProps);
+                                                                                       SimpleAllocator (const DeviceInterface& vk, VkDevice device, const VkPhysicalDeviceMemoryProperties& deviceMemProps, size_t offset = 0);
 
        de::MovePtr<Allocation>                                 allocate                (const VkMemoryAllocateInfo& allocInfo, VkDeviceSize alignment);
        de::MovePtr<Allocation>                                 allocate                (const VkMemoryRequirements& memRequirements, MemoryRequirement requirement);
@@ -149,6 +149,7 @@ private:
        const DeviceInterface&                                  m_vk;
        const VkDevice                                                  m_device;
        const VkPhysicalDeviceMemoryProperties  m_memProps;
+       size_t                                                                  m_offset;
 };
 
 de::MovePtr<Allocation>        allocateExtended                        (const InstanceInterface& vki, const DeviceInterface& vkd, const VkPhysicalDevice& physDevice, const VkDevice device, const VkMemoryRequirements& memReqs, const MemoryRequirement requirement, const void* pNext);
index 0a0b080..bf65d68 100644 (file)
@@ -37,8 +37,8 @@
 #include "vkBuilderUtil.hpp"
 #include "tcuCommandLine.hpp"
 #include "deUniquePtr.hpp"
-#include "deSharedPtr.hpp"
 #include "deRandom.hpp"
+#include "deSTLUtil.hpp"
 
 #include <vector>
 
@@ -51,21 +51,8 @@ namespace
 using namespace vk;
 using de::UniquePtr;
 using de::MovePtr;
-using de::SharedPtr;
 using namespace vkt::ExternalMemoryUtil;
 
-template<typename T>
-inline const T* dataOrNullPtr(const std::vector<T>& v)
-{
-       return (v.empty() ? DE_NULL : &v[0]);
-}
-
-template<typename T>
-inline T* dataOrNullPtr(std::vector<T>& v)
-{
-       return (v.empty() ? DE_NULL : &v[0]);
-}
-
 //! Common test data related to the device
 struct WorkingDevice
 {
@@ -102,7 +89,7 @@ bool queueFamilyMatchesTestCase(const VkQueueFamilyProperties& props, VkQueueFla
 }
 
 // We create a custom device because we don't want to always use the universal queue.
-void createDeviceWithExtension (Context& context, WorkingDevice& wd, VkQueueFlagBits testQueue, bool hostPtr)
+void createDeviceWithExtension (Context& context, WorkingDevice& wd, VkQueueFlagBits testQueue, bool hostPtr, size_t offset)
 {
        const PlatformInterface&        vkp                             = context.getPlatformInterface();
        const VkInstance                        instance                = context.getInstance();
@@ -153,24 +140,24 @@ void createDeviceWithExtension (Context& context, WorkingDevice& wd, VkQueueFlag
                0u,                                                                                                     // deUint32                                                     enabledLayerCount;
                DE_NULL,                                                                                        // const char* const*                           ppEnabledLayerNames;
                static_cast<deUint32>(cstrDeviceExtensions.size()),     // deUint32                                                     enabledExtensionCount;
-               dataOrNullPtr(cstrDeviceExtensions),                            // const char* const*                           ppEnabledExtensionNames;
+               de::dataOrNull(cstrDeviceExtensions),                           // const char* const*                           ppEnabledExtensionNames;
                &context.getDeviceFeatures(),                                           // const VkPhysicalDeviceFeatures*      pEnabledFeatures;
        };
 
        wd.logicalDevice        = createCustomDevice(useValidation, vkp, instance, instanceDriver, physicalDevice, &deviceInfo);
        wd.deviceDriver         = MovePtr<DeviceDriver>(new DeviceDriver(vkp, instance, *wd.logicalDevice));
-       wd.allocator            = MovePtr<Allocator>(new SimpleAllocator(*wd.deviceDriver, *wd.logicalDevice, getPhysicalDeviceMemoryProperties(instanceDriver, physicalDevice)));
+       wd.allocator            = MovePtr<Allocator>(new SimpleAllocator(*wd.deviceDriver, *wd.logicalDevice, getPhysicalDeviceMemoryProperties(instanceDriver, physicalDevice), offset));
        wd.queueFamilyIdx       = queueCreateInfo.queueFamilyIndex;
        wd.queue                        = getDeviceQueue(*wd.deviceDriver, *wd.logicalDevice, wd.queueFamilyIdx, 0u);
        wd.queueProps           = queueFamilyProperties[queueCreateInfo.queueFamilyIndex];
 }
 
-bool checkMarkerBuffer (const DeviceInterface& vk, VkDevice device, const MovePtr<vk::Allocation>& memory, size_t offset,
+bool checkMarkerBuffer (const DeviceInterface& vk, VkDevice device, const MovePtr<vk::Allocation>& memory,
                                                 const std::vector<deUint32>& expected)
 {
-       invalidateMappedMemoryRange(vk, device, memory->getMemory(), memory->getOffset(), VK_WHOLE_SIZE);
+       invalidateAlloc(vk, device, *memory);
 
-       const deUint32* data = reinterpret_cast<const deUint32*>(static_cast<const char*>(memory->getHostPtr()) + offset);
+       const deUint32* data = reinterpret_cast<const deUint32*>(static_cast<const char*>(memory->getHostPtr()));
 
        for (size_t i = 0; i < expected.size(); ++i)
        {
@@ -187,6 +174,7 @@ struct BaseTestParams
        VkPipelineStageFlagBits stage;          // Pipeline stage where any marker writes for this test case occur in
        deUint32                                size;           // Number of buffer markers
        bool                                    useHostPtr;     // Whether to use host pointer as backing buffer memory
+       size_t                                  offset;         // The offset of the data in the buffer
 };
 
 deUint32 chooseExternalMarkerMemoryType(const DeviceInterface&                         vkd,
@@ -207,36 +195,29 @@ deUint32 chooseExternalMarkerMemoryType(const DeviceInterface&                            vkd,
                allowedBits &= props.memoryTypeBits;
        }
 
-       deUint32 index = 0;
-
-       while ((index < VK_MAX_MEMORY_TYPES) && ((allowedBits & 0x1) == 0))
-       {
-               index++;
-               allowedBits >>= 1;
-       }
-
-       return index;
+       return deInt32BitScan((deInt32 *)&allowedBits);
 }
 
 class ExternalHostAllocation : public Allocation
 {
 public:
-       ExternalHostAllocation(Move<VkDeviceMemory> mem, void* hostPtr) : Allocation(*mem, (VkDeviceSize)0, hostPtr), m_memHolder(mem) { }
+       ExternalHostAllocation(Move<VkDeviceMemory> mem, void* hostPtr, size_t offset) : Allocation(*mem, offset, hostPtr), m_memHolder(mem) { }
 
 private:
        const Unique<VkDeviceMemory>    m_memHolder;
 };
 
 void createMarkerBufferMemory(const InstanceInterface&         vki,
-                                                        const DeviceInterface&                 vkd,
-                                                        VkPhysicalDevice                               physicalDevice,
-                                                        VkDevice                                               device,
-                                                        VkBuffer                                               buffer,
-                                                        MovePtr<Allocator>&                    allocator,
-                                                        const MemoryRequirement                allocRequirement,
-                                                        bool                                                   externalHostPtr,
-                                                        MovePtr<ExternalHostMemory>&   hostMemory,
-                                                        MovePtr<Allocation>&                   deviceMemory)
+                                                       const DeviceInterface&                  vkd,
+                                                       VkPhysicalDevice                                physicalDevice,
+                                                       VkDevice                                                device,
+                                                       VkBuffer                                                buffer,
+                                                       size_t                                                  bufferOffset,
+                                                       MovePtr<Allocator>&                             allocator,
+                                                       const MemoryRequirement                 allocRequirement,
+                                                       bool                                                    externalHostPtr,
+                                                       MovePtr<ExternalHostMemory>&    hostMemory,
+                                                       MovePtr<Allocation>&                    deviceMemory)
 {
        VkMemoryRequirements memReqs = getBufferMemoryRequirements(vkd, device, buffer);
 
@@ -249,8 +230,8 @@ void createMarkerBufferMemory(const InstanceInterface&              vki,
                const VkExternalMemoryHandleTypeFlagBits externalType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT;
 
                const VkPhysicalDeviceExternalMemoryHostPropertiesEXT hostProps = getPhysicalDeviceExternalMemoryHostProperties(vki, physicalDevice);
-
-               hostMemory = MovePtr<ExternalHostMemory>(new ExternalHostMemory(memReqs.size, hostProps.minImportedHostPointerAlignment));
+               bufferOffset = deAlignSize(bufferOffset, static_cast<size_t>(memReqs.alignment));
+               hostMemory = MovePtr<ExternalHostMemory>(new ExternalHostMemory(memReqs.size + bufferOffset, hostProps.minImportedHostPointerAlignment));
 
                const deUint32 externalMemType = chooseExternalMarkerMemoryType(vkd, device, externalType, memReqs.memoryTypeBits, hostMemory);
 
@@ -275,7 +256,9 @@ void createMarkerBufferMemory(const InstanceInterface&              vki,
                        externalMemType
                };
 
-               deviceMemory = MovePtr<Allocation>(new ExternalHostAllocation(allocateMemory(vkd, device, &info), hostMemory->data));
+               deviceMemory = MovePtr<Allocation>(new ExternalHostAllocation(allocateMemory(vkd, device, &info),
+                                                                                                                                         (((deUint8 *)hostMemory->data) + bufferOffset),
+                                                                                                                                         bufferOffset));
        }
 
        VK_CHECK(vkd.bindBufferMemory(device, buffer, deviceMemory->getMemory(), deviceMemory->getOffset()));
@@ -285,7 +268,7 @@ tcu::TestStatus bufferMarkerSequential(Context& context, BaseTestParams params)
 {
        WorkingDevice wd;
 
-       createDeviceWithExtension(context, wd, params.testQueue, params.useHostPtr);
+       createDeviceWithExtension(context, wd, params.testQueue, params.useHostPtr, params.offset);
 
        const DeviceInterface&                  vk(*wd.deviceDriver);
        const VkDevice                                  device(*wd.logicalDevice);
@@ -295,7 +278,7 @@ tcu::TestStatus bufferMarkerSequential(Context& context, BaseTestParams params)
        MovePtr<Allocation>                             markerMemory;
 
        createMarkerBufferMemory(context.getInstanceInterface(), vk, context.getPhysicalDevice(), device,
-                                                        *markerBuffer, wd.allocator, MemoryRequirement::HostVisible, params.useHostPtr, hostMemory, markerMemory);
+                                                        *markerBuffer, params.offset, wd.allocator, MemoryRequirement::HostVisible, params.useHostPtr, hostMemory, markerMemory);
 
        de::Random                                              rng(12345 ^ params.size);
        std::vector<deUint32>                   expected(params.size);
@@ -304,7 +287,7 @@ tcu::TestStatus bufferMarkerSequential(Context& context, BaseTestParams params)
                expected[i] = rng.getUint32();
 
        deMemcpy(markerMemory->getHostPtr(), &expected[0], static_cast<size_t>(markerBufferSize));
-       flushMappedMemoryRange(vk, device, markerMemory->getMemory(), markerMemory->getOffset(), VK_WHOLE_SIZE);
+       flushAlloc(vk, device, *markerMemory);
 
        const Unique<VkCommandPool>             cmdPool(createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, wd.queueFamilyIdx));
        const Unique<VkCommandBuffer>   cmdBuffer(allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
@@ -330,7 +313,7 @@ tcu::TestStatus bufferMarkerSequential(Context& context, BaseTestParams params)
 
        submitCommandsAndWait(vk, device, wd.queue, *cmdBuffer);
 
-       if (!checkMarkerBuffer(vk, device, markerMemory, 0, expected))
+       if (!checkMarkerBuffer(vk, device, markerMemory, expected))
                return tcu::TestStatus::fail("Some marker values were incorrect");
 
        return tcu::TestStatus::pass("Pass");
@@ -340,7 +323,7 @@ tcu::TestStatus bufferMarkerOverwrite(Context& context, BaseTestParams params)
 {
        WorkingDevice wd;
 
-       createDeviceWithExtension(context, wd, params.testQueue, params.useHostPtr);
+       createDeviceWithExtension(context, wd, params.testQueue, params.useHostPtr, params.offset);
 
        const DeviceInterface&                  vk(*wd.deviceDriver);
        const VkDevice                                  device(*wd.logicalDevice);
@@ -350,7 +333,7 @@ tcu::TestStatus bufferMarkerOverwrite(Context& context, BaseTestParams params)
        MovePtr<Allocation>                             markerMemory;
 
        createMarkerBufferMemory(context.getInstanceInterface(), vk, context.getPhysicalDevice(), device,
-                                                        *markerBuffer, wd.allocator, MemoryRequirement::HostVisible, params.useHostPtr, hostMemory, markerMemory);
+                                                        *markerBuffer, params.offset, wd.allocator, MemoryRequirement::HostVisible, params.useHostPtr, hostMemory, markerMemory);
 
        de::Random                                              rng(12345 ^ params.size);
        std::vector<deUint32>                   expected(params.size);
@@ -359,7 +342,8 @@ tcu::TestStatus bufferMarkerOverwrite(Context& context, BaseTestParams params)
                expected[i] = 0;
 
        deMemcpy(markerMemory->getHostPtr(), &expected[0], static_cast<size_t>(markerBufferSize));
-       flushMappedMemoryRange(vk, device, markerMemory->getMemory(), markerMemory->getOffset(), VK_WHOLE_SIZE);
+
+       flushAlloc(vk, device, *markerMemory);
 
        const Unique<VkCommandPool>             cmdPool(createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, wd.queueFamilyIdx));
        const Unique<VkCommandBuffer>   cmdBuffer(allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
@@ -389,7 +373,7 @@ tcu::TestStatus bufferMarkerOverwrite(Context& context, BaseTestParams params)
 
        submitCommandsAndWait(vk, device, wd.queue, *cmdBuffer);
 
-       if (!checkMarkerBuffer(vk, device, markerMemory, 0, expected))
+       if (!checkMarkerBuffer(vk, device, markerMemory, expected))
                return tcu::TestStatus::fail("Some marker values were incorrect");
 
        return tcu::TestStatus::pass("Pass");
@@ -453,7 +437,7 @@ tcu::TestStatus bufferMarkerMemoryDep(Context& context, MemoryDepParams params)
 {
        WorkingDevice wd;
 
-       createDeviceWithExtension(context, wd, params.base.testQueue, params.base.useHostPtr);
+       createDeviceWithExtension(context, wd, params.base.testQueue, params.base.useHostPtr, params.base.offset);
 
        VkBufferUsageFlags usageFlags = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
 
@@ -472,7 +456,7 @@ tcu::TestStatus bufferMarkerMemoryDep(Context& context, MemoryDepParams params)
        MovePtr<Allocation>                             markerMemory;
 
        createMarkerBufferMemory(context.getInstanceInterface(), vk, context.getPhysicalDevice(), device,
-               *markerBuffer, wd.allocator, MemoryRequirement::HostVisible, params.base.useHostPtr, hostMemory, markerMemory);
+               *markerBuffer, params.base.offset, wd.allocator, MemoryRequirement::HostVisible, params.base.useHostPtr, hostMemory, markerMemory);
 
        de::Random                                              rng(size ^ params.base.size);
        std::vector<deUint32>                   expected(params.base.size, 0);
@@ -762,7 +746,7 @@ tcu::TestStatus bufferMarkerMemoryDep(Context& context, MemoryDepParams params)
                        DE_NULL,                                                                                                        // const void*                                                                          pNext;
                        (VkPipelineCreateFlags)0,                                                                       // VkPipelineCreateFlags                                                        flags;
                        static_cast<deUint32>(shaderStages.size()),                                     // deUint32                                                                                     stageCount;
-                       dataOrNullPtr(shaderStages),                                                            // const VkPipelineShaderStageCreateInfo*                       pStages;
+                       de::dataOrNull(shaderStages),                                                           // const VkPipelineShaderStageCreateInfo*                       pStages;
                        &vertexInputStateInfo,                                                                          // const VkPipelineVertexInputStateCreateInfo*          pVertexInputState;
                        &pipelineInputAssemblyStateInfo,                                                        // const VkPipelineInputAssemblyStateCreateInfo*        pInputAssemblyState;
                        DE_NULL,                                                                                                        // const VkPipelineTessellationStateCreateInfo*         pTessellationState;
@@ -811,7 +795,7 @@ tcu::TestStatus bufferMarkerMemoryDep(Context& context, MemoryDepParams params)
        }
 
        deMemcpy(markerMemory->getHostPtr(), &expected[0], static_cast<size_t>(markerBufferSize));
-       flushMappedMemoryRange(vk, device, markerMemory->getMemory(), markerMemory->getOffset(), VK_WHOLE_SIZE);
+       flushAlloc(vk, device, *markerMemory);
 
        const Unique<VkCommandPool>             cmdPool(createCommandPool(vk, device, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, wd.queueFamilyIdx));
        const Unique<VkCommandBuffer>   cmdBuffer(allocateCommandBuffer(vk, device, *cmdPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY));
@@ -846,7 +830,7 @@ tcu::TestStatus bufferMarkerMemoryDep(Context& context, MemoryDepParams params)
        }
 
        deMemcpy(markerMemory->getHostPtr(), &expected[0], static_cast<size_t>(markerBufferSize));
-       flushMappedMemoryRange(vk, device, markerMemory->getMemory(), markerMemory->getOffset(), VK_WHOLE_SIZE);
+       flushAlloc(vk, device, *markerMemory);
 
        deUint32 writeStages = 0;
        deUint32 writeAccess = 0;
@@ -950,7 +934,7 @@ tcu::TestStatus bufferMarkerMemoryDep(Context& context, MemoryDepParams params)
 
        submitCommandsAndWait(vk, device, wd.queue, *cmdBuffer);
 
-       if (!checkMarkerBuffer(vk, device, markerMemory, 0, expected))
+       if (!checkMarkerBuffer(vk, device, markerMemory, expected))
                return tcu::TestStatus::fail("Some marker values were incorrect");
 
        return tcu::TestStatus::pass("Pass");
@@ -1022,6 +1006,13 @@ void checkBufferMarkerSupport (Context& context, MemoryDepParams params)
        context.requireDeviceFunctionality("VK_AMD_buffer_marker");
 }
 
+std::string getTestCaseName(const std::string base, size_t offset)
+{
+       if (offset == 0)
+               return base;
+       return base + "_offset_" + std::to_string(offset);
+}
+
 tcu::TestCaseGroup* createBufferMarkerTestsInGroup(tcu::TestContext& testCtx)
 {
        tcu::TestCaseGroup* root = (new tcu::TestCaseGroup(testCtx, "buffer_marker", "AMD_buffer_marker Tests"));
@@ -1060,17 +1051,29 @@ tcu::TestCaseGroup* createBufferMarkerTestsInGroup(tcu::TestContext& testCtx)
                                        tcu::TestCaseGroup* sequentialGroup = (new tcu::TestCaseGroup(testCtx, "sequential", "Buffer marker tests for sequentially writing"));
 
                                        base.size = 4;
+                                       base.offset = 0;
 
                                        addFunctionCase(sequentialGroup, "4", "Writes 4 sequential marker values into a buffer", checkBufferMarkerSupport, bufferMarkerSequential, base);
 
                                        base.size = 64;
+                                       base.offset = 0;
 
                                        addFunctionCase(sequentialGroup, "64", "Writes 64 sequential marker values into a buffer", checkBufferMarkerSupport, bufferMarkerSequential, base);
 
+                                       base.offset = 16;
+
+                                       addFunctionCase(sequentialGroup, getTestCaseName("64", base.offset), "Writes 64 sequential marker values into a buffer offset by 16", checkBufferMarkerSupport, bufferMarkerSequential, base);
+
                                        base.size = 65536;
+                                       base.offset = 0;
 
                                        addFunctionCase(sequentialGroup, "65536", "Writes 65536 sequential marker values into a buffer", checkBufferMarkerSupport, bufferMarkerSequential, base);
 
+                                       base.offset = 1024;
+
+                                       addFunctionCase(sequentialGroup, getTestCaseName("65536", base.offset), "Writes 65536 sequential marker values into a buffer offset by 1024", checkBufferMarkerSupport, bufferMarkerSequential, base);
+
+                                       base.offset = 0;
                                        stageGroup->addChild(sequentialGroup);
                                }
 
@@ -1088,6 +1091,11 @@ tcu::TestCaseGroup* createBufferMarkerTestsInGroup(tcu::TestContext& testCtx)
                                        base.size = 64;
 
                                        addFunctionCase(overwriteGroup, "64", "Randomly overwrites markers values to a 64-size buffer", checkBufferMarkerSupport, bufferMarkerOverwrite, base);
+                                       base.offset = 24;
+
+                                       addFunctionCase(overwriteGroup, getTestCaseName("64", base.offset), "Randomly overwrites markers values to a 64-size buffer at offset 24", checkBufferMarkerSupport, bufferMarkerOverwrite, base);
+
+                                       base.offset = 0;
 
                                        stageGroup->addChild(overwriteGroup);
                                }
@@ -1096,28 +1104,32 @@ tcu::TestCaseGroup* createBufferMarkerTestsInGroup(tcu::TestContext& testCtx)
                                        tcu::TestCaseGroup* memoryDepGroup = (new tcu::TestCaseGroup(testCtx, "memory_dep", "Buffer marker tests for memory dependencies between marker writes and other operations"));
 
                                        MemoryDepParams params;
+                                       size_t offsets[] = { 0, 24 };
                                        deMemset(&params, 0, sizeof(params));
 
-                                       params.base              = base;
-                                       params.base.size = 128;
+                                       for (size_t offsetIdx = 0; offsetIdx < de::arrayLength(offsets); offsetIdx++) {
+                                               params.base              = base;
+                                               params.base.size = 128;
+                                               params.base.offset = offsets[offsetIdx];
 
-                                       if (params.base.testQueue == VK_QUEUE_GRAPHICS_BIT)
-                                       {
-                                               params.method = MEMORY_DEP_DRAW;
+                                               if (params.base.testQueue == VK_QUEUE_GRAPHICS_BIT)
+                                               {
+                                                       params.method = MEMORY_DEP_DRAW;
 
-                                               addFunctionCaseWithPrograms(memoryDepGroup, "draw", "Test memory dependencies between marker writes and draws", checkBufferMarkerSupport, initMemoryDepPrograms, bufferMarkerMemoryDep, params);
-                                       }
+                                                       addFunctionCaseWithPrograms(memoryDepGroup, getTestCaseName("draw", params.base.offset), "Test memory dependencies between marker writes and draws", checkBufferMarkerSupport, initMemoryDepPrograms, bufferMarkerMemoryDep, params);
+                                               }
 
-                                       if (params.base.testQueue != VK_QUEUE_TRANSFER_BIT)
-                                       {
-                                               params.method = MEMORY_DEP_DISPATCH;
+                                               if (params.base.testQueue != VK_QUEUE_TRANSFER_BIT)
+                                               {
+                                                       params.method = MEMORY_DEP_DISPATCH;
 
-                                               addFunctionCaseWithPrograms(memoryDepGroup, "dispatch", "Test memory dependencies between marker writes and compute dispatches", checkBufferMarkerSupport, initMemoryDepPrograms, bufferMarkerMemoryDep, params);
-                                       }
+                                                       addFunctionCaseWithPrograms(memoryDepGroup, getTestCaseName("dispatch", params.base.offset), "Test memory dependencies between marker writes and compute dispatches", checkBufferMarkerSupport, initMemoryDepPrograms, bufferMarkerMemoryDep, params);
+                                               }
 
-                                       params.method = MEMORY_DEP_COPY;
+                                               params.method = MEMORY_DEP_COPY;
 
-                                       addFunctionCaseWithPrograms(memoryDepGroup, "buffer_copy", "Test memory dependencies between marker writes and buffer copies", checkBufferMarkerSupport, initMemoryDepPrograms, bufferMarkerMemoryDep, params);
+                                               addFunctionCaseWithPrograms(memoryDepGroup, getTestCaseName("buffer_copy", params.base.offset), "Test memory dependencies between marker writes and buffer copies", checkBufferMarkerSupport, initMemoryDepPrograms, bufferMarkerMemoryDep, params);
+                                       }
 
                                        stageGroup->addChild(memoryDepGroup);
                                }
index a1d7c7e..16c051e 100644 (file)
@@ -224876,100 +224876,160 @@ dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_inclu
 dEQP-VK.api.buffer_memory_requirements.create_sparse_binding.ext_mem_flags_included.method2.size_req_video_usage_bits
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.draw_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.graphics.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.dispatch
 dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.dispatch_offset_24
+dEQP-VK.api.buffer_marker.compute.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.external_host_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.default_mem.top_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.64_offset_16
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.65536
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.sequential.65536_offset_1024
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.1
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.4
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.64
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.overwrite.64_offset_24
 dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.memory_dep.buffer_copy
+dEQP-VK.api.buffer_marker.transfer.default_mem.bottom_of_pipe.memory_dep.buffer_copy_offset_24
 dEQP-VK.api.buffer.suballocation.transfer_src.transfer_dst.uniform_texel.storage_texel.uniform.storage.index.vertex.indirect.create.zero
 dEQP-VK.api.buffer.suballocation.transfer_src.transfer_dst.uniform_texel.storage_texel.uniform.storage.index.vertex.indirect.create.binding
 dEQP-VK.api.buffer.suballocation.transfer_src.transfer_dst.uniform_texel.storage_texel.uniform.storage.index.vertex.indirect.create.binding_residency