On Fri, Apr 3, 2015 at 11:41 AM, Eric Anholt <e...@anholt.net> wrote: > Jason Ekstrand <ja...@jlekstrand.net> writes: > >> --- >> src/mesa/drivers/dri/i965/Makefile.sources | 1 + >> src/mesa/drivers/dri/i965/brw_nir.h | 2 + >> .../drivers/dri/i965/brw_nir_cubemap_normalize.c | 111 >> +++++++++++++++++++++ >> 3 files changed, 114 insertions(+) >> create mode 100644 src/mesa/drivers/dri/i965/brw_nir_cubemap_normalize.c > > Could this go in src/glsl/nir? vc4 also lowers cubemaps the same way, > so I might want to use it. > > (Probably won't immediately, due to the same "do I really want to make > my rcp that accurate for this operation? probably not." concern as for > txp). > >> diff --git a/src/mesa/drivers/dri/i965/brw_nir_cubemap_normalize.c >> b/src/mesa/drivers/dri/i965/brw_nir_cubemap_normalize.c >> new file mode 100644 >> index 0000000..6464f41 >> --- /dev/null >> +++ b/src/mesa/drivers/dri/i965/brw_nir_cubemap_normalize.c >> @@ -0,0 +1,111 @@ >> +/* >> + * Copyright © 2015 Intel Corporation >> + * >> + * Permission is hereby granted, free of charge, to any person obtaining a >> + * copy of this software and associated documentation files (the >> "Software"), >> + * to deal in the Software without restriction, including without limitation >> + * the rights to use, copy, modify, merge, publish, distribute, sublicense, >> + * and/or sell copies of the Software, and to permit persons to whom the >> + * Software is furnished to do so, subject to the following conditions: >> + * >> + * The above copyright notice and this permission notice (including the next >> + * paragraph) shall be included in all copies or substantial portions of the >> + * Software. >> + * >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS >> OR >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL >> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR >> OTHER >> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING >> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER >> DEALINGS >> + * IN THE SOFTWARE. >> + * >> + * Authors: >> + * Jason Ekstrand <ja...@jlekstrand.net> >> + */ >> + >> +#include "brw_nir.h" >> +#include "glsl/nir/nir_builder.h" >> + >> +/** >> + * This file implements a NIR lowering pass to perform the normalization of >> + * the cubemap coordinates to have the largest magnitude component be -1.0 >> + * or 1.0. This is based on the old GLSL IR based pass by Eric. >> + */ >> + >> +static nir_ssa_def * >> +channel(nir_builder *b, nir_ssa_def *def, int c) >> +{ >> + return nir_swizzle(b, def, (unsigned[4]){c, c, c, c}, 1, false); >> +} >> + >> +static bool >> +cubemap_normalize_block(nir_block *block, void *void_state) >> +{ >> + nir_builder *b = void_state; >> + >> + nir_foreach_instr(block, instr) { >> + if (instr->type != nir_instr_type_tex) >> + continue; >> + >> + nir_tex_instr *tex = nir_instr_as_tex(instr); >> + if (tex->sampler_dim != GLSL_SAMPLER_DIM_CUBE) >> + continue; >> + >> + nir_builder_insert_before_instr(b, &tex->instr); >> + >> + for (unsigned i = 0; i < tex->num_srcs; i++) { >> + if (tex->src[i].src_type != nir_tex_src_coord) >> + continue; >> + >> + nir_ssa_def *orig_coord = >> + nir_ssa_for_src(b, tex->src[i].src, nir_tex_instr_src_size(tex, >> i)); >> + assert(orig_coord->num_components >= 3); >> + >> + nir_ssa_def *abs0 = nir_fabs(b, channel(b, orig_coord, 0)); >> + nir_ssa_def *abs1 = nir_fabs(b, channel(b, orig_coord, 1)); >> + nir_ssa_def *abs2 = nir_fabs(b, channel(b, orig_coord, 2)); >> + >> + nir_ssa_def *norm1 = nir_fmax(b, abs0, nir_fmax(b, abs1, abs2)); > > This could just be: > > nir_ssa_def *abs = nir_fabs(b, orig_coord); > nir_ssa_def *norm = nir_fmax(b, channel(b, abs, 0), > nir_fmax(b, channel(b, abs, 1), > channel(b, abs, 2))); > > right? Just in case vec4 NIR ends up being a thing.
D'oh! Yeah, I'll change that. > Other than these little comments, > > Reviewed-by: Eric Anholt <e...@anholt.net> Thanks. --Jason _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev