mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 13:10:10 +01:00
i965: Skip reallocating the private MSAA miptree, unless it's resized.
Even if the singlesample_mt got reopened from DRI due to pageflipping/buffer swapping, our private miptree shouldn't need any changes. Improves performance of a little swapbuffers-loving microbenchmark with MSAA forced on, by 1.2371% +/- 0.624802% (n=102) Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
44e944c87c
commit
dd4b226184
1 changed files with 29 additions and 18 deletions
|
|
@ -681,9 +681,6 @@ intel_update_winsys_renderbuffer_miptree(struct brw_context *intel,
|
|||
mesa_format format = rb->Format;
|
||||
int num_samples = rb->NumSamples;
|
||||
|
||||
intel_miptree_release(&irb->mt);
|
||||
intel_miptree_release(&irb->singlesample_mt);
|
||||
|
||||
/* Only the front and back buffers, which are color buffers, are allocated
|
||||
* through the image loader.
|
||||
*/
|
||||
|
|
@ -699,7 +696,8 @@ intel_update_winsys_renderbuffer_miptree(struct brw_context *intel,
|
|||
region->pitch,
|
||||
region->tiling);
|
||||
if (!singlesample_mt)
|
||||
return;
|
||||
goto fail;
|
||||
|
||||
singlesample_mt->region->name = region->name;
|
||||
|
||||
/* If this miptree is capable of supporting fast color clears, set
|
||||
|
|
@ -711,23 +709,36 @@ intel_update_winsys_renderbuffer_miptree(struct brw_context *intel,
|
|||
singlesample_mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_RESOLVED;
|
||||
|
||||
if (num_samples == 0) {
|
||||
intel_miptree_release(&irb->mt);
|
||||
irb->mt = singlesample_mt;
|
||||
return;
|
||||
}
|
||||
|
||||
multisample_mt = intel_miptree_create_for_renderbuffer(intel,
|
||||
format,
|
||||
region->width,
|
||||
region->height,
|
||||
num_samples);
|
||||
if (!multisample_mt) {
|
||||
intel_miptree_release(&singlesample_mt);
|
||||
return;
|
||||
}
|
||||
assert(!irb->singlesample_mt);
|
||||
} else {
|
||||
intel_miptree_release(&irb->singlesample_mt);
|
||||
irb->singlesample_mt = singlesample_mt;
|
||||
|
||||
irb->need_downsample = false;
|
||||
irb->mt = multisample_mt;
|
||||
irb->singlesample_mt = singlesample_mt;
|
||||
if (!irb->mt ||
|
||||
irb->mt->logical_width0 != region->width ||
|
||||
irb->mt->logical_height0 != region->height) {
|
||||
multisample_mt = intel_miptree_create_for_renderbuffer(intel,
|
||||
format,
|
||||
region->width,
|
||||
region->height,
|
||||
num_samples);
|
||||
if (!multisample_mt)
|
||||
goto fail;
|
||||
|
||||
irb->need_downsample = false;
|
||||
intel_miptree_release(&irb->mt);
|
||||
irb->mt = multisample_mt;
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
||||
fail:
|
||||
intel_miptree_release(&irb->singlesample_mt);
|
||||
intel_miptree_release(&irb->mt);
|
||||
return;
|
||||
}
|
||||
|
||||
struct intel_mipmap_tree*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue