Add Vulkan 1.2 entry points
Vulkan 1.2 added several entry points, and even if SwiftShader doesn't
support the features that introduced them, dEQP requires they be
implemented regardless.
Test: dEQP-VK.api.version_check.entry_points
Bug: b/182287812
Change-Id: I0d90532e8e1508b71abc39c723167d9586d2cb84
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/53468
Commit-Queue: Sean Risser <srisser@google.com>
Tested-by: Sean Risser <srisser@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/VkGetProcAddress.cpp b/src/Vulkan/VkGetProcAddress.cpp
index 1ed42cb..38b9f8c 100644
--- a/src/Vulkan/VkGetProcAddress.cpp
+++ b/src/Vulkan/VkGetProcAddress.cpp
@@ -319,6 +319,13 @@
MAKE_VULKAN_DEVICE_ENTRY(vkGetSemaphoreCounterValue),
MAKE_VULKAN_DEVICE_ENTRY(vkSignalSemaphore),
MAKE_VULKAN_DEVICE_ENTRY(vkWaitSemaphores),
+ // VK_KHR_buffer_device_address
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferDeviceAddress),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferOpaqueCaptureAddress),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryOpaqueCaptureAddress),
+ // VK_KHR_draw_indirect_count
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirectCount),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirectCount),
};
static const std::vector<std::pair<const char *, std::unordered_map<std::string, PFN_vkVoidFunction>>> deviceExtensionFunctionPointers = {
@@ -389,6 +396,23 @@
MAKE_VULKAN_DEVICE_ENTRY(vkSignalSemaphoreKHR),
MAKE_VULKAN_DEVICE_ENTRY(vkWaitSemaphoresKHR),
} },
+ // VK_KHR_buffer_device_address
+ {
+ VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
+ {
+
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferDeviceAddressKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetBufferOpaqueCaptureAddressKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkGetDeviceMemoryOpaqueCaptureAddressKHR),
+ } },
+ // VK_KHR_draw_indirect_count
+ {
+ VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME,
+ {
+
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndirectCountKHR),
+ MAKE_VULKAN_DEVICE_ENTRY(vkCmdDrawIndexedIndirectCountKHR),
+ } },
// VK_EXT_line_rasterization
{
VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME,
diff --git a/src/Vulkan/VkPromotedExtensions.cpp b/src/Vulkan/VkPromotedExtensions.cpp
index f150221..6ab78b7 100644
--- a/src/Vulkan/VkPromotedExtensions.cpp
+++ b/src/Vulkan/VkPromotedExtensions.cpp
@@ -231,4 +231,29 @@
{
return vkWaitSemaphores(device, pWaitInfo, timeout);
}
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
+{
+ vkCmdDrawIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
+}
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
+{
+ vkCmdDrawIndexedIndirectCount(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride);
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferDeviceAddressKHR(VkDevice device, const VkBufferDeviceAddressInfo *pInfo)
+{
+ return vkGetBufferDeviceAddress(device, pInfo);
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR(VkDevice device, const VkBufferDeviceAddressInfo *pInfo)
+{
+ return vkGetBufferOpaqueCaptureAddress(device, pInfo);
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo *pInfo)
+{
+ return vkGetDeviceMemoryOpaqueCaptureAddress(device, pInfo);
+}
}
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 6fa939d..649f30e 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -1693,6 +1693,30 @@
vk::destroy(buffer, pAllocator);
}
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo *pInfo)
+{
+ TRACE("(VkDevice device = %p, const VkBufferDeviceAddressInfo* pInfo = %p)",
+ device, pInfo);
+ UNSUPPORTED("VK_KHR_buffer_device_address");
+ return 0;
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressInfo *pInfo)
+{
+ TRACE("(VkDevice device = %p, const VkBufferDeviceAddressInfo* pInfo = %p)",
+ device, pInfo);
+ UNSUPPORTED("VK_KHR_buffer_device_address");
+ return 0;
+}
+
+VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo *pInfo)
+{
+ TRACE("(VkDevice device = %p, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo = %p)",
+ device, pInfo);
+ UNSUPPORTED("VK_KHR_buffer_device_address");
+ return 0;
+}
+
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkBufferView *pView)
{
TRACE("(VkDevice device = %p, const VkBufferViewCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkBufferView* pView = %p)",
@@ -2534,6 +2558,20 @@
vk::Cast(commandBuffer)->drawIndexedIndirect(vk::Cast(buffer), offset, drawCount, stride);
}
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
+{
+ TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, VkBuffer countBuffer = %p, VkDeviceSize countBufferOffset = %d, uint32_t maxDrawCount = %d, uint32_t stride = %d",
+ commandBuffer, static_cast<void *>(buffer), int(offset), static_cast<void *>(countBuffer), int(countBufferOffset), int(maxDrawCount), int(stride));
+ UNSUPPORTED("VK_KHR_draw_indirect_count");
+}
+
+VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
+{
+ TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, VkBuffer countBuffer = %p, VkDeviceSize countBufferOffset = %d, uint32_t maxDrawCount = %d, uint32_t stride = %d",
+ commandBuffer, static_cast<void *>(buffer), int(offset), static_cast<void *>(countBuffer), int(countBufferOffset), int(maxDrawCount), int(stride));
+ UNSUPPORTED("VK_KHR_draw_indirect_count");
+}
+
VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
{
TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t groupCountX = %d, uint32_t groupCountY = %d, uint32_t groupCountZ = %d)",
diff --git a/src/Vulkan/vk_swiftshader.def b/src/Vulkan/vk_swiftshader.def
index f0c2c9c..f2f7105 100644
--- a/src/Vulkan/vk_swiftshader.def
+++ b/src/Vulkan/vk_swiftshader.def
@@ -240,3 +240,10 @@
vkResetQueryPool
; VK_EXT_headless_surface
vkCreateHeadlessSurfaceEXT
+ ; VK_KHR_buffer_device_address
+ vkGetBufferDeviceAddress
+ vkGetBufferOpaqueCaptureAddress
+ vkGetDeviceMemoryOpaqueCaptureAddress
+ ; VK_KHR_draw_indirect_count
+ vkCmdDrawIndirectCount
+ vkCmdDrawIndexedIndirectCount
diff --git a/src/Vulkan/vk_swiftshader.lds b/src/Vulkan/vk_swiftshader.lds
index 0268f98..508f786 100644
--- a/src/Vulkan/vk_swiftshader.lds
+++ b/src/Vulkan/vk_swiftshader.lds
@@ -237,6 +237,13 @@
vkGetSemaphoreCounterValueKHR;
vkSignalSemaphoreKHR;
vkWaitSemaphoresKHR;
+ # VK_KHR_buffer_device_address
+ vkGetBufferDeviceAddress;
+ vkGetBufferOpaqueCaptureAddress;
+ vkGetDeviceMemoryOpaqueCaptureAddress;
+ # VK_KHR_draw_indirect_count
+ vkCmdDrawIndirectCount;
+ vkCmdDrawIndexedIndirectCount;
# Android HAL module info object
HMI;