Fix an issue of SPV generation for imageAtomicStore.
For GLSL function imageAtomicStore, it will be translated to OpImageTexelPointer + OpAtomicStore. The result type of OpImageTexelPointer must be the same as the sampled type of OpTypeImage. On translation, the result type is mistakenly fetched from operand list operands[2] while operands[2] corresponds to sampleNum whose type is always uint. This leads to an error if the image type is iimageXXX that is int image.
This commit is contained in:
@@ -4731,7 +4731,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
||||
// imageAtomicStore has a void return type so base the pointer type on
|
||||
// the type of the value operand.
|
||||
if (node->getOp() == glslang::EOpImageAtomicStore) {
|
||||
resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(operands[2].word));
|
||||
resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt));
|
||||
} else {
|
||||
resultTypeId = builder.makePointer(spv::StorageClassImage, resultType());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user