diff options
author | José Fonseca <jfonseca@vmware.com> | 2010-09-12 10:14:50 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2010-09-12 10:15:48 +0100 |
commit | 853953dc3c5bd2ef9cca904c9cabc4a0ef037b16 (patch) | |
tree | 72e0f1241024fc1dc406db31d4c4d3632cbc7957 /src/gallium | |
parent | b5fcf0c8e07e666523b007fab1d0fc18c2c89241 (diff) |
llvmpipe: Only generate the whole shader specialization for opaque shaders.
If not opaque, then the color buffer will have to be read any way,
therefore the specialization is pointless.
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_fs.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 3a6011c784..1bcc16dd6d 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -850,9 +850,15 @@ generate_variant(struct llvmpipe_context *lp, lp_debug_fs_variant(variant); } - generate_fragment(lp, shader, variant, RAST_WHOLE); generate_fragment(lp, shader, variant, RAST_EDGE_TEST); + if (variant->opaque) { + /* Specialized shader, which doesn't need to read the color buffer. */ + generate_fragment(lp, shader, variant, RAST_WHOLE); + } else { + variant->jit_function[RAST_WHOLE] = variant->jit_function[RAST_EDGE_TEST]; + } + return variant; } |