Half float mantissa calculation was sometimes using
shift larger than a bit width. This change sets the
mantissa to zero in those cases.
VK-GL-CTS Issue: 3346
VK-GL-CTS Issue: 3349
Affects:
KHR-GLES*.core.internalformat.texture2d.*half_float*
KHR-GLES3.packed_pixels.*16f
Components: OpenGL ES
Change-Id: Ib91082fab530f6ff9e7cd5b6346ad7d433543a47
// Store a denorm half-float value or zero
exp = (HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP - exp) >> 23;
mantissa |= (1 << 23);
- mantissa >>= (14 + exp);
+
+ if (exp < 18)
+ mantissa >>= (14 + exp);
+ else
+ mantissa = 0;
+
return (GLhalf)((((GLhalf)sign) << 15) | (GLhalf)(mantissa));
}
/* store a denorm half-float value or zero */
exp = (HALF_FLOAT_MIN_BIASED_EXP_AS_SINGLE_FP_EXP - exp) >> 23;
mantissa |= (1 << 23);
- mantissa >>= (14 + exp);
+
+ if (exp < 18)
+ mantissa >>= (14 + exp);
+ else
+ mantissa = 0;
+
hf = (((GLhalf)sign) << 15) | (GLhalf)(mantissa);
}
else