Don't call SPIR-V callback with optional IDs not present

This commit is contained in:
baldurk
2022-07-05 13:03:48 +01:00
parent 398a92baa2
commit 530c8cf024
2 changed files with 21 additions and 19 deletions
@@ -986,6 +986,8 @@ for inst in spirv['instructions']:
if kind['is_id']:
if quantifier == '*':
used_ids += ' for(size_t i=0; i < size-{0}; i++) callback(Id::fromWord(it.word({0}+i)), {1});\n'.format(all_size, 'true' if i+1==result else 'false')
elif quantifier == '?':
used_ids += ' if({0} < size) callback(Id::fromWord(it.word({0})), {1});\n'.format(all_size, 'true' if i+1==result else 'false')
else:
used_ids += ' callback(Id::fromWord(it.word({})), {});\n'.format(all_size, 'true' if i+1==result else 'false')
+19 -19
View File
@@ -2028,7 +2028,7 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
case rdcspv::Op::SourceContinued:
break;
case rdcspv::Op::Source:
callback(Id::fromWord(it.word(3)), false);
if(3 < size) callback(Id::fromWord(it.word(3)), false);
break;
case rdcspv::Op::SourceExtension:
break;
@@ -2196,7 +2196,7 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
case rdcspv::Op::Variable:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(4)), false);
if(4 < size) callback(Id::fromWord(it.word(4)), false);
break;
case rdcspv::Op::ImageTexelPointer:
callback(Id::fromWord(it.word(1)), false);
@@ -3764,112 +3764,112 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformFAdd:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformIMul:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformFMul:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformSMin:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformUMin:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformFMin:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformSMax:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformUMax:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformFMax:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformBitwiseAnd:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformBitwiseOr:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformBitwiseXor:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformLogicalAnd:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformLogicalOr:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformLogicalXor:
callback(Id::fromWord(it.word(1)), false);
callback(Id::fromWord(it.word(2)), true);
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::GroupNonUniformQuadBroadcast:
callback(Id::fromWord(it.word(1)), false);
@@ -3941,7 +3941,7 @@ void OpDecoder::ForEachID(const ConstIter &it, const std::function<void(Id,bool)
callback(Id::fromWord(it.word(3)), false);
callback(Id::fromWord(it.word(4)), false);
callback(Id::fromWord(it.word(5)), false);
callback(Id::fromWord(it.word(6)), false);
if(6 < size) callback(Id::fromWord(it.word(6)), false);
break;
case rdcspv::Op::SubgroupReadInvocationKHR:
callback(Id::fromWord(it.word(1)), false);