From: Nicolai Hähnle <nicolai.haeh...@amd.com>

Fix the custom cube coord selection sequence to be identical to
the hardware v_cubesc/tc and OpenGL spec. Affects texture sampling
with user-provided derivatives.

Fixes dEQP-GLES3.functional.shaders.texture_functions.texturegrad.*

Cc: mesa-sta...@lists.freedesktop.org
---
 src/amd/common/ac_llvm_build.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index 8a329515b57..8c050f31a76 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -458,29 +458,29 @@ static void build_cube_select(LLVMBuilderRef builder,
        sgn_ma = LLVMBuildSelect(builder, is_ma_positive,
                LLVMConstReal(f32, 1.0), LLVMConstReal(f32, -1.0), "");
 
        is_ma_z = LLVMBuildFCmp(builder, LLVMRealUGE, selcoords->id, 
LLVMConstReal(f32, 4.0), "");
        is_not_ma_z = LLVMBuildNot(builder, is_ma_z, "");
        is_ma_y = LLVMBuildAnd(builder, is_not_ma_z,
                LLVMBuildFCmp(builder, LLVMRealUGE, selcoords->id, 
LLVMConstReal(f32, 2.0), ""), "");
        is_ma_x = LLVMBuildAnd(builder, is_not_ma_z, LLVMBuildNot(builder, 
is_ma_y, ""), "");
 
        /* Select sc */
-       tmp = LLVMBuildSelect(builder, is_ma_z, coords[2], coords[0], "");
+       tmp = LLVMBuildSelect(builder, is_ma_x, coords[2], coords[0], "");
        sgn = LLVMBuildSelect(builder, is_ma_y, LLVMConstReal(f32, 1.0),
-               LLVMBuildSelect(builder, is_ma_x, sgn_ma,
+               LLVMBuildSelect(builder, is_ma_z, sgn_ma,
                        LLVMBuildFNeg(builder, sgn_ma, ""), ""), "");
        out_st[0] = LLVMBuildFMul(builder, tmp, sgn, "");
 
        /* Select tc */
        tmp = LLVMBuildSelect(builder, is_ma_y, coords[2], coords[1], "");
-       sgn = LLVMBuildSelect(builder, is_ma_y, LLVMBuildFNeg(builder, sgn_ma, 
""),
+       sgn = LLVMBuildSelect(builder, is_ma_y, sgn_ma,
                LLVMConstReal(f32, -1.0), "");
        out_st[1] = LLVMBuildFMul(builder, tmp, sgn, "");
 
        /* Select ma */
        tmp = LLVMBuildSelect(builder, is_ma_z, coords[2],
                LLVMBuildSelect(builder, is_ma_y, coords[1], coords[0], ""), 
"");
        sgn = LLVMBuildSelect(builder, is_ma_positive,
                LLVMConstReal(f32, 2.0), LLVMConstReal(f32, -2.0), "");
        *out_ma = LLVMBuildFMul(builder, tmp, sgn, "");
 }
-- 
2.11.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to