HLSL编译器发出错误消息“ 警告X4000:使用可能未初始化的变量”,其代码如下:
float4 GetPixelColorFromRawImage(
in ByteAddressBuffer Source,
in uint2 SourceSize,
in uint2 XY)
{
// Check if within range
if (any(XY >= SourceSize))
return float4(0.5, 0.0, 0.0, 1.0); // <<<==== WARNING HERE
if (BytesPerPixel == 3) {
// 24 bits RGB color image
uint4 RGBA = GetPixelRGBAFromRawImage(Source, SourceSize, XY);
return float4(RGBA.r / 256.0,
RGBA.g / 256.0,
RGBA.b / 256.0,
RGBA.a / 256.0);
}
else if (BytesPerPixel == 2) {
// 16 bit grayscale image
uint Gray1 = GetPixel16BitGrayFromRawImage(Source, SourceSize, XY);
uint Gray2 = GetByteFromUInt(LUT16.Load(Gray1 & (~3)), Gray1 & 3);
float Gray3 = (float)Gray2 / 256.0;
return float4(Gray3, Gray3, Gray3, 1.0);
}
else {
return float4(0.0, 0.0, 0.0, 1.0);
}
}
我不明白该警告。令人讨厌的行中根本没有使用任何变量!
任何帮助表示赞赏。
答案 0 :(得分:1)
有时,编译器会因中间的return
调用而发疯,并在不应存在的地方给出错误。
您可以尝试一些解决方法。
在方法的开头,定义并实例化一个变量,然后在ifs中对其进行更新,然后将其返回。
float4 GetPixelColorFromRawImage(
in ByteAddressBuffer Source,
in uint2 SourceSize,
in uint2 XY)
{
float4 returnVar = float4(0.0, 0.0, 0.0, 0.0);
// Check if within range
if (any(XY >= SourceSize))
returnVar = float4(0.5, 0.0, 0.0, 1.0);
if (BytesPerPixel == 3) {
// 24 bits RGB color image
uint4 RGBA = GetPixelRGBAFromRawImage(Source, SourceSize, XY);
returnVar = float4(RGBA.r / 256.0,
RGBA.g / 256.0,
RGBA.b / 256.0,
RGBA.a / 256.0);
}
else if (BytesPerPixel == 2) {
// 16 bit grayscale image
uint Gray1 = GetPixel16BitGrayFromRawImage(Source, SourceSize, XY);
uint Gray2 = GetByteFromUInt(LUT16.Load(Gray1 & (~3)), Gray1 & 3);
float Gray3 = (float)Gray2 / 256.0;
returnVar = float4(Gray3, Gray3, Gray3, 1.0);
}
else {
returnVar = float4(0.0, 0.0, 0.0, 1.0);
}
return returnVar;
}