[Mesa-dev] [PATCH 3/5] amd/common: fix build_cube_select

Nicolai Hähnle nhaehnle at gmail.com
Tue Sep 26 14:43:00 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at 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-stable at 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



More information about the mesa-dev mailing list