draw/llvm: fix big-endian mask adjusting

This code was broken, but it worked by accident, as the
pad and the edgeflag were reversed, however when Roland
removed the cliptest field back in 2015, he stopped copying
the pad which actually stopped copy the edgeflag.

Fix the function to actually copy the edgeflag.

Fixes: 1b22815af6 ("draw: don't pretend have_clipdist is per-vertex")

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5679>
This commit is contained in:
Dave Airlie 2020-06-30 13:21:04 +10:00
parent 0e6dfd11f2
commit 2bf2e6c83d

View file

@ -1181,8 +1181,8 @@ store_aos(struct gallivm_state *gallivm,
* {
* return (x >> 16) | // vertex_id
* ((x & 0x3fff) << 18) | // clipmask
* ((x & 0x4000) << 3) | // pad
* ((x & 0x8000) << 1); // edgeflag
* ((x & 0x4000) << 3) | // edgeflag
* ((x & 0x8000) << 1); // pad
* }
*/
static LLVMValueRef
@ -1200,11 +1200,11 @@ adjust_mask(struct gallivm_state *gallivm,
clipmask = LLVMBuildAnd(builder, mask, lp_build_const_int32(gallivm, 0x3fff), "");
clipmask = LLVMBuildShl(builder, clipmask, lp_build_const_int32(gallivm, 18), "");
if (0) {
pad = LLVMBuildAnd(builder, mask, lp_build_const_int32(gallivm, 0x4000), "");
pad = LLVMBuildShl(builder, pad, lp_build_const_int32(gallivm, 3), "");
pad = LLVMBuildAnd(builder, mask, lp_build_const_int32(gallivm, 0x8000), "");
pad = LLVMBuildShl(builder, pad, lp_build_const_int32(gallivm, 1), "");
}
edgeflag = LLVMBuildAnd(builder, mask, lp_build_const_int32(gallivm, 0x8000), "");
edgeflag = LLVMBuildShl(builder, edgeflag, lp_build_const_int32(gallivm, 1), "");
edgeflag = LLVMBuildAnd(builder, mask, lp_build_const_int32(gallivm, 0x4000), "");
edgeflag = LLVMBuildShl(builder, edgeflag, lp_build_const_int32(gallivm, 3), "");
mask = LLVMBuildOr(builder, vertex_id, clipmask, "");
if (0) {