Export Vulkan API entry functions This enables running tests and applications directly against the driver without the use of a loader. Bug: b/148240133 Change-Id: I7c906ed72a6bd5465a50381d3e91e18383bb23e1 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28370 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt index 32a13c6..73cf966 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -2130,9 +2130,11 @@ ) if(WIN32) + set(VULKAN_API_LIBRARY_NAME "vulkan-1.dll") set_property(TARGET vk_swiftshader APPEND PROPERTY COMPILE_DEFINITIONS "VK_USE_PLATFORM_WIN32_KHR") elseif(LINUX) + set(VULKAN_API_LIBRARY_NAME "libvulkan.so.1") if(X11) set_property(TARGET vk_swiftshader APPEND PROPERTY COMPILE_DEFINITIONS "VK_USE_PLATFORM_XLIB_KHR") @@ -2142,8 +2144,11 @@ PROPERTY COMPILE_DEFINITIONS "VK_USE_PLATFORM_XCB_KHR") endif() elseif(APPLE) + set(VULKAN_API_LIBRARY_NAME "libvulkan.dylib") set_property(TARGET vk_swiftshader APPEND PROPERTY COMPILE_DEFINITIONS "VK_USE_PLATFORM_MACOS_MVK") + else() + message(FATAL_ERROR "Platform does not support Vulkan yet") endif() set_shared_library_export_map(vk_swiftshader ${SOURCE_DIR}/Vulkan) @@ -2157,10 +2162,9 @@ add_custom_command( TARGET vk_swiftshader POST_BUILD - COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:vk_swiftshader>/translator - COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> $<TARGET_FILE_DIR:vk_swiftshader>/translator/${LIB_PREFIX}Vulkan_translator${CMAKE_SHARED_LIBRARY_SUFFIX} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ + COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vk_swiftshader> ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/${VULKAN_API_LIBRARY_NAME} ) # The vk_swiftshader_icd.json manifest file will point to ICD_LIBRARY_PATH. @@ -2175,11 +2179,12 @@ endif() configure_file( "${VULKAN_DIR}/vk_swiftshader_icd.json.tmpl" - "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/vk_swiftshader_icd.json") -endif(SWIFTSHADER_BUILD_VULKAN) + "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/vk_swiftshader_icd.json" + ) +endif() ########################################################### -# Sample programs +# Sample programs and tests ########################################################### if(SWIFTSHADER_BUILD_SAMPLES)
diff --git a/src/Vulkan/vk_swiftshader.lds b/src/Vulkan/vk_swiftshader.lds index 075cda2..ae3c49f 100644 --- a/src/Vulkan/vk_swiftshader.lds +++ b/src/Vulkan/vk_swiftshader.lds
@@ -1,11 +1,220 @@ { global: - vkGetInstanceProcAddr; - # Loader-ICD interface functions vk_icdGetInstanceProcAddr; vk_icdNegotiateLoaderICDInterfaceVersion; + # Optional Vulkan API entry functions + vkCreateInstance; + vkDestroyInstance; + vkEnumeratePhysicalDevices; + vkGetPhysicalDeviceFeatures; + vkGetPhysicalDeviceFormatProperties; + vkGetPhysicalDeviceImageFormatProperties; + vkGetPhysicalDeviceProperties; + vkGetPhysicalDeviceQueueFamilyProperties; + vkGetPhysicalDeviceMemoryProperties; + vkGetInstanceProcAddr; + vkGetDeviceProcAddr; + vkCreateDevice; + vkDestroyDevice; + vkEnumerateInstanceExtensionProperties; + vkEnumerateDeviceExtensionProperties; + vkEnumerateInstanceLayerProperties; + vkEnumerateDeviceLayerProperties; + vkGetDeviceQueue; + vkQueueSubmit; + vkQueueWaitIdle; + vkDeviceWaitIdle; + vkAllocateMemory; + vkFreeMemory; + vkMapMemory; + vkUnmapMemory; + vkFlushMappedMemoryRanges; + vkInvalidateMappedMemoryRanges; + vkGetDeviceMemoryCommitment; + vkBindBufferMemory; + vkBindImageMemory; + vkGetBufferMemoryRequirements; + vkGetImageMemoryRequirements; + vkGetImageSparseMemoryRequirements; + vkGetPhysicalDeviceSparseImageFormatProperties; + vkQueueBindSparse; + vkCreateFence; + vkDestroyFence; + vkResetFences; + vkGetFenceStatus; + vkWaitForFences; + vkCreateSemaphore; + vkDestroySemaphore; + vkCreateEvent; + vkDestroyEvent; + vkGetEventStatus; + vkSetEvent; + vkResetEvent; + vkCreateQueryPool; + vkDestroyQueryPool; + vkGetQueryPoolResults; + vkCreateBuffer; + vkDestroyBuffer; + vkCreateBufferView; + vkDestroyBufferView; + vkCreateImage; + vkDestroyImage; + vkGetImageSubresourceLayout; + vkCreateImageView; + vkDestroyImageView; + vkCreateShaderModule; + vkDestroyShaderModule; + vkCreatePipelineCache; + vkDestroyPipelineCache; + vkGetPipelineCacheData; + vkMergePipelineCaches; + vkCreateGraphicsPipelines; + vkCreateComputePipelines; + vkDestroyPipeline; + vkCreatePipelineLayout; + vkDestroyPipelineLayout; + vkCreateSampler; + vkDestroySampler; + vkCreateDescriptorSetLayout; + vkDestroyDescriptorSetLayout; + vkCreateDescriptorPool; + vkDestroyDescriptorPool; + vkResetDescriptorPool; + vkAllocateDescriptorSets; + vkFreeDescriptorSets; + vkUpdateDescriptorSets; + vkCreateFramebuffer; + vkDestroyFramebuffer; + vkCreateRenderPass; + vkDestroyRenderPass; + vkGetRenderAreaGranularity; + vkCreateCommandPool; + vkDestroyCommandPool; + vkResetCommandPool; + vkAllocateCommandBuffers; + vkFreeCommandBuffers; + vkBeginCommandBuffer; + vkEndCommandBuffer; + vkResetCommandBuffer; + vkCmdBindPipeline; + vkCmdSetViewport; + vkCmdSetScissor; + vkCmdSetLineWidth; + vkCmdSetDepthBias; + vkCmdSetBlendConstants; + vkCmdSetDepthBounds; + vkCmdSetStencilCompareMask; + vkCmdSetStencilWriteMask; + vkCmdSetStencilReference; + vkCmdBindDescriptorSets; + vkCmdBindIndexBuffer; + vkCmdBindVertexBuffers; + vkCmdDraw; + vkCmdDrawIndexed; + vkCmdDrawIndirect; + vkCmdDrawIndexedIndirect; + vkCmdDispatch; + vkCmdDispatchIndirect; + vkCmdCopyBuffer; + vkCmdCopyImage; + vkCmdBlitImage; + vkCmdCopyBufferToImage; + vkCmdCopyImageToBuffer; + vkCmdUpdateBuffer; + vkCmdFillBuffer; + vkCmdClearColorImage; + vkCmdClearDepthStencilImage; + vkCmdClearAttachments; + vkCmdResolveImage; + vkCmdSetEvent; + vkCmdResetEvent; + vkCmdWaitEvents; + vkCmdPipelineBarrier; + vkCmdBeginQuery; + vkCmdEndQuery; + vkCmdResetQueryPool; + vkCmdWriteTimestamp; + vkCmdCopyQueryPoolResults; + vkCmdPushConstants; + vkCmdBeginRenderPass; + vkCmdNextSubpass; + vkCmdEndRenderPass; + vkCmdExecuteCommands; + vkEnumerateInstanceVersion; + vkBindBufferMemory2; + vkBindImageMemory2; + vkGetDeviceGroupPeerMemoryFeatures; + vkCmdSetDeviceMask; + vkCmdDispatchBase; + vkEnumeratePhysicalDeviceGroups; + vkGetImageMemoryRequirements2; + vkGetBufferMemoryRequirements2; + vkGetImageSparseMemoryRequirements2; + vkGetPhysicalDeviceFeatures2; + vkGetPhysicalDeviceProperties2; + vkGetPhysicalDeviceFormatProperties2; + vkGetPhysicalDeviceImageFormatProperties2; + vkGetPhysicalDeviceQueueFamilyProperties2; + vkGetPhysicalDeviceMemoryProperties2; + vkGetPhysicalDeviceSparseImageFormatProperties2; + vkTrimCommandPool; + vkGetDeviceQueue2; + vkCreateSamplerYcbcrConversion; + vkDestroySamplerYcbcrConversion; + vkCreateDescriptorUpdateTemplate; + vkDestroyDescriptorUpdateTemplate; + vkUpdateDescriptorSetWithTemplate; + vkGetPhysicalDeviceExternalBufferProperties; + vkGetPhysicalDeviceExternalFenceProperties; + vkGetPhysicalDeviceExternalSemaphoreProperties; + vkGetDescriptorSetLayoutSupport; + # VK_KHR_bind_memory2; + vkBindBufferMemory2KHR; + vkBindImageMemory2KHR; + # VK_KHR_descriptor_update_template; + vkCreateDescriptorUpdateTemplateKHR; + vkDestroyDescriptorUpdateTemplateKHR; + vkUpdateDescriptorSetWithTemplateKHR; + # VK_KHR_device_group; + vkGetDeviceGroupPeerMemoryFeaturesKHR; + vkCmdSetDeviceMaskKHR; + vkCmdDispatchBaseKHR; + # VK_KHR_device_group_creation; + vkEnumeratePhysicalDeviceGroupsKHR; + # VK_KHR_external_fence_capabilities; + vkGetPhysicalDeviceExternalFencePropertiesKHR; + # VK_KHR_external_memory_capabilities; + vkGetPhysicalDeviceExternalBufferPropertiesKHR; + # VK_KHR_external_semaphore_capabilities; + vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; + # VK_KHR_get_memory_requirements2; + vkGetImageMemoryRequirements2KHR; + vkGetBufferMemoryRequirements2KHR; + vkGetImageSparseMemoryRequirements2KHR; + # VK_KHR_get_physical_device_properties2; + vkGetPhysicalDeviceFeatures2KHR; + vkGetPhysicalDeviceProperties2KHR; + vkGetPhysicalDeviceFormatProperties2KHR; + vkGetPhysicalDeviceImageFormatProperties2KHR; + vkGetPhysicalDeviceQueueFamilyProperties2KHR; + vkGetPhysicalDeviceMemoryProperties2KHR; + vkGetPhysicalDeviceSparseImageFormatProperties2KHR; + # VK_KHR_maintenance1; + vkTrimCommandPoolKHR; + # VK_KHR_maintenance3; + vkGetDescriptorSetLayoutSupportKHR; + # VK_KHR_sampler_ycbcr_conversion; + vkCreateSamplerYcbcrConversionKHR; + vkDestroySamplerYcbcrConversionKHR; + # VK_KHR_surface; + vkDestroySurfaceKHR; + vkGetPhysicalDeviceSurfaceSupportKHR; + vkGetPhysicalDeviceSurfaceCapabilitiesKHR; + vkGetPhysicalDeviceSurfaceFormatsKHR; + vkGetPhysicalDeviceSurfacePresentModesKHR; + # Type-strings and type-infos required by sanitizers _ZTS*; _ZTI*;