diff options
author | Keith Whitwell <keithw@vmware.com> | 2010-09-07 07:55:28 +0100 |
---|---|---|
committer | Keith Whitwell <keithw@vmware.com> | 2010-09-12 15:03:49 +0100 |
commit | 67b957781d8195b8f8867e994c03b68f8dc5c807 (patch) | |
tree | 9e58e46446537b73e48d667cf6da9c484ec9ce6b /src/gallium/drivers/llvmpipe/lp_state_fs.c | |
parent | 4b99b9f5ff8e55252be7cd6dcc2e9fda24561ea3 (diff) |
llvmpipe: pass linear masks to fragment shader
Fragment shader can extract the correct bits for each quad.
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_state_fs.c')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_fs.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 1bcc16dd6d..6053e825e1 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -186,6 +186,7 @@ generate_quad_mask(LLVMBuilderRef builder, LLVMTypeRef i32t = LLVMInt32Type(); LLVMValueRef bits[4]; LLVMValueRef mask; + int shift; /* * XXX: We'll need a different path for 16 x u8 @@ -197,10 +198,25 @@ generate_quad_mask(LLVMBuilderRef builder, /* * mask_input >>= (quad * 4) */ + + switch (quad) { + case 0: + shift = 0; + break; + case 1: + shift = 2; + break; + case 2: + shift = 8; + break; + case 3: + shift = 10; + break; + } mask_input = LLVMBuildLShr(builder, mask_input, - LLVMConstInt(i32t, quad * 4, 0), + LLVMConstInt(i32t, shift, 0), ""); /* @@ -211,9 +227,9 @@ generate_quad_mask(LLVMBuilderRef builder, bits[0] = LLVMConstInt(i32t, 1 << 0, 0); bits[1] = LLVMConstInt(i32t, 1 << 1, 0); - bits[2] = LLVMConstInt(i32t, 1 << 2, 0); - bits[3] = LLVMConstInt(i32t, 1 << 3, 0); - + bits[2] = LLVMConstInt(i32t, 1 << 4, 0); + bits[3] = LLVMConstInt(i32t, 1 << 5, 0); + mask = LLVMBuildAnd(builder, mask, LLVMConstVector(bits, 4), ""); /* |