POW doesn't match directly TGSI, since we should take the absolute value of src0.
Fixes black textures in some games Reviewed-by: David Heidelberg <da...@ixit.cz> Signed-off-by: Axel Davy <axel.d...@ens.fr> Cc: "10.4" <mesa-sta...@lists.freedesktop.org> --- src/gallium/state_trackers/nine/nine_shader.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/nine/nine_shader.c b/src/gallium/state_trackers/nine/nine_shader.c index 6f8ddcc..da77da5 100644 --- a/src/gallium/state_trackers/nine/nine_shader.c +++ b/src/gallium/state_trackers/nine/nine_shader.c @@ -1946,6 +1946,17 @@ DECL_SPECIAL(DEFI) return D3D_OK; } +DECL_SPECIAL(POW) +{ + struct ureg_dst dst = tx_dst_param(tx, &tx->insn.dst[0]); + struct ureg_src src[2] = { + tx_src_param(tx, &tx->insn.src[0]), + tx_src_param(tx, &tx->insn.src[1]) + }; + ureg_POW(tx->ureg, dst, ureg_abs(src[0]), src[1]); + return D3D_OK; +} + DECL_SPECIAL(NRM) { struct ureg_program *ureg = tx->ureg; @@ -2288,7 +2299,7 @@ struct sm1_op_info inst_table[] = _OPI(DCL, NOP, V(0,0), V(3,0), V(0,0), V(3,0), 0, 0, SPECIAL(DCL)), - _OPI(POW, POW, V(0,0), V(3,0), V(0,0), V(3,0), 1, 2, NULL), + _OPI(POW, POW, V(0,0), V(3,0), V(0,0), V(3,0), 1, 2, SPECIAL(POW)), _OPI(CRS, XPD, V(0,0), V(3,0), V(0,0), V(3,0), 1, 2, NULL), /* XXX: .w */ _OPI(SGN, SSG, V(2,0), V(3,0), V(0,0), V(0,0), 1, 3, SPECIAL(SGN)), /* ignore src1,2 */ _OPI(ABS, ABS, V(0,0), V(3,0), V(0,0), V(3,0), 1, 1, NULL), -- 2.1.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev