convert_float_int fix The convert_float_int was not scaling the [0,1] value to the full 1.31 fixed-point range before clamping the value. Fixes all failures in: dEQP-GLES3.functional.state_query.floats* Change-Id: Ic558eb45f1f351d3c30a0a5047a1b252edb56bd0 Reviewed-on: https://swiftshader-review.googlesource.com/14968 Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp index b834e00..123e97c 100644 --- a/src/OpenGL/libGLESv2/libGLESv2.cpp +++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -3103,7 +3103,7 @@ { if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE || pname == GL_BLEND_COLOR) { - params[i] = convert_float_int(floatParams[i]); + params[i] = convert_float_fixed(floatParams[i]); } else {
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp index 6c7f7a8..7c28ee5 100644 --- a/src/OpenGL/libGLESv2/libGLESv3.cpp +++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -1898,7 +1898,7 @@ { if(target == GL_DEPTH_RANGE || target == GL_COLOR_CLEAR_VALUE || target == GL_DEPTH_CLEAR_VALUE || target == GL_BLEND_COLOR) { - data[i] = convert_float_int(floatParams[i]); + data[i] = convert_float_fixed(floatParams[i]); } else { @@ -3243,7 +3243,7 @@ { if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE || pname == GL_BLEND_COLOR) { - data[i] = (GLint64)(convert_float_int(floatParams[i])); + data[i] = (GLint64)(convert_float_fixed(floatParams[i])); } else { @@ -3326,7 +3326,7 @@ { if(target == GL_DEPTH_RANGE || target == GL_COLOR_CLEAR_VALUE || target == GL_DEPTH_CLEAR_VALUE || target == GL_BLEND_COLOR) { - data[i] = (GLint64)(convert_float_int(floatParams[i])); + data[i] = (GLint64)(convert_float_fixed(floatParams[i])); } else {
diff --git a/src/OpenGL/libGLESv2/mathutil.h b/src/OpenGL/libGLESv2/mathutil.h index 3c820a1..1b0280e 100644 --- a/src/OpenGL/libGLESv2/mathutil.h +++ b/src/OpenGL/libGLESv2/mathutil.h
@@ -90,6 +90,11 @@ return static_cast<int>(roundf(x)); } + +inline int convert_float_fixed(float x) +{ + return convert_float_int(static_cast<float>(0x7FFFFFFF) * x); +} } #endif // LIBGLESV2_MATHUTIL_H_