The R600 code looks good. Marek
On Sun, Apr 14, 2013 at 10:12 AM, <jfons...@vmware.com> wrote: > From: José Fonseca <jfons...@vmware.com> > > TGSI_OPCODE_IF condition had two possible interpretations: > > - src.x != 0.0f > > - Mesa statetracker when PIPE_SHADER_CAP_INTEGERS was false either for > vertex and fragment shaders > - gallivm/llvmpipe > - postprocess > - vl state tracker > - vega state tracker > - most old drivers > - old internal state trackers > - many graw examples > > - src.x != 0U > > - Mesa statetracker when PIPE_SHADER_CAP_INTEGERS was true for both > vertex and fragment shaders > - tgsi_exec/softpipe > - r600 > - radeonsi > - nv50 > > And drivers that use draw module also were a mess (because Mesa would > emit float IFs, but draw module supports native integers so it would > interpret IF arg as integers...) > > This sort of works if the source argument is limited to float +0.0f or > +1.0f, integer 0, but would fail if source is float -0.0f, or integer in > the float NaN range. It could also fail if source is integer 1, and > hardware flushes denormalized numbers to zero. > > But with this change there are now two opcodes, IF and UIF, with clear > meaning. > > Drivers that do not support native integers do not need to worry about > UIF. However, for backwards compatibility with old state trackers and > examples, it is advisable that native integer capable drivers also > support the float IF opcode. > > I tried to implement this for r600 and radeonsi based on the surrounding > code. I couldn't do this for nouveau, so I just shunted IF/UIF > together, which matches the current behavior. > --- > src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c | 1 + > src/gallium/auxiliary/gallivm/lp_bld_tgsi_aos.c | 1 + > src/gallium/auxiliary/gallivm/lp_bld_tgsi_info.c | 1 + > src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 19 ++++++++- > src/gallium/auxiliary/tgsi/tgsi_dump.c | 2 + > src/gallium/auxiliary/tgsi/tgsi_exec.c | 22 +++++++++++ > src/gallium/auxiliary/tgsi/tgsi_info.c | 2 +- > src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h | 1 + > src/gallium/docs/source/tgsi.rst | 21 ++++++++-- > .../drivers/nv50/codegen/nv50_ir_from_tgsi.cpp | 6 +++ > src/gallium/drivers/r600/r600_shader.c | 21 +++++++--- > .../drivers/radeon/radeon_setup_tgsi_llvm.c | 41 > ++++++++++++++++---- > src/gallium/include/pipe/p_shader_tokens.h | 2 +- > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 8 +++- > src/mesa/state_tracker/st_mesa_to_tgsi.c | 12 +++++- > 15 files changed, 137 insertions(+), 23 deletions(-) >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev