mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 22:50:08 +01:00
compiler: add float8 glsl types
e4m3fn: 8bit floating point format with 4bit exponent, 3bit mantissa
and no infinities (finite only)
e5m2: 8bit floating point format with 5bit exponent, 2bit mantissa
and with infinities.
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35434>
This commit is contained in:
parent
28f7bb2418
commit
9da23499ff
12 changed files with 70 additions and 0 deletions
|
|
@ -62,6 +62,8 @@ vector_type("int8_t", "i8vec", "GLSL_TYPE_INT8", "GL_INT8", "_NV")
|
|||
vector_type("uint8_t", "u8vec", "GLSL_TYPE_UINT8", "GL_UNSIGNED_INT8", "_NV")
|
||||
|
||||
vector_type("bfloat16_t", "bf16vec", "GLSL_TYPE_BFLOAT16", None)
|
||||
vector_type("e4m3fn_t", "e4m3fnvec", "GLSL_TYPE_FLOAT_E4M3FN", None)
|
||||
vector_type("e5m2_t", "e5m2vec", "GLSL_TYPE_FLOAT_E5M2", None)
|
||||
|
||||
simple_type("mat2", "GL_FLOAT_MAT2", "GLSL_TYPE_FLOAT", 2, 2)
|
||||
simple_type("mat3", "GL_FLOAT_MAT3", "GLSL_TYPE_FLOAT", 3, 3)
|
||||
|
|
|
|||
|
|
@ -1136,6 +1136,8 @@ do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_BOOL:
|
||||
|
|
|
|||
|
|
@ -164,6 +164,8 @@ copy_constant_to_storage(union gl_constant_value *storage,
|
|||
case GLSL_TYPE_INT8:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
/* All other types should have already been filtered by other
|
||||
* paths in the caller.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -339,6 +339,8 @@ ir_constant::clone(void *mem_ctx, struct hash_table *ht) const
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
case GLSL_TYPE_BOOL:
|
||||
case GLSL_TYPE_UINT64:
|
||||
|
|
|
|||
|
|
@ -349,6 +349,10 @@ glsl_get_base_glsl_type(const glsl_type *t)
|
|||
return &glsl_type_builtin_double;
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
return &glsl_type_builtin_bfloat16_t;
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
return &glsl_type_builtin_e4m3fn_t;
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
return &glsl_type_builtin_e5m2_t;
|
||||
case GLSL_TYPE_BOOL:
|
||||
return &glsl_type_builtin_bool;
|
||||
case GLSL_TYPE_UINT64:
|
||||
|
|
@ -387,6 +391,8 @@ glsl_get_bare_type(const glsl_type *t)
|
|||
case GLSL_TYPE_INT16:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_FLOAT:
|
||||
|
|
@ -597,6 +603,8 @@ glsl_ ## vname ## _type (unsigned components) \
|
|||
VECN(components, float, vec)
|
||||
VECN(components, float16_t, f16vec)
|
||||
VECN(components, bfloat16_t, bf16vec)
|
||||
VECN(components, e4m3fn_t, e4m3fnvec)
|
||||
VECN(components, e5m2_t, e5m2vec)
|
||||
VECN(components, double, dvec)
|
||||
VECN(components, int, ivec)
|
||||
VECN(components, uint, uvec)
|
||||
|
|
@ -647,6 +655,10 @@ glsl_simple_explicit_type(unsigned base_type, unsigned rows, unsigned columns,
|
|||
return glsl_f16vec_type(rows);
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
return glsl_bf16vec_type(rows);
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
return glsl_e4m3fnvec_type(rows);
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
return glsl_e5m2vec_type(rows);
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
return glsl_dvec_type(rows);
|
||||
case GLSL_TYPE_BOOL:
|
||||
|
|
@ -1749,6 +1761,8 @@ glsl_get_component_slots(const glsl_type *t)
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_BOOL:
|
||||
return glsl_get_components(t);
|
||||
|
||||
|
|
@ -1802,6 +1816,8 @@ glsl_get_component_slots_aligned(const glsl_type *t, unsigned offset)
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_BOOL:
|
||||
return glsl_get_components(t);
|
||||
|
||||
|
|
@ -2889,6 +2905,8 @@ glsl_count_vec4_slots(const glsl_type *t, bool is_gl_vertex_input, bool is_bindl
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_BOOL:
|
||||
return t->matrix_columns;
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
|
|
@ -3094,6 +3112,8 @@ encode_type_to_blob(struct blob *blob, const glsl_type *type)
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
case GLSL_TYPE_UINT8:
|
||||
case GLSL_TYPE_INT8:
|
||||
|
|
@ -3743,6 +3763,8 @@ glsl_get_natural_size_align_bytes(const glsl_type *type,
|
|||
case GLSL_TYPE_INT16:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_FLOAT:
|
||||
|
|
@ -3803,6 +3825,8 @@ glsl_get_word_size_align_bytes(const glsl_type *type,
|
|||
case GLSL_TYPE_INT16:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_FLOAT:
|
||||
|
|
@ -3863,6 +3887,8 @@ glsl_get_vec4_size_align_bytes(const glsl_type *type,
|
|||
case GLSL_TYPE_INT16:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_FLOAT:
|
||||
|
|
|
|||
|
|
@ -64,6 +64,8 @@ enum glsl_base_type {
|
|||
GLSL_TYPE_FLOAT,
|
||||
GLSL_TYPE_FLOAT16,
|
||||
GLSL_TYPE_BFLOAT16,
|
||||
GLSL_TYPE_FLOAT_E4M3FN,
|
||||
GLSL_TYPE_FLOAT_E5M2,
|
||||
GLSL_TYPE_DOUBLE,
|
||||
GLSL_TYPE_UINT8,
|
||||
GLSL_TYPE_INT8,
|
||||
|
|
@ -107,6 +109,8 @@ static unsigned glsl_base_type_bit_size(enum glsl_base_type type)
|
|||
|
||||
case GLSL_TYPE_UINT8:
|
||||
case GLSL_TYPE_INT8:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
return 8;
|
||||
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
|
|
@ -176,6 +180,8 @@ glsl_base_type_get_bit_size(const enum glsl_base_type base_type)
|
|||
|
||||
case GLSL_TYPE_UINT8:
|
||||
case GLSL_TYPE_INT8:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
return 8;
|
||||
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
|
|
@ -630,6 +636,18 @@ glsl_type_is_bfloat_16(const glsl_type *t)
|
|||
return t->base_type == GLSL_TYPE_BFLOAT16;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
glsl_type_is_e4m3fn(const glsl_type *t)
|
||||
{
|
||||
return t->base_type == GLSL_TYPE_FLOAT_E4M3FN;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
glsl_type_is_e5m2(const glsl_type *t)
|
||||
{
|
||||
return t->base_type == GLSL_TYPE_FLOAT_E5M2;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
glsl_type_is_int_16_32_64(const glsl_type *t)
|
||||
{
|
||||
|
|
@ -947,6 +965,8 @@ static inline const glsl_type *glsl_uint8_t_type(void) { return &glsl_type_built
|
|||
static inline const glsl_type *glsl_bool_type(void) { return &glsl_type_builtin_bool; }
|
||||
static inline const glsl_type *glsl_atomic_uint_type(void) { return &glsl_type_builtin_atomic_uint; }
|
||||
static inline const glsl_type *glsl_bfloat16_t_type(void) { return &glsl_type_builtin_bfloat16_t; }
|
||||
static inline const glsl_type *glsl_e4m3fn_t_type(void) { return &glsl_type_builtin_e4m3fn_t; }
|
||||
static inline const glsl_type *glsl_e5m2_t_type(void) { return &glsl_type_builtin_e5m2_t; }
|
||||
|
||||
static inline const glsl_type *
|
||||
glsl_floatN_t_type(unsigned bit_size)
|
||||
|
|
@ -999,6 +1019,8 @@ glsl_uintN_t_type(unsigned bit_size)
|
|||
const glsl_type *glsl_vec_type(unsigned components);
|
||||
const glsl_type *glsl_f16vec_type(unsigned components);
|
||||
const glsl_type *glsl_bf16vec_type(unsigned components);
|
||||
const glsl_type *glsl_e4m3fnvec_type(unsigned components);
|
||||
const glsl_type *glsl_e5m2vec_type(unsigned components);
|
||||
const glsl_type *glsl_dvec_type(unsigned components);
|
||||
const glsl_type *glsl_ivec_type(unsigned components);
|
||||
const glsl_type *glsl_uvec_type(unsigned components);
|
||||
|
|
|
|||
|
|
@ -2905,6 +2905,8 @@ nir_get_nir_type_for_glsl_base_type(enum glsl_base_type base_type)
|
|||
case GLSL_TYPE_FLOAT: return nir_type_float32;
|
||||
case GLSL_TYPE_FLOAT16: return nir_type_float16;
|
||||
case GLSL_TYPE_BFLOAT16: return nir_type_uint16;
|
||||
case GLSL_TYPE_FLOAT_E4M3FN: return nir_type_uint8;
|
||||
case GLSL_TYPE_FLOAT_E5M2: return nir_type_uint8;
|
||||
case GLSL_TYPE_DOUBLE: return nir_type_float64;
|
||||
/* clang-format on */
|
||||
|
||||
|
|
|
|||
|
|
@ -717,6 +717,8 @@ _vtn_variable_load_store(struct vtn_builder *b, bool load,
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_BOOL:
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
case GLSL_TYPE_COOPERATIVE_MATRIX:
|
||||
|
|
@ -811,6 +813,8 @@ _vtn_variable_copy(struct vtn_builder *b, struct vtn_pointer *dest,
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
case GLSL_TYPE_BOOL:
|
||||
/* At this point, we have a scalar, vector, or matrix so we know that
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@ type_size_xvec4(const struct glsl_type *type, bool as_vec4, bool bindless)
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_BOOL:
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
case GLSL_TYPE_UINT16:
|
||||
|
|
|
|||
|
|
@ -77,6 +77,8 @@ elk_type_for_base_type(const struct glsl_type *type)
|
|||
case GLSL_TYPE_ERROR:
|
||||
case GLSL_TYPE_COOPERATIVE_MATRIX:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
unreachable("not reached");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -575,6 +575,8 @@ elk_type_size_xvec4(const struct glsl_type *type, bool as_vec4, bool bindless)
|
|||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_FLOAT16:
|
||||
case GLSL_TYPE_BFLOAT16:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
case GLSL_TYPE_BOOL:
|
||||
case GLSL_TYPE_DOUBLE:
|
||||
case GLSL_TYPE_UINT16:
|
||||
|
|
|
|||
|
|
@ -1011,6 +1011,8 @@ associate_uniform_storage(struct gl_context *ctx,
|
|||
case GLSL_TYPE_ERROR:
|
||||
case GLSL_TYPE_INTERFACE:
|
||||
case GLSL_TYPE_COOPERATIVE_MATRIX:
|
||||
case GLSL_TYPE_FLOAT_E4M3FN:
|
||||
case GLSL_TYPE_FLOAT_E5M2:
|
||||
assert(!"Should not get here.");
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue