mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 10:30:08 +01:00
i965: Resolve color for non-coherent FB fetch at UpdateState time.
This is required because the sampler unit used to fetch from the framebuffer is unable to interpret non-color-compressed fast-cleared single-sample texture data. Roughly the same limitation applies for surfaces bound to texture or image units, but unlike texture sampling, non-coherent framebuffer fetch is by definition non-coherent with previous rendering, so the brw_render_cache_set_check_flush() call can be omitted except after resolve. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
071665c161
commit
99fb167839
1 changed files with 17 additions and 0 deletions
|
|
@ -262,6 +262,23 @@ intel_update_state(struct gl_context * ctx, GLuint new_state)
|
|||
}
|
||||
}
|
||||
|
||||
/* Resolve color buffers for non-coherent framebufer fetch. */
|
||||
if (!ctx->Extensions.MESA_shader_framebuffer_fetch &&
|
||||
ctx->FragmentProgram._Current &&
|
||||
ctx->FragmentProgram._Current->Base.OutputsRead) {
|
||||
const struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
|
||||
for (unsigned i = 0; i < fb->_NumColorDrawBuffers; i++) {
|
||||
const struct intel_renderbuffer *irb =
|
||||
intel_renderbuffer(fb->_ColorDrawBuffers[i]);
|
||||
|
||||
if (irb &&
|
||||
intel_miptree_resolve_color(brw, irb->mt,
|
||||
INTEL_MIPTREE_IGNORE_CCS_E))
|
||||
brw_render_cache_set_check_flush(brw, irb->mt->bo);
|
||||
}
|
||||
}
|
||||
|
||||
/* If FRAMEBUFFER_SRGB is used on Gen9+ then we need to resolve any of the
|
||||
* single-sampled color renderbuffers because the CCS buffer isn't
|
||||
* supported for SRGB formats. This only matters if FRAMEBUFFER_SRGB is
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue