summaryrefslogtreecommitdiff
path: root/src/gallium/drivers
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2010-05-12 17:12:59 +0100
committerJosé Fonseca <jfonseca@vmware.com>2010-05-12 17:12:59 +0100
commit10fdbb9298489e9dfb2ecec0662abe29da5b6239 (patch)
tree4b04d91e68d69c1bf7496c2510271082558c67e5 /src/gallium/drivers
parent686215d9e5c87ace953b11559ec8ca24f5a3b4e4 (diff)
llvmpipe: Move the opaque flag computation into the variant.
Diffstat (limited to 'src/gallium/drivers')
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state.h2
-rw-r--r--src/gallium/drivers/llvmpipe/lp_state_fs.c27
2 files changed, 15 insertions, 14 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state.h b/src/gallium/drivers/llvmpipe/lp_state.h
index 848cb49f91..73778449ea 100644
--- a/src/gallium/drivers/llvmpipe/lp_state.h
+++ b/src/gallium/drivers/llvmpipe/lp_state.h
@@ -87,6 +87,8 @@ struct lp_fragment_shader_variant
{
struct lp_fragment_shader_variant_key key;
+ boolean opaque;
+
LLVMValueRef function[2];
lp_jit_frag_func jit_function[2];
diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c
index 09a680bf98..429aaab569 100644
--- a/src/gallium/drivers/llvmpipe/lp_state_fs.c
+++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c
@@ -965,6 +965,18 @@ generate_variant(struct llvmpipe_context *lp,
generate_fragment(lp, shader, variant, 0);
generate_fragment(lp, shader, variant, 1);
+ /* TODO: most of these can be relaxed, in particular the colormask */
+ variant->opaque =
+ !key->blend.logicop_enable &&
+ !key->blend.rt[0].blend_enable &&
+ key->blend.rt[0].colormask == 0xf &&
+ !key->stencil[0].enabled &&
+ !key->alpha.enabled &&
+ !key->depth.enabled &&
+ !key->scissor &&
+ !shader->info.uses_kill
+ ? TRUE : FALSE;
+
/* insert new variant into linked list */
variant->next = shader->variants;
shader->variants = variant;
@@ -1215,7 +1227,6 @@ llvmpipe_update_fs(struct llvmpipe_context *lp)
struct lp_fragment_shader *shader = lp->fs;
struct lp_fragment_shader_variant_key key;
struct lp_fragment_shader_variant *variant;
- boolean opaque;
make_variant_key(lp, shader, &key);
@@ -1240,22 +1251,10 @@ llvmpipe_update_fs(struct llvmpipe_context *lp)
LP_COUNT_ADD(nr_llvm_compiles, 2); /* emit vs. omit in/out test */
}
- /* TODO: put this in the variant */
- /* TODO: most of these can be relaxed, in particular the colormask */
- opaque = !key.blend.logicop_enable &&
- !key.blend.rt[0].blend_enable &&
- key.blend.rt[0].colormask == 0xf &&
- !key.stencil[0].enabled &&
- !key.alpha.enabled &&
- !key.depth.enabled &&
- !key.scissor &&
- !shader->info.uses_kill
- ? TRUE : FALSE;
-
lp_setup_set_fs_functions(lp->setup,
variant->jit_function[RAST_WHOLE],
variant->jit_function[RAST_EDGE_TEST],
- opaque);
+ variant->opaque);
}