diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp index c363bed45..ff7eeb148 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUContextVulkan.cpp @@ -557,14 +557,9 @@ void GPUContextVulkan::UpdateDescriptorSets(const SpirvShaderDescriptorInfo& des 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(); - } + if (!handle) + handle = (GPUConstantBufferVulkan*)_device->HelperResources.GetDummyConstantBuffer(); + handle->DescriptorAsDynamicUniformBuffer(this, buffer, offset, range, dynamicOffset); 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 9b6d4ba2c..35c5ec519 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.cpp @@ -749,8 +749,6 @@ bool BufferedQueryPoolVulkan::HasRoom() const HelperResourcesVulkan::HelperResourcesVulkan(GPUDeviceVulkan* device) : _device(device) - , _dummyBuffer(nullptr) - , _dummyVB(nullptr) { Platform::MemoryClear(_dummyTextures, sizeof(_dummyTextures)); Platform::MemoryClear(_staticSamplers, sizeof(_staticSamplers)); @@ -883,7 +881,6 @@ GPUBufferVulkan* HelperResourcesVulkan::GetDummyBuffer() _dummyBuffer = (GPUBufferVulkan*)_device->CreateBuffer(TEXT("DummyBuffer")); _dummyBuffer->Init(GPUBufferDescription::Buffer(sizeof(int32) * 256, GPUBufferFlags::ShaderResource | GPUBufferFlags::UnorderedAccess, PixelFormat::R32_SInt)); } - return _dummyBuffer; } @@ -894,15 +891,24 @@ GPUBufferVulkan* HelperResourcesVulkan::GetDummyVertexBuffer() _dummyVB = (GPUBufferVulkan*)_device->CreateBuffer(TEXT("DummyVertexBuffer")); _dummyVB->Init(GPUBufferDescription::Vertex(sizeof(Color32), 1, &Color32::Transparent)); } - return _dummyVB; } +GPUConstantBuffer* HelperResourcesVulkan::GetDummyConstantBuffer() +{ + if (!_dummyCB) + { + _dummyCB = _device->CreateConstantBuffer(256, TEXT("DummyConstantBuffer")); + } + return _dummyCB; +} + void HelperResourcesVulkan::Dispose() { SAFE_DELETE_GPU_RESOURCES(_dummyTextures); SAFE_DELETE_GPU_RESOURCE(_dummyBuffer); SAFE_DELETE_GPU_RESOURCE(_dummyVB); + SAFE_DELETE_GPU_RESOURCE(_dummyCB); for (int32 i = 0; i < ARRAY_COUNT(_staticSamplers); i++) { diff --git a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h index e24bf449c..3dd04014b 100644 --- a/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h +++ b/Source/Engine/GraphicsDevice/Vulkan/GPUDeviceVulkan.h @@ -308,8 +308,9 @@ class HelperResourcesVulkan private: GPUDeviceVulkan* _device; GPUTextureVulkan* _dummyTextures[6]; - GPUBufferVulkan* _dummyBuffer; - GPUBufferVulkan* _dummyVB; + GPUBufferVulkan* _dummyBuffer = nullptr; + GPUBufferVulkan* _dummyVB = nullptr; + GPUConstantBuffer* _dummyCB = nullptr; VkSampler _staticSamplers[GPU_STATIC_SAMPLERS_COUNT]; public: @@ -320,6 +321,7 @@ public: GPUTextureVulkan* GetDummyTexture(SpirvShaderResourceType type); GPUBufferVulkan* GetDummyBuffer(); GPUBufferVulkan* GetDummyVertexBuffer(); + GPUConstantBuffer* GetDummyConstantBuffer(); void Dispose(); };