On 04/15/2015 12:41 PM, Kristian Høgsberg wrote: > The ir_tex opcode turns into a sample or sample_c message, which will try to > compute derivatives to determine the lod. This produces garbage for > non-fragment shaders where the sample coordinates don't correspond to > subspans. > > We fix this by rewriting the opcode from ir_tex to ir_txl and setting the > lod to 0.
This seems logical, but... why the heck hasn't this been a problem before? Is this some weirdness of just BSW? Should we perhaps only do this on BSW? > https://bugs.freedesktop.org/show_bug.cgi?id=89457 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89457 That allows the bin/bugzilla_mesa.sh script to find it for generating release notes. > Signed-off-by: Kristian Høgsberg <k...@bitplanet.net> > --- > src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > index 0049b2d..4e99366 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp > @@ -1839,6 +1839,15 @@ fs_visitor::emit_texture_gen7(ir_texture_opcode op, > fs_reg dst, > offset_value.file != BAD_FILE && offset_value.file != IMM; > bool coordinate_done = false; > > + /* The sampler can only meaningfully compute LOD for fragment shader > + * messages. For all other stages, we change the opcode to ir_txl and > + * hardcode the LOD to 0. > + */ > + if (stage != MESA_SHADER_FRAGMENT && op == ir_tex) { > + op = ir_txl; > + lod = fs_reg(0.0f); > + } > + > /* Set up the LOD info */ > switch (op) { > case ir_tex: > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev