ac: fix nir_op_fdd{x,y} handling
authorTimothy Arceri <tarceri@itsqueeze.com>
Tue, 27 Feb 2018 05:08:40 +0000 (16:08 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Tue, 27 Feb 2018 22:23:49 +0000 (09:23 +1100)
radeonsi, i965 and anv all treat fdd{x,y} opcodes the same as
fdd{x,y}_coarse by default. The SPIR-V spec lets the implementation
decide how it should be handled and radv was previously going
for the higher quality option. Here we change the shared amd
code to match how nir_op_fdd{x,y} is expected to be handled
by the other NIR drivers.

Fixes piglit test:
./bin/arb_shader_texture_lod-texgrad -auto

Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_nir_to_llvm.c

index fabecb17869005ea28e9d69bb83d44dbf0f26deb..b01012833fe2a0e7498470bfe8d3f6284222adc0 100644 (file)
@@ -1613,9 +1613,9 @@ static LLVMValueRef emit_ddxy(struct ac_nir_context *ctx,
        int idx;
        LLVMValueRef result;
 
-       if (op == nir_op_fddx_fine || op == nir_op_fddx)
+       if (op == nir_op_fddx_fine)
                mask = AC_TID_MASK_LEFT;
-       else if (op == nir_op_fddy_fine || op == nir_op_fddy)
+       else if (op == nir_op_fddy_fine)
                mask = AC_TID_MASK_TOP;
        else
                mask = AC_TID_MASK_TOP_LEFT;