mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
nir: Add NIR_TRUE and NIR_FALSE constants and use them for boolean immediates
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
parent
744b4e9348
commit
4b4f90dbff
2 changed files with 19 additions and 4 deletions
|
|
@ -40,6 +40,9 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define NIR_FALSE 0u
|
||||
#define NIR_TRUE (~0u)
|
||||
|
||||
struct nir_function_overload;
|
||||
struct nir_function;
|
||||
|
||||
|
|
|
|||
|
|
@ -352,13 +352,24 @@ get_deref_tail(nir_deref *deref)
|
|||
/* helper for reg_const_load which emits a single instruction */
|
||||
static void
|
||||
reg_const_load_single_instr(nir_reg_dest reg, nir_constant *constant,
|
||||
enum glsl_base_type base_type,
|
||||
unsigned num_components, unsigned offset,
|
||||
nir_function_impl *impl, void *mem_ctx)
|
||||
{
|
||||
nir_load_const_instr *instr = nir_load_const_instr_create(mem_ctx);
|
||||
instr->num_components = num_components;
|
||||
for (unsigned i = 0; i < num_components; i++) {
|
||||
instr->value.u[i] = constant->value.u[i + offset];
|
||||
switch (base_type) {
|
||||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_UINT:
|
||||
instr->value.u[i] = constant->value.u[i + offset];
|
||||
break;
|
||||
case GLSL_TYPE_BOOL:
|
||||
instr->value.u[i] = constant->value.u[i + offset] ?
|
||||
NIR_TRUE : NIR_FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
instr->dest.reg = reg;
|
||||
instr->dest.reg.base_offset += offset;
|
||||
|
|
@ -376,20 +387,21 @@ reg_const_load(nir_reg_dest reg, nir_constant *constant,
|
|||
const struct glsl_type *subtype;
|
||||
unsigned subtype_size;
|
||||
|
||||
switch (glsl_get_base_type(type)) {
|
||||
enum glsl_base_type base_type = glsl_get_base_type(type);
|
||||
switch (base_type) {
|
||||
case GLSL_TYPE_FLOAT:
|
||||
case GLSL_TYPE_INT:
|
||||
case GLSL_TYPE_UINT:
|
||||
case GLSL_TYPE_BOOL:
|
||||
if (glsl_type_is_matrix(type)) {
|
||||
for (unsigned i = 0; i < glsl_get_matrix_columns(type); i++) {
|
||||
reg_const_load_single_instr(reg, constant,
|
||||
reg_const_load_single_instr(reg, constant, base_type,
|
||||
glsl_get_vector_elements(type),
|
||||
i * glsl_get_vector_elements(type),
|
||||
impl, mem_ctx);
|
||||
}
|
||||
} else {
|
||||
reg_const_load_single_instr(reg, constant,
|
||||
reg_const_load_single_instr(reg, constant, base_type,
|
||||
glsl_get_vector_elements(type), 0,
|
||||
impl, mem_ctx);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue