diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r3 index 0ad8a1f..6a008d9 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -1272,7 +1272,9 @@ static uint32_t r300_assign_texture_cache_region(unsigned if (num <= 1) return R300_TX_CACHE(R300_TX_CACHE_WHOLE); else - return R300_TX_CACHE(num + index); + /* XXX forcing every multitexturing into the smallest cache resolution + * prevents reusing half of an already assigned cache block */ + return R300_TX_CACHE(num + index+16); } static void r300_set_fragment_sampler_views(struct pipe_context* pipe, @@ -1317,11 +1319,58 @@ static void r300_set_fragment_sampler_views(struct pipe_ r300_mark_atom_dirty(r300, &r300->fs_rc_constant_state); } + /* XXX this change increases diversity in assigning + * cache blocks, but it is not a perfect solution */ state->sampler_views[i]->texcache_region = - r300_assign_texture_cache_region(view_index, real_num_views); + r300_assign_texture_cache_region(/*view_index*/i, real_num_view view_index++; } }