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;