Preserve signedness in SPV image query ops
The AST->SPIRV translation of image queries was dropping signedness,
causing some validation troubles.
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index f6b0b86..0add1db 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -1662,7 +1662,7 @@
}
// Comments in header
-Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameters)
+Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameters, bool isUnsignedResult)
{
// All these need a capability
addCapability(CapabilityImageQuery);
@@ -1695,10 +1695,12 @@
}
if (isArrayedImageType(getImageType(parameters.sampler)))
++numComponents;
+
+ Id intType = isUnsignedResult ? makeUintType(32) : makeIntType(32);
if (numComponents == 1)
- resultType = makeIntType(32);
+ resultType = intType;
else
- resultType = makeVectorType(makeIntType(32), numComponents);
+ resultType = makeVectorType(intType, numComponents);
break;
}
@@ -1707,7 +1709,7 @@
break;
case OpImageQueryLevels:
case OpImageQuerySamples:
- resultType = makeIntType(32);
+ resultType = isUnsignedResult ? makeUintType(32) : makeIntType(32);
break;
default:
assert(0);