OSDN Git Service

Export Vulkan API entry functions.
authorNicolas Capens <capn@google.com>
Tue, 13 Nov 2018 18:40:29 +0000 (13:40 -0500)
committerNicolas Capens <nicolascapens@google.com>
Wed, 14 Nov 2018 15:38:59 +0000 (15:38 +0000)
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>
src/Vulkan/swiftshader_icd.def
tests/GLESUnitTests/unittests.cpp
tests/VulkanUnitTests/VulkanUnitTests.vcxproj
tests/VulkanUnitTests/unittests.cpp

index 2b4f9c7..86ab4ce 100644 (file)
@@ -1,3 +1,209 @@
-LIBRARY vk_swiftshader.dll
-EXPORTS
-       vk_icdGetInstanceProcAddr
+LIBRARY vk_swiftshader\r
+EXPORTS\r
+       ; Mandatory ICD entry function\r
+       vk_icdGetInstanceProcAddr\r
+\r
+       ; Optional Vulkan API entry functions\r
+       vkCreateInstance\r
+       vkDestroyInstance\r
+       vkEnumeratePhysicalDevices\r
+       vkGetPhysicalDeviceFeatures\r
+       vkGetPhysicalDeviceFormatProperties\r
+       vkGetPhysicalDeviceImageFormatProperties\r
+       vkGetPhysicalDeviceProperties\r
+       vkGetPhysicalDeviceQueueFamilyProperties\r
+       vkGetPhysicalDeviceMemoryProperties\r
+       vkGetInstanceProcAddr\r
+       vkGetDeviceProcAddr\r
+       vkCreateDevice\r
+       vkDestroyDevice\r
+       vkEnumerateInstanceExtensionProperties\r
+       vkEnumerateDeviceExtensionProperties\r
+       vkEnumerateInstanceLayerProperties\r
+       vkEnumerateDeviceLayerProperties\r
+       vkGetDeviceQueue\r
+       vkQueueSubmit\r
+       vkQueueWaitIdle\r
+       vkDeviceWaitIdle\r
+       vkAllocateMemory\r
+       vkFreeMemory\r
+       vkMapMemory\r
+       vkUnmapMemory\r
+       vkFlushMappedMemoryRanges\r
+       vkInvalidateMappedMemoryRanges\r
+       vkGetDeviceMemoryCommitment\r
+       vkBindBufferMemory\r
+       vkBindImageMemory\r
+       vkGetBufferMemoryRequirements\r
+       vkGetImageMemoryRequirements\r
+       vkGetImageSparseMemoryRequirements\r
+       vkGetPhysicalDeviceSparseImageFormatProperties\r
+       vkQueueBindSparse\r
+       vkCreateFence\r
+       vkDestroyFence\r
+       vkResetFences\r
+       vkGetFenceStatus\r
+       vkWaitForFences\r
+       vkCreateSemaphore\r
+       vkDestroySemaphore\r
+       vkCreateEvent\r
+       vkDestroyEvent\r
+       vkGetEventStatus\r
+       vkSetEvent\r
+       vkResetEvent\r
+       vkCreateQueryPool\r
+       vkDestroyQueryPool\r
+       vkGetQueryPoolResults\r
+       vkCreateBuffer\r
+       vkDestroyBuffer\r
+       vkCreateBufferView\r
+       vkDestroyBufferView\r
+       vkCreateImage\r
+       vkDestroyImage\r
+       vkGetImageSubresourceLayout\r
+       vkCreateImageView\r
+       vkDestroyImageView\r
+       vkCreateShaderModule\r
+       vkDestroyShaderModule\r
+       vkCreatePipelineCache\r
+       vkDestroyPipelineCache\r
+       vkGetPipelineCacheData\r
+       vkMergePipelineCaches\r
+       vkCreateGraphicsPipelines\r
+       vkCreateComputePipelines\r
+       vkDestroyPipeline\r
+       vkCreatePipelineLayout\r
+       vkDestroyPipelineLayout\r
+       vkCreateSampler\r
+       vkDestroySampler\r
+       vkCreateDescriptorSetLayout\r
+       vkDestroyDescriptorSetLayout\r
+       vkCreateDescriptorPool\r
+       vkDestroyDescriptorPool\r
+       vkResetDescriptorPool\r
+       vkAllocateDescriptorSets\r
+       vkFreeDescriptorSets\r
+       vkUpdateDescriptorSets\r
+       vkCreateFramebuffer\r
+       vkDestroyFramebuffer\r
+       vkCreateRenderPass\r
+       vkDestroyRenderPass\r
+       vkGetRenderAreaGranularity\r
+       vkCreateCommandPool\r
+       vkDestroyCommandPool\r
+       vkResetCommandPool\r
+       vkAllocateCommandBuffers\r
+       vkFreeCommandBuffers\r
+       vkBeginCommandBuffer\r
+       vkEndCommandBuffer\r
+       vkResetCommandBuffer\r
+       vkCmdBindPipeline\r
+       vkCmdSetViewport\r
+       vkCmdSetScissor\r
+       vkCmdSetLineWidth\r
+       vkCmdSetDepthBias\r
+       vkCmdSetBlendConstants\r
+       vkCmdSetDepthBounds\r
+       vkCmdSetStencilCompareMask\r
+       vkCmdSetStencilWriteMask\r
+       vkCmdSetStencilReference\r
+       vkCmdBindDescriptorSets\r
+       vkCmdBindIndexBuffer\r
+       vkCmdBindVertexBuffers\r
+       vkCmdDraw\r
+       vkCmdDrawIndexed\r
+       vkCmdDrawIndirect\r
+       vkCmdDrawIndexedIndirect\r
+       vkCmdDispatch\r
+       vkCmdDispatchIndirect\r
+       vkCmdCopyBuffer\r
+       vkCmdCopyImage\r
+       vkCmdBlitImage\r
+       vkCmdCopyBufferToImage\r
+       vkCmdCopyImageToBuffer\r
+       vkCmdUpdateBuffer\r
+       vkCmdFillBuffer\r
+       vkCmdClearColorImage\r
+       vkCmdClearDepthStencilImage\r
+       vkCmdClearAttachments\r
+       vkCmdResolveImage\r
+       vkCmdSetEvent\r
+       vkCmdResetEvent\r
+       vkCmdWaitEvents\r
+       vkCmdPipelineBarrier\r
+       vkCmdBeginQuery\r
+       vkCmdEndQuery\r
+       vkCmdResetQueryPool\r
+       vkCmdWriteTimestamp\r
+       vkCmdCopyQueryPoolResults\r
+       vkCmdPushConstants\r
+       vkCmdBeginRenderPass\r
+       vkCmdNextSubpass\r
+       vkCmdEndRenderPass\r
+       vkCmdExecuteCommands\r
+       vkEnumerateInstanceVersion\r
+       vkBindBufferMemory2\r
+       vkBindImageMemory2\r
+       vkGetDeviceGroupPeerMemoryFeatures\r
+       vkCmdSetDeviceMask\r
+       vkCmdDispatchBase\r
+       vkEnumeratePhysicalDeviceGroups\r
+       vkGetImageMemoryRequirements2\r
+       vkGetBufferMemoryRequirements2\r
+       vkGetImageSparseMemoryRequirements2\r
+       vkGetPhysicalDeviceFeatures2\r
+       vkGetPhysicalDeviceProperties2\r
+       vkGetPhysicalDeviceFormatProperties2\r
+       vkGetPhysicalDeviceImageFormatProperties2\r
+       vkGetPhysicalDeviceQueueFamilyProperties2\r
+       vkGetPhysicalDeviceMemoryProperties2\r
+       vkGetPhysicalDeviceSparseImageFormatProperties2\r
+       vkTrimCommandPool\r
+       vkGetDeviceQueue2\r
+       vkCreateSamplerYcbcrConversion\r
+       vkDestroySamplerYcbcrConversion\r
+       vkCreateDescriptorUpdateTemplate\r
+       vkDestroyDescriptorUpdateTemplate\r
+       vkUpdateDescriptorSetWithTemplate\r
+       vkGetPhysicalDeviceExternalBufferProperties\r
+       vkGetPhysicalDeviceExternalFenceProperties\r
+       vkGetPhysicalDeviceExternalSemaphoreProperties\r
+       vkGetDescriptorSetLayoutSupport\r
+       ; VK_KHR_bind_memory2\r
+       vkBindBufferMemory2KHR\r
+       vkBindImageMemory2KHR\r
+       ; VK_KHR_descriptor_update_template\r
+       vkCreateDescriptorUpdateTemplateKHR\r
+       vkDestroyDescriptorUpdateTemplateKHR\r
+       vkUpdateDescriptorSetWithTemplateKHR\r
+       ; VK_KHR_device_group\r
+       vkGetDeviceGroupPeerMemoryFeaturesKHR\r
+       vkCmdSetDeviceMaskKHR\r
+       vkCmdDispatchBaseKHR\r
+       ; VK_KHR_device_group_creation\r
+       vkEnumeratePhysicalDeviceGroupsKHR\r
+       ; VK_KHR_external_fence_capabilities\r
+       vkGetPhysicalDeviceExternalFencePropertiesKHR\r
+       ; VK_KHR_external_memory_capabilities\r
+       vkGetPhysicalDeviceExternalBufferPropertiesKHR\r
+       ; VK_KHR_external_semaphore_capabilities\r
+       vkGetPhysicalDeviceExternalSemaphorePropertiesKHR\r
+       ; VK_KHR_get_memory_requirements2\r
+       vkGetImageMemoryRequirements2KHR\r
+       vkGetBufferMemoryRequirements2KHR\r
+       vkGetImageSparseMemoryRequirements2KHR\r
+       ; VK_KHR_get_physical_device_properties2\r
+       vkGetPhysicalDeviceFeatures2KHR\r
+       vkGetPhysicalDeviceProperties2KHR\r
+       vkGetPhysicalDeviceFormatProperties2KHR\r
+       vkGetPhysicalDeviceImageFormatProperties2KHR\r
+       vkGetPhysicalDeviceQueueFamilyProperties2KHR\r
+       vkGetPhysicalDeviceMemoryProperties2KHR\r
+       vkGetPhysicalDeviceSparseImageFormatProperties2KHR\r
+       ; VK_KHR_maintenance1\r
+       vkTrimCommandPoolKHR\r
+       ; VK_KHR_maintenance3\r
+       vkGetDescriptorSetLayoutSupportKHR\r
+       ; VK_KHR_sampler_ycbcr_conversion\r
+       vkCreateSamplerYcbcrConversionKHR\r
+       vkDestroySamplerYcbcrConversionKHR\r
index e51bf99..a1ea0b6 100644 (file)
@@ -353,22 +353,22 @@ TEST_F(SwiftShaderTest, ClearIncomplete)
 {
        Initialize(3, false);
 
-       GLfloat zero_float = 0;\r
-       GLuint renderbuffer;\r
-       glGenRenderbuffers(1, &renderbuffer);\r
-       GLuint framebuffer;\r
-       glGenFramebuffers(1, &framebuffer);\r
-\r
-       glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);\r
-       EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());\r
-       glRenderbufferStorage(GL_RENDERBUFFER, GL_R8I, 43, 27);\r
-       EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());\r
-       glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);\r
-       EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());\r
-       glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer);\r
-       EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());\r
-       glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);\r
-       EXPECT_GLENUM_EQ(GL_NO_ERROR, glGetError());\r
+       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());
 
index ff72789..7ef53e9 100644 (file)
     <ClCompile Include="unittests.cpp" />\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <ProjectReference Include="..\..\src\OpenGL\libEGL\libEGL.vcxproj">\r
-      <Project>{e746fca9-64c3-433e-85e8-9a5a67ab7ed6}</Project>\r
-    </ProjectReference>\r
-    <ProjectReference Include="..\..\src\OpenGL\libGLESv2\libGLESv2.vcxproj">\r
-      <Project>{b5871a7a-968c-42e3-a33b-981e6f448e78}</Project>\r
+    <ProjectReference Include="..\..\src\Vulkan\vulkan.vcxproj">\r
+      <Project>{e1c34b66-c942-4b9a-b8c3-9a12625650d3}</Project>\r
     </ProjectReference>\r
   </ItemGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
index cbe1fb2..cf4e8e9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2017 The SwiftShader Authors. All Rights Reserved.\r
+// Copyright 2018 The SwiftShader Authors. All Rights Reserved.\r
 //\r
 // Licensed under the Apache License, Version 2.0 (the "License");\r
 // you may not use this file except in compliance with the License.\r
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and\r
 // limitations under the License.\r
 \r
-// OpenGL ES unit tests that provide coverage for functionality not tested by\r
+// Vulkan unit tests that provide coverage for functionality not tested by\r
 // the dEQP test suite. Also used as a smoke test.\r
 \r
 #include "gtest/gtest.h"\r
@@ -39,16 +39,12 @@ protected:
 \r
                #if defined(_WIN64)\r
                        #if defined(NDEBUG)\r
-                               libVulkanName = "..\\..\\..\\vulkan\\x64\\Release\\vk_swiftshader.dll";\r
+                               libVulkanName = "../../out/Release_x64/vk_swiftshader.dll";\r
                        #else\r
-                               libVulkanName = "..\\..\\..\\vulkan\\x64\\Debug\\vk_swiftshader.dll";\r
-                       #endif\r
-               #elif defined(_WIN32)\r
-                       #if defined(NDEBUG)\r
-                               libVulkanName = "..\\..\\..\\vulkan\\Win32\\Release\\vk_swiftshader.dll";\r
-                       #else\r
-                               libVulkanName = "..\\..\\..\\vulkan\\Win32\\Debug\\vk_swiftshader.dll";\r
+                               libVulkanName = "../../out/Debug_x64/vk_swiftshader.dll";\r
                        #endif\r
+               #else\r
+                       #error Unimplemented platform\r
                #endif\r
 \r
                #if defined(_WIN32)\r
@@ -282,48 +278,36 @@ TEST_F(SwiftShaderVulkanTest, API_Check)
 \r
 TEST_F(SwiftShaderVulkanTest, Version)\r
 {\r
-       if(vk_icdGetInstanceProcAddr)\r
+       const VkInstanceCreateInfo createInfo =\r
        {\r
-               auto vkCreateInstance = (PFN_vkCreateInstance)vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkCreateInstance");\r
-               EXPECT_NE(vkCreateInstance, nullptr);\r
+               VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType\r
+               nullptr, // pNext\r
+               0,       // flags\r
+               nullptr, // pApplicationInfo\r
+               0,       // enabledLayerCount\r
+               nullptr, // ppEnabledLayerNames\r
+               0,       // enabledExtensionCount\r
+               nullptr, // ppEnabledExtensionNames\r
+       };\r
+       VkInstance instance;\r
+       VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);\r
+       EXPECT_EQ(result, VK_SUCCESS);\r
 \r
-               const VkInstanceCreateInfo createInfo = \r
-               {\r
-                               VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType\r
-                               nullptr, // pNext\r
-                               0, // flags\r
-                               nullptr, // pApplicationInfo\r
-                               0, // enabledLayerCount\r
-                               nullptr, // ppEnabledLayerNames\r
-                               0, // enabledExtensionCount\r
-                               nullptr, // ppEnabledExtensionNames\r
-               };\r
-               VkInstance instance;\r
-               VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);\r
-               EXPECT_EQ(result, VK_SUCCESS);\r
+       uint32_t pPhysicalDeviceCount = 0;\r
+       result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, nullptr);\r
+       EXPECT_EQ(result, VK_SUCCESS);\r
+       EXPECT_EQ(pPhysicalDeviceCount, 1);\r
 \r
-               auto vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumeratePhysicalDevices");\r
-               EXPECT_NE(vkEnumeratePhysicalDevices, nullptr);\r
+       VkPhysicalDevice pPhysicalDevice = VK_NULL_HANDLE;\r
+       result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, &pPhysicalDevice);\r
+       EXPECT_EQ(result, VK_SUCCESS);\r
+       EXPECT_NE(pPhysicalDevice, (VkPhysicalDevice)VK_NULL_HANDLE);\r
 \r
-               uint32_t pPhysicalDeviceCount = 0;\r
-               result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, nullptr);\r
-               EXPECT_EQ(result, VK_SUCCESS);\r
-               EXPECT_EQ(pPhysicalDeviceCount, 1);\r
+       VkPhysicalDeviceProperties physicalDeviceProperties;\r
+       vkGetPhysicalDeviceProperties(pPhysicalDevice, &physicalDeviceProperties);\r
+       EXPECT_EQ(physicalDeviceProperties.apiVersion, VK_API_VERSION_1_1);\r
+       EXPECT_EQ(physicalDeviceProperties.deviceID, 0xC0DE);\r
+       EXPECT_EQ(physicalDeviceProperties.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU);\r
 \r
-               VkPhysicalDevice pPhysicalDevice = VK_NULL_HANDLE;\r
-               result = vkEnumeratePhysicalDevices(instance, &pPhysicalDeviceCount, &pPhysicalDevice);\r
-               EXPECT_EQ(result, VK_SUCCESS);\r
-               EXPECT_NE(pPhysicalDevice, (VkPhysicalDevice)VK_NULL_HANDLE);\r
-\r
-               auto vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vk_icdGetInstanceProcAddr(VK_NULL_HANDLE, "vkGetPhysicalDeviceProperties");\r
-               EXPECT_NE(vkEnumeratePhysicalDevices, nullptr);\r
-\r
-               VkPhysicalDeviceProperties physicalDeviceProperties;\r
-               vkGetPhysicalDeviceProperties(pPhysicalDevice, &physicalDeviceProperties);\r
-               EXPECT_EQ(physicalDeviceProperties.apiVersion, VK_API_VERSION_1_1);\r
-               EXPECT_EQ(physicalDeviceProperties.deviceID, 0xC0DE);\r
-               EXPECT_EQ(physicalDeviceProperties.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU);\r
-\r
-               EXPECT_EQ(strncmp(physicalDeviceProperties.deviceName, "SwiftShader Device", VK_MAX_PHYSICAL_DEVICE_NAME_SIZE), 0);\r
-       }\r
+       EXPECT_EQ(strncmp(physicalDeviceProperties.deviceName, "SwiftShader Device", VK_MAX_PHYSICAL_DEVICE_NAME_SIZE), 0);\r
 }\r