Export Vulkan API entry functions.
This enables running the unit tests without manually querying each entry
function. The compiler generates a .lib file for us which load the .dll
file and retrieves the entry functions.
Also fix project dependencies and DLL path.
Bug b/116336664
Change-Id: I4cbd80bd071a20058b034db8fb12e31f9af2e081
Reviewed-on: https://swiftshader-review.googlesource.com/c/22489
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Corentin Wallez <cwallez@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Vulkan/swiftshader_icd.def b/src/Vulkan/swiftshader_icd.def
index 2b4f9c7..86ab4ce 100644
--- a/src/Vulkan/swiftshader_icd.def
+++ b/src/Vulkan/swiftshader_icd.def
@@ -1,3 +1,209 @@
-LIBRARY vk_swiftshader.dll
-EXPORTS
- vk_icdGetInstanceProcAddr
+LIBRARY vk_swiftshader
+EXPORTS
+ ; Mandatory ICD entry function
+ vk_icdGetInstanceProcAddr
+
+ ; 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
diff --git a/tests/GLESUnitTests/unittests.cpp b/tests/GLESUnitTests/unittests.cpp
index e51bf99..a1ea0b6 100644
--- a/tests/GLESUnitTests/unittests.cpp
+++ b/tests/GLESUnitTests/unittests.cpp
@@ -353,22 +353,22 @@
{
Initialize(3, false);
- GLfloat zero_float = 0;
- GLuint renderbuffer;
- glGenRenderbuffers(1, &renderbuffer);
- GLuint framebuffer;
- glGenFramebuffers(1, &framebuffer);
-
- glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
- EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
- glRenderbufferStorage(GL_RENDERBUFFER, GL_R8I, 43, 27);
- EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
- glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
- EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
- glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);
- EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
- glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
- EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
+ GLfloat zero_float = 0;
+ GLuint renderbuffer;
+ glGenRenderbuffers(1, &renderbuffer);
+ GLuint framebuffer;
+ glGenFramebuffers(1, &framebuffer);
+
+ glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
+ EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
+ glRenderbufferStorage(GL_RENDERBUFFER, GL_R8I, 43, 27);
+ EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
+ EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
+ glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);
+ EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
+ glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
+ EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());
glClearBufferfv(GL_DEPTH, 0, &zero_float);
EXPECT_GLENUM_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, glGetError());
diff --git a/tests/VulkanUnitTests/VulkanUnitTests.vcxproj b/tests/VulkanUnitTests/VulkanUnitTests.vcxproj
index ff72789..7ef53e9 100644
--- a/tests/VulkanUnitTests/VulkanUnitTests.vcxproj
+++ b/tests/VulkanUnitTests/VulkanUnitTests.vcxproj
@@ -102,11 +102,8 @@
<ClCompile Include="unittests.cpp" />
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\..\src\OpenGL\libEGL\libEGL.vcxproj">
- <Project>{e746fca9-64c3-433e-85e8-9a5a67ab7ed6}</Project>
- </ProjectReference>
- <ProjectReference Include="..\..\src\OpenGL\libGLESv2\libGLESv2.vcxproj">
- <Project>{b5871a7a-968c-42e3-a33b-981e6f448e78}</Project>
+ <ProjectReference Include="..\..\src\Vulkan\vulkan.vcxproj">
+ <Project>{e1c34b66-c942-4b9a-b8c3-9a12625650d3}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
diff --git a/tests/VulkanUnitTests/unittests.cpp b/tests/VulkanUnitTests/unittests.cpp
index cbe1fb2..cf4e8e9 100644
--- a/tests/VulkanUnitTests/unittests.cpp
+++ b/tests/VulkanUnitTests/unittests.cpp
@@ -1,4 +1,4 @@
-// Copyright 2017 The SwiftShader Authors. All Rights Reserved.
+// Copyright 2018 The SwiftShader Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-// OpenGL ES unit tests that provide coverage for functionality not tested by
+// Vulkan unit tests that provide coverage for functionality not tested by
// the dEQP test suite. Also used as a smoke test.
#include "gtest/gtest.h"
@@ -39,16 +39,12 @@
#if defined(_WIN64)
#if defined(NDEBUG)
- libVulkanName = "..\\..\\..\\vulkan\\x64\\Release\\vk_swiftshader.dll";
+ libVulkanName = "../../out/Release_x64/vk_swiftshader.dll";
#else
- libVulkanName = "..\\..\\..\\vulkan\\x64\\Debug\\vk_swiftshader.dll";
+ libVulkanName = "../../out/Debug_x64/vk_swiftshader.dll";
#endif
- #elif defined(_WIN32)
- #if defined(NDEBUG)
- libVulkanName = "..\\..\\..\\vulkan\\Win32\\Release\\vk_swiftshader.dll";
- #else
- libVulkanName = "..\\..\\..\\vulkan\\Win32\\Debug\\vk_swiftshader.dll";
- #endif
+ #else
+ #error Unimplemented platform
#endif
#if defined(_WIN32)
@@ -282,48 +278,36 @@
TEST_F(SwiftShaderVulkanTest, Version)
{
- if(vk_icdGetInstanceProcAddr)
+ const VkInstanceCreateInfo createInfo =
{
- auto vkCreateInstance = (PFN_vkCreateInstance)vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance");
- EXPECT_NE(vkCreateInstance, nullptr);
+ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
+ nullptr, // pNext
+ 0, // flags
+ nullptr, // pApplicationInfo
+ 0, // enabledLayerCount
+ nullptr, // ppEnabledLayerNames
+ 0, // enabledExtensionCount
+ nullptr, // ppEnabledExtensionNames
+ };
+ VkInstance instance;
+ VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);
+ EXPECT_EQ(result, VK_SUCCESS);
- const VkInstanceCreateInfo createInfo =
- {
- VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
- nullptr, // pNext
- 0, // flags
- nullptr, // pApplicationInfo
- 0, // enabledLayerCount
- nullptr, // ppEnabledLayerNames
- 0, // enabledExtensionCount
- nullptr, // ppEnabledExtensionNames
- };
- VkInstance instance;
- VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);
- EXPECT_EQ(result, VK_SUCCESS);
+ uint32_t pPhysicalDeviceCount = 0;
+ result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, nullptr);
+ EXPECT_EQ(result, VK_SUCCESS);
+ EXPECT_EQ(pPhysicalDeviceCount, 1);
- auto vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumeratePhysicalDevices");
- EXPECT_NE(vkEnumeratePhysicalDevices, nullptr);
+ VkPhysicalDevice pPhysicalDevice = VK_NULL_HANDLE;
+ result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, &pPhysicalDevice);
+ EXPECT_EQ(result, VK_SUCCESS);
+ EXPECT_NE(pPhysicalDevice, (VkPhysicalDevice)VK_NULL_HANDLE);
- uint32_t pPhysicalDeviceCount = 0;
- result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, nullptr);
- EXPECT_EQ(result, VK_SUCCESS);
- EXPECT_EQ(pPhysicalDeviceCount, 1);
+ VkPhysicalDeviceProperties physicalDeviceProperties;
+ vkGetPhysicalDeviceProperties(pPhysicalDevice, &physicalDeviceProperties);
+ EXPECT_EQ(physicalDeviceProperties.apiVersion, VK_API_VERSION_1_1);
+ EXPECT_EQ(physicalDeviceProperties.deviceID, 0xC0DE);
+ EXPECT_EQ(physicalDeviceProperties.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU);
- VkPhysicalDevice pPhysicalDevice = VK_NULL_HANDLE;
- result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, &pPhysicalDevice);
- EXPECT_EQ(result, VK_SUCCESS);
- EXPECT_NE(pPhysicalDevice, (VkPhysicalDevice)VK_NULL_HANDLE);
-
- auto vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkGetPhysicalDeviceProperties");
- EXPECT_NE(vkEnumeratePhysicalDevices, nullptr);
-
- VkPhysicalDeviceProperties physicalDeviceProperties;
- vkGetPhysicalDeviceProperties(pPhysicalDevice, &physicalDeviceProperties);
- EXPECT_EQ(physicalDeviceProperties.apiVersion, VK_API_VERSION_1_1);
- EXPECT_EQ(physicalDeviceProperties.deviceID, 0xC0DE);
- EXPECT_EQ(physicalDeviceProperties.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU);
-
- EXPECT_EQ(strncmp(physicalDeviceProperties.deviceName, "SwiftShader Device", VK_MAX_PHYSICAL_DEVICE_NAME_SIZE), 0);
- }
+ EXPECT_EQ(strncmp(physicalDeviceProperties.deviceName, "SwiftShader Device", VK_MAX_PHYSICAL_DEVICE_NAME_SIZE), 0);
}