diff options
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/for-break.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/for-continue-ext.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/for-continue.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/for.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/if-conditional-exit.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/if-early-exit.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/if-one-sided.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/if.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/switch-no-default.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/switch-trivial-fallthrough.slang | 4 | ||||
| -rw-r--r-- | tests/hlsl-intrinsic/active-mask/switch.slang | 4 | ||||
| -rw-r--r-- | tools/gfx/vulkan/render-vk.cpp | 73 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-api.h | 1 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-device-queue.cpp | 12 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-device-queue.h | 6 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-swap-chain.cpp | 8 | ||||
| -rw-r--r-- | tools/gfx/vulkan/vk-swap-chain.h | 2 |
17 files changed, 75 insertions, 71 deletions
diff --git a/tests/hlsl-intrinsic/active-mask/for-break.slang b/tests/hlsl-intrinsic/active-mask/for-break.slang index 440e7481c..e65f68e9d 100644 --- a/tests/hlsl-intrinsic/active-mask/for-break.slang +++ b/tests/hlsl-intrinsic/active-mask/for-break.slang @@ -6,8 +6,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/for-continue-ext.slang b/tests/hlsl-intrinsic/active-mask/for-continue-ext.slang index 881c0389e..dc76d6de9 100644 --- a/tests/hlsl-intrinsic/active-mask/for-continue-ext.slang +++ b/tests/hlsl-intrinsic/active-mask/for-continue-ext.slang @@ -7,8 +7,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/for-continue.slang b/tests/hlsl-intrinsic/active-mask/for-continue.slang index 7700a937a..a06c4613b 100644 --- a/tests/hlsl-intrinsic/active-mask/for-continue.slang +++ b/tests/hlsl-intrinsic/active-mask/for-continue.slang @@ -7,8 +7,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/for.slang b/tests/hlsl-intrinsic/active-mask/for.slang index c6fef5e58..e072db4f4 100644 --- a/tests/hlsl-intrinsic/active-mask/for.slang +++ b/tests/hlsl-intrinsic/active-mask/for.slang @@ -6,8 +6,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/if-conditional-exit.slang b/tests/hlsl-intrinsic/active-mask/if-conditional-exit.slang index 9f90b9380..9a0ab4bc8 100644 --- a/tests/hlsl-intrinsic/active-mask/if-conditional-exit.slang +++ b/tests/hlsl-intrinsic/active-mask/if-conditional-exit.slang @@ -7,8 +7,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 diff --git a/tests/hlsl-intrinsic/active-mask/if-early-exit.slang b/tests/hlsl-intrinsic/active-mask/if-early-exit.slang index 35efb9a6d..864c2f92c 100644 --- a/tests/hlsl-intrinsic/active-mask/if-early-exit.slang +++ b/tests/hlsl-intrinsic/active-mask/if-early-exit.slang @@ -6,8 +6,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/if-one-sided.slang b/tests/hlsl-intrinsic/active-mask/if-one-sided.slang index 9b3259f3b..346d313b0 100644 --- a/tests/hlsl-intrinsic/active-mask/if-one-sided.slang +++ b/tests/hlsl-intrinsic/active-mask/if-one-sided.slang @@ -4,8 +4,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/if.slang b/tests/hlsl-intrinsic/active-mask/if.slang index 077bb4b40..32d207ae4 100644 --- a/tests/hlsl-intrinsic/active-mask/if.slang +++ b/tests/hlsl-intrinsic/active-mask/if.slang @@ -4,8 +4,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/switch-no-default.slang b/tests/hlsl-intrinsic/active-mask/switch-no-default.slang index f3060631b..8d60fc371 100644 --- a/tests/hlsl-intrinsic/active-mask/switch-no-default.slang +++ b/tests/hlsl-intrinsic/active-mask/switch-no-default.slang @@ -7,8 +7,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -render-features cuda_sm_7_0 //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name buffer diff --git a/tests/hlsl-intrinsic/active-mask/switch-trivial-fallthrough.slang b/tests/hlsl-intrinsic/active-mask/switch-trivial-fallthrough.slang index b5674c8d1..1d91d694b 100644 --- a/tests/hlsl-intrinsic/active-mask/switch-trivial-fallthrough.slang +++ b/tests/hlsl-intrinsic/active-mask/switch-trivial-fallthrough.slang @@ -6,8 +6,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK // Note: this test is currently disabled on the CUDA // target because we do not synthesize the active diff --git a/tests/hlsl-intrinsic/active-mask/switch.slang b/tests/hlsl-intrinsic/active-mask/switch.slang index 0ab0c7173..004080f2e 100644 --- a/tests/hlsl-intrinsic/active-mask/switch.slang +++ b/tests/hlsl-intrinsic/active-mask/switch.slang @@ -4,8 +4,8 @@ //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute //DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK -//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK +//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -dx12 -use-dxil -profile cs_6_0 -xslang -DHACK +//DISABLE_TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -xslang -DHACK // Note: this test is currently disabled on the CUDA // target because we do not synthesize the active diff --git a/tools/gfx/vulkan/render-vk.cpp b/tools/gfx/vulkan/render-vk.cpp index 2221187ed..53c210a20 100644 --- a/tools/gfx/vulkan/render-vk.cpp +++ b/tools/gfx/vulkan/render-vk.cpp @@ -356,49 +356,6 @@ public: List<Binding> m_bindings; ///< Records entities are bound to this descriptor set, and keeps the associated resources/views/state in scope }; -#if 0 - struct BindingDetail - { - VkImageView m_srv = VK_NULL_HANDLE; - VkBufferView m_uav = VK_NULL_HANDLE; - VkSampler m_sampler = VK_NULL_HANDLE; - }; - - class BindingStateImpl: public BindingState - { - public: - typedef BindingState Parent; - - BindingStateImpl(const Desc& desc, const VulkanApi* api): - Parent(desc), - m_api(api) - { - } - ~BindingStateImpl() - { - for (int i = 0; i < int(m_bindingDetails.Count()); ++i) - { - BindingDetail& detail = m_bindingDetails[i]; - if (detail.m_sampler != VK_NULL_HANDLE) - { - m_api->vkDestroySampler(m_api->m_device, detail.m_sampler, nullptr); - } - if (detail.m_srv != VK_NULL_HANDLE) - { - m_api->vkDestroyImageView(m_api->m_device, detail.m_srv, nullptr); - } - if (detail.m_uav != VK_NULL_HANDLE) - { - m_api->vkDestroyBufferView(m_api->m_device, detail.m_uav, nullptr); - } - } - } - - const VulkanApi* m_api; - List<BindingDetail> m_bindingDetails; - }; -#endif - struct BoundVertexBuffer { RefPtr<BufferResourceImpl> m_buffer; @@ -423,11 +380,8 @@ public: const VulkanApi* m_api; -// VkPrimitiveTopology m_primitiveTopology; - RefPtr<PipelineLayoutImpl> m_pipelineLayout; -// RefPtr<InputLayoutImpl> m_inputLayout; RefPtr<ShaderProgramImpl> m_shaderProgram; VkPipeline m_pipeline = VK_NULL_HANDLE; @@ -804,11 +758,38 @@ Renderer* createVKRenderer() VKRenderer::~VKRenderer() { + // Check the device queue is valid else, we can't wait on it.. + if (m_deviceQueue.isValid()) + { + waitForGpu(); + } + + m_currentPipeline.setNull(); + + // Same as clear but, also dtors all elements, which clear does not + m_boundVertexBuffers = List<BoundVertexBuffer>(); + + m_currentPipelineLayout.setNull(); + for (auto& impl : m_currentDescriptorSetImpls) + { + impl.setNull(); + } + if (m_renderPass != VK_NULL_HANDLE) { m_api.vkDestroyRenderPass(m_device, m_renderPass, nullptr); m_renderPass = VK_NULL_HANDLE; } + + m_swapChain.destroy(); + + m_deviceQueue.destroy(); + + if (m_device != VK_NULL_HANDLE) + { + m_api.vkDestroyDevice(m_device, nullptr); + m_device = VK_NULL_HANDLE; + } } diff --git a/tools/gfx/vulkan/vk-api.h b/tools/gfx/vulkan/vk-api.h index 001f44d19..6f12d5ddb 100644 --- a/tools/gfx/vulkan/vk-api.h +++ b/tools/gfx/vulkan/vk-api.h @@ -17,6 +17,7 @@ namespace gfx { #define VK_API_INSTANCE_PROCS(x) \ x(vkCreateDevice) \ + x(vkDestroyDevice) \ x(vkCreateDebugReportCallbackEXT) \ x(vkDestroyDebugReportCallbackEXT) \ x(vkDebugReportMessageEXT) \ diff --git a/tools/gfx/vulkan/vk-device-queue.cpp b/tools/gfx/vulkan/vk-device-queue.cpp index 3b9e6cbcd..0cc9a0a0d 100644 --- a/tools/gfx/vulkan/vk-device-queue.cpp +++ b/tools/gfx/vulkan/vk-device-queue.cpp @@ -10,6 +10,11 @@ using namespace Slang; VulkanDeviceQueue::~VulkanDeviceQueue() { + destroy(); +} + +void VulkanDeviceQueue::destroy() +{ if (m_api) { for (int i = 0; i < int(EventType::CountOf); ++i) @@ -23,14 +28,14 @@ VulkanDeviceQueue::~VulkanDeviceQueue() m_api->vkDestroyFence(m_api->m_device, m_fences[i].fence, nullptr); } m_api->vkDestroyCommandPool(m_api->m_device, m_commandPool, nullptr); + m_api = nullptr; } } SlangResult VulkanDeviceQueue::init(const VulkanApi& api, VkQueue queue, int queueIndex) { assert(m_api == nullptr); - m_api = &api; - + for (int i = 0; i < int(EventType::CountOf); ++i) { m_semaphores[i] = VK_NULL_HANDLE; @@ -79,6 +84,9 @@ SlangResult VulkanDeviceQueue::init(const VulkanApi& api, VkQueue queue, int que api.vkCreateSemaphore(api.m_device, &semaphoreCreateInfo, nullptr, &m_semaphores[i]); } + // Set the api - also marks that the queue appears to be valid + m_api = &api; + // Second step of flush to prime command buffer flushStepB(); diff --git a/tools/gfx/vulkan/vk-device-queue.h b/tools/gfx/vulkan/vk-device-queue.h index d57483ec0..cd53b6b9d 100644 --- a/tools/gfx/vulkan/vk-device-queue.h +++ b/tools/gfx/vulkan/vk-device-queue.h @@ -54,6 +54,12 @@ struct VulkanDeviceQueue /// Steps to next command buffer and opens. May block if command buffer is still in use void flushStepB(); + /// Destroy the device queue + void destroy(); + + /// True if the queue appears to be valid and has been initialized + bool isValid() const { return m_api != nullptr; } + /// Dtor ~VulkanDeviceQueue(); diff --git a/tools/gfx/vulkan/vk-swap-chain.cpp b/tools/gfx/vulkan/vk-swap-chain.cpp index 5cf2e96ae..d9b3a495d 100644 --- a/tools/gfx/vulkan/vk-swap-chain.cpp +++ b/tools/gfx/vulkan/vk-swap-chain.cpp @@ -348,7 +348,7 @@ void VulkanSwapChain::_destroySwapChain() m_images.clear(); } -VulkanSwapChain::~VulkanSwapChain() +void VulkanSwapChain::destroy() { _destroySwapChain(); @@ -359,6 +359,12 @@ VulkanSwapChain::~VulkanSwapChain() } } + +VulkanSwapChain::~VulkanSwapChain() +{ + destroy(); +} + int VulkanSwapChain::nextFrontImageIndex() { if (!hasValidSwapChain()) diff --git a/tools/gfx/vulkan/vk-swap-chain.h b/tools/gfx/vulkan/vk-swap-chain.h index 57d1173b8..9b4dfc2c1 100644 --- a/tools/gfx/vulkan/vk-swap-chain.h +++ b/tools/gfx/vulkan/vk-swap-chain.h @@ -94,6 +94,8 @@ struct VulkanSwapChain /// Get the next front render image index. Returns -1, if image couldn't be found int nextFrontImageIndex(); + void destroy(); + /// Dtor ~VulkanSwapChain(); |
