Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
for patch 1-4. (Also, I don't see patch 7?) On Sat, Oct 20, 2018 at 7:56 PM Jason Ekstrand <ja...@jlekstrand.net> wrote: > > --- > src/compiler/nir/nir.c | 92 ++++++++++++++++++++++++++++++++++++++++++ > src/compiler/nir/nir.h | 16 ++++++++ > 2 files changed, 108 insertions(+) > > diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c > index 402fd2c7725..0be40d257f5 100644 > --- a/src/compiler/nir/nir.c > +++ b/src/compiler/nir/nir.c > @@ -1198,6 +1198,98 @@ nir_foreach_src(nir_instr *instr, nir_foreach_src_cb > cb, void *state) > return nir_foreach_dest(instr, visit_dest_indirect, &dest_state); > } > > +int64_t > +nir_src_comp_as_int(nir_src src, unsigned comp) > +{ > + assert(nir_src_is_const(src)); > + nir_load_const_instr *load = > nir_instr_as_load_const(src.ssa->parent_instr); > + > + assert(comp < load->def.num_components); > + switch (load->def.bit_size) { > + case 8: return load->value.i8[comp]; > + case 16: return load->value.i16[comp]; > + case 32: return load->value.i32[comp]; > + case 64: return load->value.i64[comp]; > + default: > + unreachable("Invalid bit size"); > + } > +} > + > +uint64_t > +nir_src_comp_as_uint(nir_src src, unsigned comp) > +{ > + assert(nir_src_is_const(src)); > + nir_load_const_instr *load = > nir_instr_as_load_const(src.ssa->parent_instr); > + > + assert(comp < load->def.num_components); > + switch (load->def.bit_size) { > + case 8: return load->value.u8[comp]; > + case 16: return load->value.u16[comp]; > + case 32: return load->value.u32[comp]; > + case 64: return load->value.u64[comp]; > + default: > + unreachable("Invalid bit size"); > + } > +} > + > +bool > +nir_src_comp_as_bool(nir_src src, unsigned comp) > +{ > + assert(nir_src_is_const(src)); > + nir_load_const_instr *load = > nir_instr_as_load_const(src.ssa->parent_instr); > + > + assert(comp < load->def.num_components); > + assert(load->def.bit_size == 32); > + assert(load->value.u32[comp] == NIR_TRUE || > + load->value.u32[comp] == NIR_FALSE); > + > + return load->value.u32[comp]; > +} > + > +double > +nir_src_comp_as_float(nir_src src, unsigned comp) > +{ > + assert(nir_src_is_const(src)); > + nir_load_const_instr *load = > nir_instr_as_load_const(src.ssa->parent_instr); > + > + assert(comp < load->def.num_components); > + switch (load->def.bit_size) { > + case 16: return _mesa_half_to_float(load->value.u16[comp]); > + case 32: return load->value.f32[comp]; > + case 64: return load->value.f64[comp]; > + default: > + unreachable("Invalid bit size"); > + } > +} > + > +int64_t > +nir_src_as_int(nir_src src) > +{ > + assert(nir_src_num_components(src) == 1); > + return nir_src_comp_as_int(src, 0); > +} > + > +uint64_t > +nir_src_as_uint(nir_src src) > +{ > + assert(nir_src_num_components(src) == 1); > + return nir_src_comp_as_uint(src, 0); > +} > + > +bool > +nir_src_as_bool(nir_src src) > +{ > + assert(nir_src_num_components(src) == 1); > + return nir_src_comp_as_bool(src, 0); > +} > + > +double > +nir_src_as_float(nir_src src) > +{ > + assert(nir_src_num_components(src) == 1); > + return nir_src_comp_as_float(src, 0); > +} > + > nir_const_value * > nir_src_as_const_value(nir_src src) > { > diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h > index 5b871812d46..0ba19cbb25d 100644 > --- a/src/compiler/nir/nir.h > +++ b/src/compiler/nir/nir.h > @@ -700,6 +700,22 @@ nir_src_num_components(nir_src src) > return src.is_ssa ? src.ssa->num_components : src.reg.reg->num_components; > } > > +static inline bool > +nir_src_is_const(nir_src src) > +{ > + return src.is_ssa && > + src.ssa->parent_instr->type == nir_instr_type_load_const; > +} > + > +int64_t nir_src_as_int(nir_src src); > +uint64_t nir_src_as_uint(nir_src src); > +bool nir_src_as_bool(nir_src src); > +double nir_src_as_float(nir_src src); > +int64_t nir_src_comp_as_int(nir_src src, unsigned component); > +uint64_t nir_src_comp_as_uint(nir_src src, unsigned component); > +bool nir_src_comp_as_bool(nir_src src, unsigned component); > +double nir_src_comp_as_float(nir_src src, unsigned component); > + > static inline unsigned > nir_dest_bit_size(nir_dest dest) > { > -- > 2.19.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev