diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2021-01-30 04:36:32 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-01-30 04:36:32 +0000 |
| commit | 22fafb8e38439f203a70988e6455b2d2ce13bd43 (patch) | |
| tree | ea3c75db3ce78a1ed327e78cfa014d4393c058c8 /Graphics/GraphicsEngine | |
| parent | Graphics accessories: added GetPipelineResourceFlagsString function (diff) | |
| download | DiligentCore-22fafb8e38439f203a70988e6455b2d2ce13bd43.tar.gz DiligentCore-22fafb8e38439f203a70988e6455b2d2ce13bd43.zip | |
Pipeline resource signature impl: improved validation of PipelineResourceDesc.Flags parameter
Diffstat (limited to 'Graphics/GraphicsEngine')
| -rw-r--r-- | Graphics/GraphicsEngine/src/PipelineResourceSignatureBase.cpp | 84 |
1 files changed, 70 insertions, 14 deletions
diff --git a/Graphics/GraphicsEngine/src/PipelineResourceSignatureBase.cpp b/Graphics/GraphicsEngine/src/PipelineResourceSignatureBase.cpp index ebe45d02..b6a5cfb8 100644 --- a/Graphics/GraphicsEngine/src/PipelineResourceSignatureBase.cpp +++ b/Graphics/GraphicsEngine/src/PipelineResourceSignatureBase.cpp @@ -68,20 +68,76 @@ void ValidatePipelineResourceSignatureDesc(const PipelineResourceSignatureDesc& } UsedStages |= Res.ShaderStages; - if ((Res.Flags & PIPELINE_RESOURCE_FLAG_NO_DYNAMIC_BUFFERS) && - (Res.ResourceType != SHADER_RESOURCE_TYPE_CONSTANT_BUFFER && - Res.ResourceType != SHADER_RESOURCE_TYPE_BUFFER_UAV && - Res.ResourceType != SHADER_RESOURCE_TYPE_BUFFER_SRV)) - LOG_PRS_ERROR_AND_THROW("Desc.Resources[", i, "].Flags must not contain PIPELINE_RESOURCE_FLAG_NO_DYNAMIC_BUFFERS if ResourceType is not buffer"); - - if ((Res.Flags & PIPELINE_RESOURCE_FLAG_COMBINED_SAMPLER) && - Res.ResourceType != SHADER_RESOURCE_TYPE_TEXTURE_SRV) - LOG_PRS_ERROR_AND_THROW("Desc.Resources[", i, "].Flags must not contain PIPELINE_RESOURCE_FLAG_COMBINED_SAMPLER if ResourceType is not SHADER_RESOURCE_TYPE_TEXTURE_SRV"); - - if ((Res.Flags & PIPELINE_RESOURCE_FLAG_FORMATTED_BUFFER) && - (Res.ResourceType != SHADER_RESOURCE_TYPE_BUFFER_UAV && - Res.ResourceType != SHADER_RESOURCE_TYPE_BUFFER_SRV)) - LOG_PRS_ERROR_AND_THROW("Desc.Resources[", i, "].Flags must not contain PIPELINE_RESOURCE_FLAG_FORMATTED_BUFFER if ResourceType is not buffer"); + static_assert(SHADER_RESOURCE_TYPE_LAST == 8, "Please add the new resource type to the switch below"); + switch (Res.ResourceType) + { + case SHADER_RESOURCE_TYPE_CONSTANT_BUFFER: + if ((Res.Flags & ~PIPELINE_RESOURCE_FLAG_NO_DYNAMIC_BUFFERS) != 0) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): NO_DYNAMIC_BUFFERS is the only valid flag for a constant buffer."); + } + break; + + case SHADER_RESOURCE_TYPE_TEXTURE_SRV: + if ((Res.Flags & ~PIPELINE_RESOURCE_FLAG_COMBINED_SAMPLER) != 0) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): COMBINED_SAMPLER is the only valid flag for a texture SRV."); + } + break; + + case SHADER_RESOURCE_TYPE_BUFFER_SRV: + if ((Res.Flags & ~(PIPELINE_RESOURCE_FLAG_NO_DYNAMIC_BUFFERS | PIPELINE_RESOURCE_FLAG_FORMATTED_BUFFER)) != 0) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): NO_DYNAMIC_BUFFERS and FORMATTED_BUFFER are the only valid flags for a buffer SRV."); + } + break; + + case SHADER_RESOURCE_TYPE_TEXTURE_UAV: + if (Res.Flags != PIPELINE_RESOURCE_FLAG_UNKNOWN) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): UNKNOWN is the only valid flag for a texture UAV."); + } + break; + + case SHADER_RESOURCE_TYPE_BUFFER_UAV: + if ((Res.Flags & ~(PIPELINE_RESOURCE_FLAG_NO_DYNAMIC_BUFFERS | PIPELINE_RESOURCE_FLAG_FORMATTED_BUFFER)) != 0) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): NO_DYNAMIC_BUFFERS and FORMATTED_BUFFER are the only valid flags for a buffer UAV."); + } + break; + + case SHADER_RESOURCE_TYPE_SAMPLER: + if (Res.Flags != PIPELINE_RESOURCE_FLAG_UNKNOWN) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): UNKNOWN is the only valid flag for a sampler."); + } + break; + + case SHADER_RESOURCE_TYPE_INPUT_ATTACHMENT: + if (Res.Flags != PIPELINE_RESOURCE_FLAG_UNKNOWN) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): UNKNOWN is the only valid flag for an input attachment."); + } + break; + + case SHADER_RESOURCE_TYPE_ACCEL_STRUCT: + if (Res.Flags != PIPELINE_RESOURCE_FLAG_UNKNOWN) + { + LOG_PRS_ERROR_AND_THROW("Incorrect Desc.Resources[", i, "].Flags (", GetPipelineResourceFlagsString(Res.Flags), + "): UNKNOWN is the only valid flag for an acceleration structure."); + } + break; + + default: + UNEXPECTED("Unexpected resource type"); + } } if (Desc.UseCombinedTextureSamplers) |
