diff options
author | Jason Ekstrand <[email protected]> | 2014-10-16 16:53:03 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2015-01-15 07:18:59 -0800 |
commit | 4b4f90dbff1880e2fd5f1b00813ea4778d63d084 (patch) | |
tree | 315f322c5ffed0a89cb809231867f2f43f892519 /src/glsl/nir | |
parent | 744b4e9348db1767a772fda2a5cbe33abbba7db1 (diff) |
nir: Add NIR_TRUE and NIR_FALSE constants and use them for boolean immediates
Reviewed-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src/glsl/nir')
-rw-r--r-- | src/glsl/nir/nir.h | 3 | ||||
-rw-r--r-- | src/glsl/nir/nir_lower_variables_scalar.c | 20 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h index 1e708dfa985..195908d9a13 100644 --- a/src/glsl/nir/nir.h +++ b/src/glsl/nir/nir.h @@ -40,6 +40,9 @@ extern "C" { #endif +#define NIR_FALSE 0u +#define NIR_TRUE (~0u) + struct nir_function_overload; struct nir_function; diff --git a/src/glsl/nir/nir_lower_variables_scalar.c b/src/glsl/nir/nir_lower_variables_scalar.c index 48e43fefc79..b754fa3f859 100644 --- a/src/glsl/nir/nir_lower_variables_scalar.c +++ b/src/glsl/nir/nir_lower_variables_scalar.c @@ -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); } |