From 01300bb8849157aabbe987839f03e98593ca6e82 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 23 Oct 2024 10:19:25 +0200 Subject: [PATCH] [dxvk] Improve some descriptor setup code Help the compiler out since it cannot fully prove that two consecutive calls to DxvkImageView::handle with the same argument return the same result. --- src/dxvk/dxvk_context.cpp | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 5811bf8ac..a78c355c1 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -5126,9 +5126,14 @@ namespace dxvk { case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: { const auto& res = m_rc[binding.resourceBinding]; - if (res.imageView != nullptr && res.imageView->handle(binding.viewType) != VK_NULL_HANDLE) { + VkImageView viewHandle = VK_NULL_HANDLE; + + if (res.imageView != nullptr) + viewHandle = res.imageView->handle(binding.viewType); + + if (viewHandle) { descriptorInfo.image.sampler = VK_NULL_HANDLE; - descriptorInfo.image.imageView = res.imageView->handle(binding.viewType); + descriptorInfo.image.imageView = viewHandle; descriptorInfo.image.imageLayout = res.imageView->image()->info().layout; if (m_rcTracked.set(binding.resourceBinding)) @@ -5143,9 +5148,14 @@ namespace dxvk { case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: { const auto& res = m_rc[binding.resourceBinding]; - if (res.imageView != nullptr && res.imageView->handle(binding.viewType) != VK_NULL_HANDLE) { + VkImageView viewHandle = VK_NULL_HANDLE; + + if (res.imageView != nullptr) + viewHandle = res.imageView->handle(binding.viewType); + + if (viewHandle) { descriptorInfo.image.sampler = VK_NULL_HANDLE; - descriptorInfo.image.imageView = res.imageView->handle(binding.viewType); + descriptorInfo.image.imageView = viewHandle; descriptorInfo.image.imageLayout = res.imageView->image()->info().layout; if (m_rcTracked.set(binding.resourceBinding)) { @@ -5162,10 +5172,14 @@ namespace dxvk { case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: { const auto& res = m_rc[binding.resourceBinding]; - if (res.sampler != nullptr && res.imageView != nullptr - && res.imageView->handle(binding.viewType) != VK_NULL_HANDLE) { + VkImageView viewHandle = VK_NULL_HANDLE; + + if (res.imageView != nullptr && res.sampler != nullptr) + viewHandle = res.imageView->handle(binding.viewType); + + if (viewHandle) { descriptorInfo.image.sampler = res.sampler->handle(); - descriptorInfo.image.imageView = res.imageView->handle(binding.viewType); + descriptorInfo.image.imageView = viewHandle; descriptorInfo.image.imageLayout = res.imageView->image()->info().layout; if (m_rcTracked.set(binding.resourceBinding)) {