VKRenderPass::~VKRenderPass() 
            {
                VKRenderer* renderer = VKRenderer::RendererInstance;

                //Free input descriptor sets
                vkFreeDescriptorSets(m_device, m_descriptorPool, static_cast<uint32_t>(m_inputTargetDescriptorSets.size()), m_inputTargetDescriptorSets.data());

                //Destroy framebuffer images
                for (size_t i = 0; i < m_colorImages.size(); i++)
                {
                    Image_vk image = m_colorImages[i];

                    vkDestroyImageView(m_device, image.view, nullptr);
                    vkDestroyImage(m_device, image.image, nullptr);
                    vkFreeMemory(m_device, image.memory, nullptr);
                }

                //Destroy depth image
                vkDestroyImageView(m_device, m_depthImage.view, nullptr);
                vkDestroyImage(m_device, m_depthImage.image, nullptr);
                vkFreeMemory(m_device, m_depthImage.memory, nullptr);
                
                //Free instance texel buffers
                if(m_instanceBlock.buffer != VK_NULL_HANDLE)
                    DeleteUniformBuffer(m_device, m_instanceBlock);

                //Destroy framebuffer
                vkDestroyFramebuffer(m_device, m_framebuffer, nullptr);

                //Destroy the render pass
                vkDestroyRenderPass(m_device, m_renderPass, nullptr);
            }
Пример #2
0
/**
 * Destroy the graphics pipeline.
 */
VkcPipeline::~VkcPipeline()
{
    if (logicalDevice != VK_NULL_HANDLE)
    {
        if (descriptorSet != VK_NULL_HANDLE)
            vkFreeDescriptorSets(logicalDevice, descriptorPool, 1, &descriptorSet);

        if (setLayout != VK_NULL_HANDLE)
            vkDestroyDescriptorSetLayout(logicalDevice, setLayout, nullptr);

        if (descriptorPool != VK_NULL_HANDLE)
            vkDestroyDescriptorPool(logicalDevice, descriptorPool, nullptr);

        if (vertShader != VK_NULL_HANDLE)
            vkDestroyShaderModule(logicalDevice, vertShader, nullptr);

        if (fragShader != VK_NULL_HANDLE)
            vkDestroyShaderModule(logicalDevice, fragShader, nullptr);

        if (layout != VK_NULL_HANDLE)
            vkDestroyPipelineLayout(logicalDevice, layout, nullptr);

        if (handle != VK_NULL_HANDLE)
            vkDestroyPipeline(logicalDevice, handle, nullptr);
    }
}
Пример #3
0
 void VulkanUniformBuffer::FinalizeDescriptorSet ( VkDescriptorSet& aVkDescriptorSet )
 {
     if ( aVkDescriptorSet != VK_NULL_HANDLE )
     {
         vkFreeDescriptorSets ( mVulkanRenderer.GetDevice(), mVkDescriptorPool, 1, &aVkDescriptorSet );
         aVkDescriptorSet = VK_NULL_HANDLE;
     }
 }
Пример #4
0
DescriptorSet::~DescriptorSet() {
    if (initialized()) {
        // Only call vkFree* on sets allocated from pool with usage *_DYNAMIC
        if (containing_pool_->getDynamicUsage()) {
            VkDescriptorSet sets[1] = {handle()};
            EXPECT(vkFreeDescriptorSets(device(), containing_pool_->GetObj(), 1,
                                        sets) == VK_SUCCESS);
        }
    }
}
Пример #5
0
XCamReturn
VKDevice::free_desc_set (VkDescriptorSet set, VkDescriptorPool pool)
{
    XCAM_ASSERT (XCAM_IS_VALID_VK_ID (_dev_id));
    XCAM_ASSERT (XCAM_IS_VALID_VK_ID (set));
    XCAM_ASSERT (XCAM_IS_VALID_VK_ID (pool));

    XCAM_VK_CHECK_RETURN (
        ERROR,
        vkFreeDescriptorSets (_dev_id, pool, 1, &set),
        XCAM_RETURN_ERROR_VULKAN,
        "vkdevice free desriptor set from pool failed");
    return XCAM_RETURN_NO_ERROR;
}
Пример #6
0
            VKMaterial::~VKMaterial() 
            {
                VKRenderer* renderer = VKRenderer::RendererInstance;

                VkDevice device = renderer->GetVKDevice();
                VkDescriptorPool descriptorPool = renderer->GetVKDescriptorPool();

                //Free descriptors
                vkFreeDescriptorSets(device, descriptorPool, 1, &m_materialSet);

                //Destroy unifrom blocks
                vkFreeMemory(device, m_uniformVSBuffer.memory, nullptr);
                vkDestroyBuffer(device, m_uniformVSBuffer.buffer, nullptr);

                //TODO: Destroy FS buffer

                //TODO: Destroy textures
            }
Пример #7
0
//
// Vulkan termination.
//
void Example::terminate(const vkts::IUpdateThreadContext& updateContext)
{
	if (device.get())
	{
		terminateResources(updateContext);

		//

		if (swapchain.get())
		{
			swapchain->destroy();
		}

		if (pipelineLayout.get())
		{
			pipelineLayout->destroy();
		}

		if (pipelineCache.get())
		{
			pipelineCache->destroy();
		}

		if (vertexShaderModule.get())
		{
			vertexShaderModule->destroy();
		}

		if (fragmentShaderModule.get())
		{
			fragmentShaderModule->destroy();
		}

		if (vertexBuffer.get())
		{
			vertexBuffer->destroy();
		}

		if (deviceMemoryVertexBuffer.get())
		{
			deviceMemoryVertexBuffer->destroy();
		}

		if (descriptorSet != VK_NULL_HANDLE)
		{
			vkFreeDescriptorSets(device->getDevice(), descriptorPool, 1, &descriptorSet);

			descriptorSet = VK_NULL_HANDLE;
		}

		if (descriptorPool != VK_NULL_HANDLE)
		{
			vkDestroyDescriptorPool(device->getDevice(), descriptorPool, nullptr);

			descriptorPool = VK_NULL_HANDLE;
		}

		if (descriptorSetLayout != VK_NULL_HANDLE)
		{
			vkDestroyDescriptorSetLayout(device->getDevice(), descriptorSetLayout, nullptr);

			descriptorSetLayout = VK_NULL_HANDLE;
		}

		if (imageView.get())
		{
			imageView->destroy();
		}

		if (sampler.get())
		{
			sampler->destroy();
		}

		destroyTexture(image, deviceMemoryImage);

        if (renderingCompleteSemaphore.get())
        {
            renderingCompleteSemaphore->destroy();
        }

        if (imageAcquiredSemaphore.get())
        {
            imageAcquiredSemaphore->destroy();
        }

		if (commandPool.get())
		{
			commandPool->destroy();
		}

		if (surface.get())
		{
			surface->destroy();
		}

		device->destroy();
	}

	if (instance.get())
	{
		instance->destroy();
	}
}
Пример #8
0
void Arguments::destroy()
{
    vkFreeDescriptorSets(device, descriptorPool, 1, &descriptorSet);
    vkDestroyDescriptorPool(device, descriptorPool, nullptr);
}
Пример #9
0
void DescriptorSets::destroy() {
    VULKAN_DESTROY_COLLECTION(vkFreeDescriptorSets(device->getHandle(), descriptorPool->getHandle(), collection.size(), collection.data()));
}