summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineVulkan
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2018-10-29 15:42:49 +0000
committerEgor Yusov <egor.yusov@gmail.com>2018-10-29 15:42:49 +0000
commit311d84d767b9385ea6004ed87886b72a0fe18bc0 (patch)
treeb43b9fe4311679850c0c91f67c60b18379d92c76 /Graphics/GraphicsEngineVulkan
parentAllowed arbitrary entry point name in compiled SPIRV bytecode (diff)
downloadDiligentCore-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.cpp5
-rw-r--r--Graphics/GraphicsEngineVulkan/src/ShaderResourceLayoutVk.cpp4
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);
}
);