MCPcopy Create free account
hub / github.com/KhronosGroup/SPIRV-Tools / ValidateImageReadWrite

Function ValidateImageReadWrite

source/val/validate_image.cpp:855–890  ·  view source on GitHub ↗

Validate OpImage*Read and OpImage*Write instructions

Source from the content-addressed store, hash-verified

853
854// Validate OpImage*Read and OpImage*Write instructions
855spv_result_t ValidateImageReadWrite(ValidationState_t& _,
856 const Instruction* inst,
857 const ImageTypeInfo& info) {
858 if (info.sampled == 2) {
859 if (info.dim == spv::Dim::Dim1D &&
860 !_.HasCapability(spv::Capability::Image1D)) {
861 return _.diag(SPV_ERROR_INVALID_DATA, inst)
862 << "Capability Image1D is required to access storage image";
863 } else if (info.dim == spv::Dim::Rect &&
864 !_.HasCapability(spv::Capability::ImageRect)) {
865 return _.diag(SPV_ERROR_INVALID_DATA, inst)
866 << "Capability ImageRect is required to access storage image";
867 } else if (info.dim == spv::Dim::Buffer &&
868 !_.HasCapability(spv::Capability::ImageBuffer)) {
869 return _.diag(SPV_ERROR_INVALID_DATA, inst)
870 << "Capability ImageBuffer is required to access storage image";
871 } else if (info.dim == spv::Dim::Cube && info.arrayed == 1 &&
872 !_.HasCapability(spv::Capability::ImageCubeArray)) {
873 return _.diag(SPV_ERROR_INVALID_DATA, inst)
874 << "Capability ImageCubeArray is required to access "
875 << "storage image";
876 }
877
878 if (info.multisampled == 1 && info.arrayed == 1 && info.sampled == 2 &&
879 !_.HasCapability(spv::Capability::ImageMSArray)) {
880 return _.diag(SPV_ERROR_INVALID_DATA, inst)
881 << "Capability ImageMSArray is required to access storage "
882 << "image";
883 }
884 } else if (info.sampled != 0) {
885 return _.diag(SPV_ERROR_INVALID_DATA, inst)
886 << "Expected Image 'Sampled' parameter to be 0 or 2";
887 }
888
889 return SPV_SUCCESS;
890}
891
892// Returns true if opcode is *ImageSparse*, false otherwise.
893bool IsSparse(spv::Op opcode) {

Callers 2

ValidateImageReadFunction · 0.85
ValidateImageWriteFunction · 0.85

Calls 2

diagMethod · 0.80
HasCapabilityMethod · 0.45

Tested by

no test coverage detected