diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp index d52b446e3..b0bb1c733 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp @@ -459,9 +459,9 @@ void GPUContextVulkan::UpdateDescriptorSets(const SpirvShaderDescriptorInfo& des { case VK_DESCRIPTOR_TYPE_SAMPLER: { - const VkSampler sampler = _samplerHandles[slot]; - ASSERT(sampler); - needsWrite |= dsWriter.WriteSampler(descriptorIndex, sampler, index); + const VkSampler handle = _samplerHandles[slot]; + ASSERT(handle); + needsWrite |= dsWriter.WriteSampler(descriptorIndex, handle, index); break; } case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: @@ -547,12 +547,18 @@ void GPUContextVulkan::UpdateDescriptorSets(const SpirvShaderDescriptorInfo& des } case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: { - auto cb = handles[slot]; - ASSERT(cb); - VkBuffer buffer; - VkDeviceSize offset, range; - uint32 dynamicOffset; - cb->DescriptorAsDynamicUniformBuffer(this, buffer, offset, range, dynamicOffset); + auto handle = handles[slot]; + VkBuffer buffer = VK_NULL_HANDLE; + VkDeviceSize offset = 0, range = 0; + uint32 dynamicOffset = 0; + if (handle) + handle->DescriptorAsDynamicUniformBuffer(this, buffer, offset, range, dynamicOffset); + else + { + const auto dummy = _device->HelperResources.GetDummyBuffer(); + buffer = dummy->GetHandle(); + range = dummy->GetSize(); + } needsWrite |= dsWriter.WriteDynamicUniformBuffer(descriptorIndex, buffer, offset, range, dynamicOffset, index); break; } diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp index eb23c0871..bd6246d6d 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp @@ -868,7 +868,7 @@ GPUBufferVulkan* HelperResourcesVulkan::GetDummyBuffer() if (!_dummyBuffer) { _dummyBuffer = (GPUBufferVulkan*)_device->CreateBuffer(TEXT("DummyBuffer")); - _dummyBuffer->Init(GPUBufferDescription::Buffer(sizeof(int32), GPUBufferFlags::ShaderResource | GPUBufferFlags::UnorderedAccess, PixelFormat::R32_SInt)); + _dummyBuffer->Init(GPUBufferDescription::Buffer(sizeof(int32) * 256, GPUBufferFlags::ShaderResource | GPUBufferFlags::UnorderedAccess, PixelFormat::R32_SInt)); } return _dummyBuffer;