[Mesa-dev] [PATCH 09/16] main: round floating-point value to nearest integer in glGetSamplerParameteriv()

Ian Romanick idr at freedesktop.org
Thu Dec 11 18:17:25 PST 2014


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

It seems like we could use some refactoring so there isn't so much
duplicated code between GetSamplerParameter* and GetTexParameter*.

On 12/11/2014 02:34 PM, Eduardo Lima Mitev wrote:
> From: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> 
> Previously, a cast was done to convert from float to int but there
> were rounding errors.
> 
> The spec specificies in Data Conversion chapter that Floating-point values are
> rounded to the nearest integer.
> 
> This patch fixes the following 2 dEQP tests:
> 
> dEQP-GLES3.functional.state_query.sampler.sampler_texture_min_lod_getsamplerparameteri
> dEQP-GLES3.functional.state_query.sampler.sampler_texture_max_lod_getsamplerparameteri
> 
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> ---
>  src/mesa/main/samplerobj.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/main/samplerobj.c b/src/mesa/main/samplerobj.c
> index 18a14d8..cadc9cc 100644
> --- a/src/mesa/main/samplerobj.c
> +++ b/src/mesa/main/samplerobj.c
> @@ -1271,13 +1271,22 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
>        *params = sampObj->MagFilter;
>        break;
>     case GL_TEXTURE_MIN_LOD:
> -      *params = (GLint) sampObj->MinLod;
> +      /* GL spec 'Data Conversions' section specifies that floating-point
> +       * value in integer Get function is rounded to nearest integer
> +       */
> +      *params = IROUND(sampObj->MinLod);
>        break;
>     case GL_TEXTURE_MAX_LOD:
> -      *params = (GLint) sampObj->MaxLod;
> +      /* GL spec 'Data Conversions' section specifies that floating-point
> +       * value in integer Get function is rounded to nearest integer
> +       */
> +      *params = IROUND(sampObj->MaxLod);
>        break;
>     case GL_TEXTURE_LOD_BIAS:
> -      *params = (GLint) sampObj->LodBias;
> +      /* GL spec 'Data Conversions' section specifies that floating-point
> +       * value in integer Get function is rounded to nearest integer
> +       */
> +      *params = IROUND(sampObj->LodBias);
>        break;
>     case GL_TEXTURE_COMPARE_MODE:
>        if (!ctx->Extensions.ARB_shadow)
> @@ -1290,7 +1299,10 @@ _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
>        *params = sampObj->CompareFunc;
>        break;
>     case GL_TEXTURE_MAX_ANISOTROPY_EXT:
> -      *params = (GLint) sampObj->MaxAnisotropy;
> +      /* GL spec 'Data Conversions' section specifies that floating-point
> +       * value in integer Get function is rounded to nearest integer
> +       */
> +      *params = IROUND(sampObj->MaxAnisotropy);
>        break;
>     case GL_TEXTURE_BORDER_COLOR:
>        params[0] = FLOAT_TO_INT(sampObj->BorderColor.f[0]);
> 



More information about the mesa-dev mailing list