glsl: Add 16-bit types
authorEduardo Lima Mitev <elima@igalia.com>
Sat, 1 Jul 2017 05:46:41 +0000 (07:46 +0200)
committerJose Maria Casanova Crespo <jmcasanova@igalia.com>
Wed, 6 Dec 2017 07:57:18 +0000 (08:57 +0100)
commit59f458cd8703b97b31b826499f01fcc9a30cd606
tree73319583582ec9d3830da2c32f554816a7c86e67
parent8761a04d0d9332d9c0c99164faf855fc3c741f7c
glsl: Add 16-bit types

Adds new INT16, UINT16 and FLOAT16 base types.

The corresponding GL types for half floats were reused from the
AMD_gpu_shader_half_float extension. The int16 and uint16 types come from
NV_gpu_shader_5 extension.

This adds the builtins and the lexer support.

To avoid a bunch of warnings due to cases not handled in switch, the
new types have been added to a few places using same behavior as
their 32-bit counterparts, except for a few trivial cases where they are
already handled properly. Subsequent patches in this set will provide
correct 16-bit implementations when needed.

v2: * Use FLOAT16 instead of HALF_FLOAT as name of the base type.
    * Removed float16_t from builtin types.
    * Don't copy 16-bit types as if they were 32-bit values in
      copy_constant_to_storage().
    * Use get_scalar_type() instead of adding a new custom switch
      statement.
    (Jason Ekstrand)
v3: Use GL_FLOAT16_NV instead of GL_HALF_FLOAT for consistency
    (Ilia Mirkin)
v4: Add missing 16-bit base types support in glsl_to_nir (Eduardo Lima).
v5: Fix coding style (Topi Poholainen).

Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Signed-off-by: Eduardo Lima <elima@igalia.com>
Signed-off-by: Alejandro Piñeiro <apinheiro@igalia.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/compiler/builtin_type_macros.h
src/compiler/glsl/ast_to_hir.cpp
src/compiler/glsl/glsl_to_nir.cpp
src/compiler/glsl/ir_clone.cpp
src/compiler/glsl/link_uniform_initializers.cpp
src/compiler/glsl/lower_buffer_access.cpp
src/compiler/glsl_types.cpp
src/compiler/glsl_types.h
src/mesa/program/ir_to_mesa.cpp