diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-10-29 15:42:49 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-10-29 15:42:49 +0000 |
| commit | 311d84d767b9385ea6004ed87886b72a0fe18bc0 (patch) | |
| tree | b43b9fe4311679850c0c91f67c60b18379d92c76 /Graphics/GraphicsEngineVulkan | |
| parent | Allowed arbitrary entry point name in compiled SPIRV bytecode (diff) | |
| download | DiligentCore-311d84d767b9385ea6004ed87886b72a0fe18bc0.tar.gz DiligentCore-311d84d767b9385ea6004ed87886b72a0fe18bc0.zip | |
Fixed issue with binding sampler array elements of combined image samplers in Vk backend
Diffstat (limited to 'Graphics/GraphicsEngineVulkan')
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp | 5 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineVulkan/src/ShaderResourceLayoutVk.cpp | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp index 32a1d588..8eabf75f 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderResourceCacheVk.cpp @@ -218,6 +218,7 @@ template void ShaderResourceCacheVk::TransitionResources<true>(DeviceContextVkIm VkDescriptorBufferInfo ShaderResourceCacheVk::Resource::GetUniformBufferDescriptorWriteInfo()const { VERIFY(Type == SPIRVShaderResourceAttribs::ResourceType::UniformBuffer, "Uniform buffer resource is expected"); + DEV_CHECK_ERR(pObject != nullptr, "Unable to get uniform buffer write info: cached object is null"); auto* pBuffVk = pObject.RawPtr<const BufferVkImpl>(); // VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC descriptor type require @@ -236,6 +237,7 @@ VkDescriptorBufferInfo ShaderResourceCacheVk::Resource::GetUniformBufferDescript VkDescriptorBufferInfo ShaderResourceCacheVk::Resource::GetStorageBufferDescriptorWriteInfo()const { VERIFY(Type == SPIRVShaderResourceAttribs::ResourceType::StorageBuffer, "Storage buffer resource is expected"); + DEV_CHECK_ERR(pObject != nullptr, "Unable to get storage buffer write info: cached object is null"); auto* pBuffViewVk = pObject.RawPtr<const BufferViewVkImpl>(); const auto& ViewDesc = pBuffViewVk->GetDesc(); @@ -261,6 +263,7 @@ VkDescriptorImageInfo ShaderResourceCacheVk::Resource::GetImageDescriptorWriteIn Type == SPIRVShaderResourceAttribs::ResourceType::SeparateImage || Type == SPIRVShaderResourceAttribs::ResourceType::SampledImage, "Storage image, separate image or sampled image resource is expected"); + DEV_CHECK_ERR(pObject != nullptr, "Unable to get image descriptor write info: cached object is null"); bool IsStorageImage = Type == SPIRVShaderResourceAttribs::ResourceType::StorageImage; @@ -310,6 +313,7 @@ VkBufferView ShaderResourceCacheVk::Resource::GetBufferViewWriteInfo()const VERIFY(Type == SPIRVShaderResourceAttribs::ResourceType::UniformTexelBuffer || Type == SPIRVShaderResourceAttribs::ResourceType::StorageTexelBuffer, "Uniform or storage buffer resource is expected"); + DEV_CHECK_ERR(pObject != nullptr, "Unable to get buffer view write info: cached object is null"); // The following bits must have been set at buffer creation time: // * VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER -> VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT @@ -321,6 +325,7 @@ VkBufferView ShaderResourceCacheVk::Resource::GetBufferViewWriteInfo()const VkDescriptorImageInfo ShaderResourceCacheVk::Resource::GetSamplerDescriptorWriteInfo()const { VERIFY(Type == SPIRVShaderResourceAttribs::ResourceType::SeparateSampler, "Separate sampler resource is expected"); + DEV_CHECK_ERR(pObject != nullptr, "Unable to get separate sampler descriptor write info: cached object is null"); auto* pSamplerVk = pObject.RawPtr<const SamplerVkImpl>(); VkDescriptorImageInfo DescrImgInfo; diff --git a/Graphics/GraphicsEngineVulkan/src/ShaderResourceLayoutVk.cpp b/Graphics/GraphicsEngineVulkan/src/ShaderResourceLayoutVk.cpp index 5f2f87bc..b9a5a346 100644 --- a/Graphics/GraphicsEngineVulkan/src/ShaderResourceLayoutVk.cpp +++ b/Graphics/GraphicsEngineVulkan/src/ShaderResourceLayoutVk.cpp @@ -629,9 +629,9 @@ void ShaderResourceLayoutVk::VkResource::BindResource(IDeviceObject *pObj, Uint3 VERIFY_EXPR(SpirvAttribs.Type == SPIRVShaderResourceAttribs::ResourceType::SeparateImage); DEV_CHECK_ERR(SeparateSampler.SpirvAttribs.ArraySize == 1 || SeparateSampler.SpirvAttribs.ArraySize == SpirvAttribs.ArraySize, "Array size (", SeparateSampler.SpirvAttribs.ArraySize,") of separate sampler variable '", - SeparateSampler.SpirvAttribs.Name, "' must be one or same as the array size (", SpirvAttribs.ArraySize, + SeparateSampler.SpirvAttribs.Name, "' must be one or the same as the array size (", SpirvAttribs.ArraySize, ") of separate image variable '", SpirvAttribs.Name, "' it is assigned to"); - Uint32 SamplerArrInd = SeparateSampler.SpirvAttribs.ArraySize == 0 ? ArrayIndex : 0; + Uint32 SamplerArrInd = SeparateSampler.SpirvAttribs.ArraySize == 1 ? 0 : ArrayIndex; SeparateSampler.BindResource(pSampler, SamplerArrInd, ResourceCache); } ); |
