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*;