mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-11 05:50:14 +01:00
r300g: finally fix the texture corruption on r3xx-r4xx
Even though a bound texture stays bound when calling set_fragment_sampler_views, it must be assigned a new cache region depending on the occupancy of other texture units. This fixes: https://bugs.freedesktop.org/show_bug.cgi?id=28800 Thanks to Álmos <aaalmosss@gmail.com> for finding the bug in the code. NOTE: This is a candidate for both the 7.9 and 7.10 branches.
This commit is contained in:
parent
d0f8eea9a0
commit
daffaca53e
1 changed files with 19 additions and 21 deletions
|
|
@ -1298,29 +1298,27 @@ static void r300_set_fragment_sampler_views(struct pipe_context* pipe,
|
|||
}
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
if (&state->sampler_views[i]->base != views[i]) {
|
||||
pipe_sampler_view_reference(
|
||||
(struct pipe_sampler_view**)&state->sampler_views[i],
|
||||
views[i]);
|
||||
pipe_sampler_view_reference(
|
||||
(struct pipe_sampler_view**)&state->sampler_views[i],
|
||||
views[i]);
|
||||
|
||||
if (!views[i]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* A new sampler view (= texture)... */
|
||||
dirty_tex = TRUE;
|
||||
|
||||
/* Set the texrect factor in the fragment shader.
|
||||
* Needed for RECT and NPOT fallback. */
|
||||
texture = r300_texture(views[i]->texture);
|
||||
if (texture->desc.is_npot) {
|
||||
r300_mark_atom_dirty(r300, &r300->fs_rc_constant_state);
|
||||
}
|
||||
|
||||
state->sampler_views[i]->texcache_region =
|
||||
r300_assign_texture_cache_region(view_index, real_num_views);
|
||||
view_index++;
|
||||
if (!views[i]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* A new sampler view (= texture)... */
|
||||
dirty_tex = TRUE;
|
||||
|
||||
/* Set the texrect factor in the fragment shader.
|
||||
* Needed for RECT and NPOT fallback. */
|
||||
texture = r300_texture(views[i]->texture);
|
||||
if (texture->desc.is_npot) {
|
||||
r300_mark_atom_dirty(r300, &r300->fs_rc_constant_state);
|
||||
}
|
||||
|
||||
state->sampler_views[i]->texcache_region =
|
||||
r300_assign_texture_cache_region(view_index, real_num_views);
|
||||
view_index++;
|
||||
}
|
||||
|
||||
for (i = count; i < tex_units; i++) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue