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(
return VK_SUCCESS;
}
void Device::DestroyBuffer(VkBuffer buffer) const
{
driver->vkDestroyBuffer(device, buffer, nullptr);
}
VkResult Device::CreateShaderModule(
const std::vector<uint32_t>& spirv, VkShaderModule* out) const
{
......@@ -184,6 +189,11 @@ VkResult Device::CreateShaderModule(
return driver->vkCreateShaderModule(device, &info, 0, out);
}
void Device::DestroyShaderModule(VkShaderModule shaderModule) const
{
driver->vkDestroyShaderModule(device, shaderModule, nullptr);
}
VkResult Device::CreateDescriptorSetLayout(
const std::vector<VkDescriptorSetLayoutBinding>& bindings,
VkDescriptorSetLayout* out) const
......@@ -199,6 +209,11 @@ VkResult Device::CreateDescriptorSetLayout(
return driver->vkCreateDescriptorSetLayout(device, &info, 0, out);
}
void Device::DestroyDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) const
{
driver->vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
}
VkResult Device::CreatePipelineLayout(
VkDescriptorSetLayout layout, VkPipelineLayout* out) const
{
......@@ -215,6 +230,11 @@ VkResult Device::CreatePipelineLayout(
return driver->vkCreatePipelineLayout(device, &info, 0, out);
}
void Device::DestroyPipelineLayout(VkPipelineLayout pipelineLayout) const
{
driver->vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
}
VkResult Device::CreateComputePipeline(
VkShaderModule module, VkPipelineLayout pipelineLayout,
VkPipeline* out) const
......@@ -241,6 +261,11 @@ VkResult Device::CreateComputePipeline(
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,
VkDescriptorPool* out) const
{
......@@ -261,6 +286,11 @@ VkResult Device::CreateStorageBufferDescriptorPool(uint32_t descriptorCount,
return driver->vkCreateDescriptorPool(device, &info, 0, out);
}
void Device::DestroyDescriptorPool(VkDescriptorPool descriptorPool) const
{
driver->vkDestroyDescriptorPool(device, descriptorPool, nullptr);
}
VkResult Device::AllocateDescriptorSet(
VkDescriptorPool pool, VkDescriptorSetLayout layout,
VkDescriptorSet* out) const
......@@ -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?
}
void Device::FreeMemory(VkDeviceMemory memory) const
{
driver->vkFreeMemory(device, memory, nullptr);
}
VkResult Device::MapMemory(VkDeviceMemory memory, VkDeviceSize offset,
VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const
{
......@@ -353,6 +388,11 @@ VkResult Device::CreateCommandPool(VkCommandPool* out) const
return driver->vkCreateCommandPool(device, &info, 0, out);
}
void Device::DestroyCommandPool(VkCommandPool commandPool) const
{
return driver->vkDestroyCommandPool(device, commandPool, nullptr);
}
VkResult Device::AllocateCommandBuffer(
VkCommandPool pool, VkCommandBuffer* out) const
{
......@@ -366,6 +406,11 @@ VkResult Device::AllocateCommandBuffer(
return driver->vkAllocateCommandBuffers(device, &info, out);
}
void Device::FreeCommandBuffer(VkCommandPool pool, VkCommandBuffer buffer)
{
driver->vkFreeCommandBuffers(device, pool, 1, &buffer);
}
VkResult Device::BeginCommandBuffer(
VkCommandBufferUsageFlags usage, VkCommandBuffer commandBuffer) const
{
......
......@@ -46,32 +46,50 @@ public:
VkResult CreateStorageBuffer(VkDeviceMemory memory, VkDeviceSize size,
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
// code.
VkResult CreateShaderModule(const std::vector<uint32_t> &spirv,
VkShaderModule *out) const;
// DestroyShaderModule destroys a VkShaderModule.
void DestroyShaderModule(VkShaderModule shaderModule) const;
// CreateDescriptorSetLayout creates a new descriptor set layout with the
// given bindings.
VkResult CreateDescriptorSetLayout(
const std::vector<VkDescriptorSetLayoutBinding> &bindings,
VkDescriptorSetLayout *out) const;
// DestroyDescriptorSetLayout destroys a VkDescriptorSetLayout.
void DestroyDescriptorSetLayout(VkDescriptorSetLayout descriptorSetLayout) const;
// CreatePipelineLayout creates a new single set descriptor set layout.
VkResult CreatePipelineLayout(VkDescriptorSetLayout layout,
VkPipelineLayout *out) const;
// DestroyPipelineLayout destroys a VkPipelineLayout.
void DestroyPipelineLayout(VkPipelineLayout pipelineLayout) const;
// CreateComputePipeline creates a new compute pipeline with the entry point
// "main".
VkResult CreateComputePipeline(VkShaderModule module,
VkPipelineLayout pipelineLayout,
VkPipeline *out) const;
// DestroyPipeline destroys a graphics or compute pipeline.
void DestroyPipeline(VkPipeline pipeline) const;
// CreateStorageBufferDescriptorPool creates a new descriptor pool that can
// hold descriptorCount storage buffers.
VkResult CreateStorageBufferDescriptorPool(uint32_t descriptorCount,
VkDescriptorPool *out) const;
// DestroyDescriptorPool destroys the VkDescriptorPool.
void DestroyDescriptorPool(VkDescriptorPool descriptorPool) const;
// AllocateDescriptorSet allocates a single descriptor set with the given
// layout from pool.
VkResult AllocateDescriptorSet(VkDescriptorPool pool,
......@@ -89,6 +107,9 @@ public:
// VK_ERROR_OUT_OF_DEVICE_MEMORY is returned.
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.
VkResult MapMemory(VkDeviceMemory memory, VkDeviceSize offset,
VkDeviceSize size, VkMemoryMapFlags flags, void **ppData) const;
......@@ -99,9 +120,15 @@ public:
// CreateCommandPool creates a new command pool.
VkResult CreateCommandPool(VkCommandPool* out) const;
// DestroyCommandPool destroys a VkCommandPool.
void DestroyCommandPool(VkCommandPool commandPool) const;
// AllocateCommandBuffer creates a new command buffer with a primary level.
VkResult AllocateCommandBuffer(VkCommandPool pool, VkCommandBuffer* out) const;
// FreeCommandBuffer frees the VkCommandBuffer.
void FreeCommandBuffer(VkCommandPool pool, VkCommandBuffer buffer);
// BeginCommandBuffer begins writing to commandBuffer.
VkResult BeginCommandBuffer(VkCommandBufferUsageFlags usage, VkCommandBuffer commandBuffer) const;
......
......@@ -42,9 +42,19 @@ VK_INSTANCE(vkCreatePipelineLayout, VkResult, VkDevice, const VkPipelineLayoutCr
VkPipelineLayout*);
VK_INSTANCE(vkCreateShaderModule, VkResult, VkDevice, const VkShaderModuleCreateInfo*, const VkAllocationCallbacks*,
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(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(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(vkGetPhysicalDeviceMemoryProperties, void, VkPhysicalDevice, VkPhysicalDeviceMemoryProperties*);
VK_INSTANCE(vkGetPhysicalDeviceProperties, void, VkPhysicalDevice, VkPhysicalDeviceProperties*);
......
......@@ -103,6 +103,8 @@ TEST_F(SwiftShaderVulkanTest, Version)
EXPECT_EQ(physicalDeviceProperties.deviceType, VK_PHYSICAL_DEVICE_TYPE_CPU);
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)
......@@ -357,6 +359,19 @@ void SwiftShaderVulkanBufferToBufferComputeTest::test(
device->UnmapMemory(memory);
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(
......
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