[Piglit] [PATCH 2/5] util/gl: Wrapper to load hex values for half floats

Alejandro Piñeiro apinheiro at igalia.com
Wed Jun 29 14:28:36 UTC 2016


Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>

On 14/06/16 23:36, Andres Gomez wrote:
> For some cases we want to have shaders where we load an exact bit
> pattern into a half float.
>
> Signed-off-by: Andres Gomez <agomez at igalia.com>
> ---
>  tests/util/piglit-util-gl.h | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
>
> diff --git a/tests/util/piglit-util-gl.h b/tests/util/piglit-util-gl.h
> index 0954ef5..b416e50 100644
> --- a/tests/util/piglit-util-gl.h
> +++ b/tests/util/piglit-util-gl.h
> @@ -29,6 +29,9 @@
>  extern "C" {
>  #endif
>  
> +#include <errno.h>
> +#include <limits.h>
> +
>  #include "piglit-util.h"
>  
>  #include <piglit/gl_wrap.h>
> @@ -244,6 +247,30 @@ void piglit_draw_rect_from_arrays(const void *verts, const void *tex,
>  
>  unsigned short piglit_half_from_float(float val);
>  
> +/**
> + * Wrapper for piglit_half_from_float() which allows using an exact
> + * hex bit pattern to generate a half float value.
> + */
> +static inline unsigned short
> +strtohf_hex(const char *nptr, char **endptr)
> +{
> +	/* skip spaces and tabs */
> +	while (*nptr == ' ' || *nptr == '\t')
> +		nptr++;
> +
> +	if (strncmp(nptr, "0x", 2) == 0) {
> +		uint32_t u = strtoul(nptr, endptr, 16);
> +		if (u > USHRT_MAX) {
> +			errno = ERANGE;
> +			return USHRT_MAX;
> +		} else {
> +			return u;
> +		}
> +	} else {
> +		return piglit_half_from_float(strtod_inf(nptr, endptr));
> +	}
> +}
> +
>  void piglit_escape_exit_key(unsigned char key, int x, int y);
>  
>  void piglit_gen_ortho_projection(double left, double right, double bottom,



More information about the Piglit mailing list