Commit c367b22b by Ben Clayton

VulkanUnitTests: Free / Destroy all Vulkan objects.

Fixes a whole lot of leak-detector warnings. Bug: b/133399620 Change-Id: I4f35150712dd2035a84c16d06ca75a4eba2c3c69 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31836Tested-by: 's avatarBen Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 3832df22
...@@ -171,6 +171,11 @@ VkResult Device::CreateStorageBuffer( ...@@ -171,6 +171,11 @@ VkResult Device::CreateStorageBuffer(
return VK_SUCCESS; return VK_SUCCESS;
} }
void Device::DestroyBuffer(VkBuffer buffer) const
{
driver->vkDestroyBuffer(device, buffer, nullptr);
}
VkResult Device::CreateShaderModule( VkResult Device::CreateShaderModule(
const std::vector<uint32_t>& spirv, VkShaderModule* out) const const std::vector<uint32_t>& spirv, VkShaderModule* out) const
{ {
...@@ -184,6 +189,11 @@ VkResult Device::CreateShaderModule( ...@@ -184,6 +189,11 @@ VkResult Device::CreateShaderModule(
return driver->vkCreateShaderModule(device, &info, 0, out); return driver->vkCreateShaderModule(device, &info, 0, out);
} }
void Device::DestroyShaderModule(VkShaderModule shaderModule) const
{
driver->vkDestroyShaderModule(device, shaderModule, nullptr);
}
VkResult Device::CreateDescriptorSetLayout( VkResult Device::CreateDescriptorSetLayout(
const std::vector<VkDescriptorSetLayoutBinding>& bindings, const std::vector<VkDescriptorSetLayoutBinding>& bindings,
VkDescriptorSetLayout* out) const VkDescriptorSetLayout* out) const
...@@ -199,6 +209,11 @@ VkResult Device::CreateDescriptorSetLayout( ...@@ -199,6 +209,11 @@ VkResult Device::CreateDescriptorSetLayout(
return driver->vkCreateDescriptorSetLayout(device, &info, 0, out); return driver->vkCreateDescriptorSetLayout(device, &info, 0, out);
} }
void Device::DestroyDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) const
{
driver->vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
}
VkResult Device::CreatePipelineLayout( VkResult Device::CreatePipelineLayout(
VkDescriptorSetLayout layout, VkPipelineLayout* out) const VkDescriptorSetLayout layout, VkPipelineLayout* out) const
{ {
...@@ -215,6 +230,11 @@ VkResult Device::CreatePipelineLayout( ...@@ -215,6 +230,11 @@ VkResult Device::CreatePipelineLayout(
return driver->vkCreatePipelineLayout(device, &info, 0, out); return driver->vkCreatePipelineLayout(device, &info, 0, out);
} }
void Device::DestroyPipelineLayout(VkPipelineLayout pipelineLayout) const
{
driver->vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
}
VkResult Device::CreateComputePipeline( VkResult Device::CreateComputePipeline(
VkShaderModule module, VkPipelineLayout pipelineLayout, VkShaderModule module, VkPipelineLayout pipelineLayout,
VkPipeline* out) const VkPipeline* out) const
...@@ -241,6 +261,11 @@ VkResult Device::CreateComputePipeline( ...@@ -241,6 +261,11 @@ VkResult Device::CreateComputePipeline(
return driver->vkCreateComputePipelines(device, 0, 1, &info, 0, out); return driver->vkCreateComputePipelines(device, 0, 1, &info, 0, out);
} }
void Device::DestroyPipeline(VkPipeline pipeline) const
{
driver->vkDestroyPipeline(device, pipeline, nullptr);
}
VkResult Device::CreateStorageBufferDescriptorPool(uint32_t descriptorCount, VkResult Device::CreateStorageBufferDescriptorPool(uint32_t descriptorCount,
VkDescriptorPool* out) const VkDescriptorPool* out) const
{ {
...@@ -261,6 +286,11 @@ VkResult Device::CreateStorageBufferDescriptorPool(uint32_t descriptorCount, ...@@ -261,6 +286,11 @@ VkResult Device::CreateStorageBufferDescriptorPool(uint32_t descriptorCount,
return driver->vkCreateDescriptorPool(device, &info, 0, out); return driver->vkCreateDescriptorPool(device, &info, 0, out);
} }
void Device::DestroyDescriptorPool(VkDescriptorPool descriptorPool) const
{
driver->vkDestroyDescriptorPool(device, descriptorPool, nullptr);
}
VkResult Device::AllocateDescriptorSet( VkResult Device::AllocateDescriptorSet(
VkDescriptorPool pool, VkDescriptorSetLayout layout, VkDescriptorPool pool, VkDescriptorSetLayout layout,
VkDescriptorSet* out) const VkDescriptorSet* out) const
...@@ -331,6 +361,11 @@ VkResult Device::AllocateMemory(size_t size, VkMemoryPropertyFlags flags, VkDevi ...@@ -331,6 +361,11 @@ VkResult Device::AllocateMemory(size_t size, VkMemoryPropertyFlags flags, VkDevi
return VK_ERROR_OUT_OF_DEVICE_MEMORY; // TODO: Change to something not made up? return VK_ERROR_OUT_OF_DEVICE_MEMORY; // TODO: Change to something not made up?
} }
void Device::FreeMemory(VkDeviceMemory memory) const
{
driver->vkFreeMemory(device, memory, nullptr);
}
VkResult Device::MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkResult Device::MapMemory(VkDeviceMemory memory, VkDeviceSize offset,
VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const
{ {
...@@ -353,6 +388,11 @@ VkResult Device::CreateCommandPool(VkCommandPool* out) const ...@@ -353,6 +388,11 @@ VkResult Device::CreateCommandPool(VkCommandPool* out) const
return driver->vkCreateCommandPool(device, &info, 0, out); return driver->vkCreateCommandPool(device, &info, 0, out);
} }
void Device::DestroyCommandPool(VkCommandPool commandPool) const
{
return driver->vkDestroyCommandPool(device, commandPool, nullptr);
}
VkResult Device::AllocateCommandBuffer( VkResult Device::AllocateCommandBuffer(
VkCommandPool pool, VkCommandBuffer* out) const VkCommandPool pool, VkCommandBuffer* out) const
{ {
...@@ -366,6 +406,11 @@ VkResult Device::AllocateCommandBuffer( ...@@ -366,6 +406,11 @@ VkResult Device::AllocateCommandBuffer(
return driver->vkAllocateCommandBuffers(device, &info, out); return driver->vkAllocateCommandBuffers(device, &info, out);
} }
void Device::FreeCommandBuffer(VkCommandPool pool, VkCommandBuffer buffer)
{
driver->vkFreeCommandBuffers(device, pool, 1, &buffer);
}
VkResult Device::BeginCommandBuffer( VkResult Device::BeginCommandBuffer(
VkCommandBufferUsageFlags usage, VkCommandBuffer commandBuffer) const VkCommandBufferUsageFlags usage, VkCommandBuffer commandBuffer) const
{ {
......
...@@ -46,32 +46,50 @@ public: ...@@ -46,32 +46,50 @@ public:
VkResult CreateStorageBuffer(VkDeviceMemory memory, VkDeviceSize size, VkResult CreateStorageBuffer(VkDeviceMemory memory, VkDeviceSize size,
VkDeviceSize offset, VkBuffer *out) const; VkDeviceSize offset, VkBuffer *out) const;
// DestroyBuffer destroys a VkBuffer.
void DestroyBuffer(VkBuffer buffer) const;
// CreateShaderModule creates a new shader module with the given SPIR-V // CreateShaderModule creates a new shader module with the given SPIR-V
// code. // code.
VkResult CreateShaderModule(const std::vector<uint32_t> &spirv, VkResult CreateShaderModule(const std::vector<uint32_t> &spirv,
VkShaderModule *out) const; VkShaderModule *out) const;
// DestroyShaderModule destroys a VkShaderModule.
void DestroyShaderModule(VkShaderModule shaderModule) const;
// CreateDescriptorSetLayout creates a new descriptor set layout with the // CreateDescriptorSetLayout creates a new descriptor set layout with the
// given bindings. // given bindings.
VkResult CreateDescriptorSetLayout( VkResult CreateDescriptorSetLayout(
const std::vector<VkDescriptorSetLayoutBinding> &bindings, const std::vector<VkDescriptorSetLayoutBinding> &bindings,
VkDescriptorSetLayout *out) const; VkDescriptorSetLayout *out) const;
// DestroyDescriptorSetLayout destroys a VkDescriptorSetLayout.
void DestroyDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) const;
// CreatePipelineLayout creates a new single set descriptor set layout. // CreatePipelineLayout creates a new single set descriptor set layout.
VkResult CreatePipelineLayout(VkDescriptorSetLayout layout, VkResult CreatePipelineLayout(VkDescriptorSetLayout layout,
VkPipelineLayout *out) const; VkPipelineLayout *out) const;
// DestroyPipelineLayout destroys a VkPipelineLayout.
void DestroyPipelineLayout(VkPipelineLayout pipelineLayout) const;
// CreateComputePipeline creates a new compute pipeline with the entry point // CreateComputePipeline creates a new compute pipeline with the entry point
// "main". // "main".
VkResult CreateComputePipeline(VkShaderModule module, VkResult CreateComputePipeline(VkShaderModule module,
VkPipelineLayout pipelineLayout, VkPipelineLayout pipelineLayout,
VkPipeline *out) const; VkPipeline *out) const;
// DestroyPipeline destroys a graphics or compute pipeline.
void DestroyPipeline(VkPipeline pipeline) const;
// CreateStorageBufferDescriptorPool creates a new descriptor pool that can // CreateStorageBufferDescriptorPool creates a new descriptor pool that can
// hold descriptorCount storage buffers. // hold descriptorCount storage buffers.
VkResult CreateStorageBufferDescriptorPool(uint32_t descriptorCount, VkResult CreateStorageBufferDescriptorPool(uint32_t descriptorCount,
VkDescriptorPool *out) const; VkDescriptorPool *out) const;
// DestroyDescriptorPool destroys the VkDescriptorPool.
void DestroyDescriptorPool(VkDescriptorPool descriptorPool) const;
// AllocateDescriptorSet allocates a single descriptor set with the given // AllocateDescriptorSet allocates a single descriptor set with the given
// layout from pool. // layout from pool.
VkResult AllocateDescriptorSet(VkDescriptorPool pool, VkResult AllocateDescriptorSet(VkDescriptorPool pool,
...@@ -89,6 +107,9 @@ public: ...@@ -89,6 +107,9 @@ public:
// VK_ERROR_OUT_OF_DEVICE_MEMORY is returned. // VK_ERROR_OUT_OF_DEVICE_MEMORY is returned.
VkResult AllocateMemory(size_t size, VkMemoryPropertyFlags flags, VkDeviceMemory* out) const; VkResult AllocateMemory(size_t size, VkMemoryPropertyFlags flags, VkDeviceMemory* out) const;
// FreeMemory frees the VkDeviceMemory.
void FreeMemory(VkDeviceMemory memory) const;
// MapMemory wraps vkMapMemory, supplying the first VkDevice parameter. // MapMemory wraps vkMapMemory, supplying the first VkDevice parameter.
VkResult MapMemory(VkDeviceMemory memory, VkDeviceSize offset, VkResult MapMemory(VkDeviceMemory memory, VkDeviceSize offset,
VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const; VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const;
...@@ -99,9 +120,15 @@ public: ...@@ -99,9 +120,15 @@ public:
// CreateCommandPool creates a new command pool. // CreateCommandPool creates a new command pool.
VkResult CreateCommandPool(VkCommandPool* out) const; VkResult CreateCommandPool(VkCommandPool* out) const;
// DestroyCommandPool destroys a VkCommandPool.
void DestroyCommandPool(VkCommandPool commandPool) const;
// AllocateCommandBuffer creates a new command buffer with a primary level. // AllocateCommandBuffer creates a new command buffer with a primary level.
VkResult AllocateCommandBuffer(VkCommandPool pool, VkCommandBuffer* out) const; VkResult AllocateCommandBuffer(VkCommandPool pool, VkCommandBuffer* out) const;
// FreeCommandBuffer frees the VkCommandBuffer.
void FreeCommandBuffer(VkCommandPool pool, VkCommandBuffer buffer);
// BeginCommandBuffer begins writing to commandBuffer. // BeginCommandBuffer begins writing to commandBuffer.
VkResult BeginCommandBuffer(VkCommandBufferUsageFlags usage, VkCommandBuffer commandBuffer) const; VkResult BeginCommandBuffer(VkCommandBufferUsageFlags usage, VkCommandBuffer commandBuffer) const;
......
...@@ -42,9 +42,19 @@ VK_INSTANCE(vkCreatePipelineLayout, VkResult, VkDevice, const VkPipelineLayoutCr ...@@ -42,9 +42,19 @@ VK_INSTANCE(vkCreatePipelineLayout, VkResult, VkDevice, const VkPipelineLayoutCr
VkPipelineLayout*); VkPipelineLayout*);
VK_INSTANCE(vkCreateShaderModule, VkResult, VkDevice, const VkShaderModuleCreateInfo*, const VkAllocationCallbacks*, VK_INSTANCE(vkCreateShaderModule, VkResult, VkDevice, const VkShaderModuleCreateInfo*, const VkAllocationCallbacks*,
VkShaderModule*); VkShaderModule*);
VK_INSTANCE(vkDestroyBuffer, void, VkDevice, VkBuffer, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyCommandPool, void, VkDevice, VkCommandPool, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyDescriptorPool, void, VkDevice, VkDescriptorPool, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyDescriptorSetLayout, void, VkDevice, VkDescriptorSetLayout, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyDevice, VkResult, VkDevice, const VkAllocationCallbacks*); VK_INSTANCE(vkDestroyDevice, VkResult, VkDevice, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyInstance, void, VkInstance, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyPipeline, void, VkDevice, VkPipeline, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyPipelineLayout, void, VkDevice, VkPipelineLayout, const VkAllocationCallbacks*);
VK_INSTANCE(vkDestroyShaderModule, void, VkDevice, VkShaderModule, const VkAllocationCallbacks*);
VK_INSTANCE(vkEndCommandBuffer, VkResult, VkCommandBuffer); VK_INSTANCE(vkEndCommandBuffer, VkResult, VkCommandBuffer);
VK_INSTANCE(vkEnumeratePhysicalDevices, VkResult, VkInstance, uint32_t*, VkPhysicalDevice*); VK_INSTANCE(vkEnumeratePhysicalDevices, VkResult, VkInstance, uint32_t*, VkPhysicalDevice*);
VK_INSTANCE(vkFreeCommandBuffers, void, VkDevice, VkCommandPool, uint32_t, const VkCommandBuffer*);
VK_INSTANCE(vkFreeMemory, void, VkDevice, VkDeviceMemory, const VkAllocationCallbacks*);
VK_INSTANCE(vkGetDeviceQueue, void, VkDevice, uint32_t, uint32_t, VkQueue*); VK_INSTANCE(vkGetDeviceQueue, void, VkDevice, uint32_t, uint32_t, VkQueue*);
VK_INSTANCE(vkGetPhysicalDeviceMemoryProperties, void, VkPhysicalDevice, VkPhysicalDeviceMemoryProperties*); VK_INSTANCE(vkGetPhysicalDeviceMemoryProperties, void, VkPhysicalDevice, VkPhysicalDeviceMemoryProperties*);
VK_INSTANCE(vkGetPhysicalDeviceProperties, void, VkPhysicalDevice, VkPhysicalDeviceProperties*); VK_INSTANCE(vkGetPhysicalDeviceProperties, void, VkPhysicalDevice, VkPhysicalDeviceProperties*);
......
...@@ -103,6 +103,8 @@ TEST_F(SwiftShaderVulkanTest, Version) ...@@ -103,6 +103,8 @@ TEST_F(SwiftShaderVulkanTest, Version)
EXPECT_EQ(physicalDeviceProperties.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU); 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);
driver.vkDestroyInstance(instance, nullptr);
} }
std::vector<uint32_t> compileSpirv(const char* assembly) std::vector<uint32_t> compileSpirv(const char* assembly)
...@@ -357,6 +359,19 @@ void SwiftShaderVulkanBufferToBufferComputeTest::test( ...@@ -357,6 +359,19 @@ void SwiftShaderVulkanBufferToBufferComputeTest::test(
device->UnmapMemory(memory); device->UnmapMemory(memory);
buffers = nullptr; buffers = nullptr;
device->FreeCommandBuffer(commandPool, commandBuffer);
device->FreeMemory(memory);
device->DestroyPipeline(pipeline);
device->DestroyCommandPool(commandPool);
device->DestroyPipelineLayout(pipelineLayout);
device->DestroyDescriptorSetLayout(descriptorSetLayout);
device->DestroyDescriptorPool(descriptorPool);
device->DestroyBuffer(bufferIn);
device->DestroyBuffer(bufferOut);
device->DestroyShaderModule(shaderModule);
device.reset(nullptr);
driver.vkDestroyInstance(instance, nullptr);
} }
INSTANTIATE_TEST_CASE_P(ComputeParams, SwiftShaderVulkanBufferToBufferComputeTest, testing::Values( INSTANTIATE_TEST_CASE_P(ComputeParams, SwiftShaderVulkanBufferToBufferComputeTest, testing::Values(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment