mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 05:28:05 +02:00
intel: Resolve buffers in intelSpanRenderStart
Resolve all buffers that will be mapped by intelSpanRenderStart. This comprises resolving the depth buffer of each enabled texture and of the read and draw buffers. Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
parent
1eede4aa87
commit
622bae07a5
1 changed files with 39 additions and 1 deletions
|
|
@ -253,6 +253,42 @@ intel_framebuffer_unmap(struct intel_context *intel, struct gl_framebuffer *fb)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve all buffers that will be mapped by intelSpanRenderStart().
|
||||
*
|
||||
* Resolve the depth buffer of each enabled texture and of the read and draw
|
||||
* buffers.
|
||||
*
|
||||
* (Note: In the future this will also perform MSAA resolves.)
|
||||
*/
|
||||
static void
|
||||
intel_span_resolve_buffers(struct intel_context *intel)
|
||||
{
|
||||
struct gl_context *ctx = &intel->ctx;
|
||||
struct intel_renderbuffer *draw_irb;
|
||||
struct intel_renderbuffer *read_irb;
|
||||
struct intel_texture_object *tex_obj;
|
||||
|
||||
/* Resolve depth buffer of each enabled texture. */
|
||||
for (int i = 0; i < ctx->Const.MaxTextureImageUnits; i++) {
|
||||
if (!ctx->Texture.Unit[i]._ReallyEnabled)
|
||||
continue;
|
||||
tex_obj = intel_texture_object(ctx->Texture.Unit[i]._Current);
|
||||
intel_finalize_mipmap_tree(intel, i);
|
||||
if (!tex_obj || !tex_obj->mt)
|
||||
continue;
|
||||
intel_miptree_all_slices_resolve_depth(intel, tex_obj->mt);
|
||||
}
|
||||
|
||||
/* Resolve each attached depth buffer. */
|
||||
draw_irb = intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_DEPTH);
|
||||
read_irb = intel_get_renderbuffer(ctx->ReadBuffer, BUFFER_DEPTH);
|
||||
if (draw_irb)
|
||||
intel_renderbuffer_resolve_depth(intel, draw_irb);
|
||||
if (read_irb != draw_irb && read_irb)
|
||||
intel_renderbuffer_resolve_depth(intel, read_irb);
|
||||
}
|
||||
|
||||
/**
|
||||
* Map the regions needed by intelSpanRenderStart().
|
||||
*/
|
||||
|
|
@ -288,8 +324,10 @@ intelSpanRenderStart(struct gl_context * ctx)
|
|||
{
|
||||
struct intel_context *intel = intel_context(ctx);
|
||||
|
||||
intel_flush(&intel->ctx);
|
||||
intel_flush(ctx);
|
||||
intel_prepare_render(intel);
|
||||
intel_span_resolve_buffers(intel);
|
||||
intel_flush(ctx);
|
||||
intel_span_map_buffers(intel);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue