diff options
author | Marek Olšák <maraeo@gmail.com> | 2010-04-15 09:26:07 +0200 |
---|---|---|
committer | Marek Olšák <maraeo@gmail.com> | 2010-04-15 10:10:28 +0200 |
commit | 6bd6f4cd4984e7afe7969e5dfe9796079c07b6bc (patch) | |
tree | 9083b27794bb0448fce6e41300e7441f1c6dd8b4 /src/gallium/drivers/r300/r300_state_derived.c | |
parent | ebf765a32460e5ec136892c1ea6f5e0166a0bd66 (diff) |
r300g: pick a new fragment shader when either a sampler state or view is changed
Diffstat (limited to 'src/gallium/drivers/r300/r300_state_derived.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_state_derived.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c index ddf7285731..a36cff98c3 100644 --- a/src/gallium/drivers/r300/r300_state_derived.c +++ b/src/gallium/drivers/r300/r300_state_derived.c @@ -30,6 +30,7 @@ #include "r300_fs.h" #include "r300_screen.h" #include "r300_shader_semantics.h" +#include "r300_state.h" #include "r300_state_derived.h" #include "r300_state_inlines.h" #include "r300_vs.h" @@ -550,18 +551,26 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300) } r300->textures_state.size = size; + + /* Pick a fragment shader based on either the texture compare state + * or the uses_pitch flag. */ + if (r300->fs.state && count) { + if (r300_pick_fragment_shader(r300)) { + r300_mark_fs_code_dirty(r300); + } + } } void r300_update_derived_state(struct r300_context* r300) { - if (r300->rs_block_state.dirty) { - r300_update_derived_shader_state(r300); - } - if (r300->textures_state.dirty) { r300_merge_textures_and_samplers(r300); } + if (r300->rs_block_state.dirty) { + r300_update_derived_shader_state(r300); + } + if (r300->draw) { memset(&r300->vertex_info, 0, sizeof(struct vertex_info)); r300_draw_emit_all_attribs(r300); |