Path: blob/21.2-virgl/src/gallium/tests/unit/u_half_test.c
4565 views
#include <stdlib.h>1#include <stdio.h>2#include <float.h>34#include "util/u_math.h"5#include "util/half_float.h"6#include "util/u_cpu_detect.h"78static void9test(void)10{11unsigned i;12unsigned roundtrip_fails = 0;1314for(i = 0; i < 1 << 16; ++i)15{16uint16_t h = (uint16_t) i;17union fi f;18uint16_t rh;1920f.f = _mesa_half_to_float(h);21rh = _mesa_float_to_half(f.f);2223if (h != rh && !(util_is_half_nan(h) && util_is_half_nan(rh))) {24printf("Roundtrip failed: %x -> %x = %f -> %x\n", h, f.ui, f.f, rh);25++roundtrip_fails;26}27}2829if(roundtrip_fails) {30printf("Failure! %u/65536 half floats failed a conversion to float and back.\n", roundtrip_fails);31exit(1);32}33}3435int36main(int argc, char **argv)37{38util_cpu_detect();39test();4041/* Test non-f16c. */42if (util_get_cpu_caps()->has_f16c) {43((struct util_cpu_caps_t *)util_get_cpu_caps())->has_f16c = false;44test();45}4647printf("Success!\n");48return 0;49}505152