mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 08:20:12 +01:00
i965/blorp: Handle DrawBuffers properly.
When the client program uses glDrawBuffer() or glDrawBuffers() to select more than one color buffer for drawing into, and then performs a blit, we need to blit into every single enabled draw buffer. +2 oglconforms. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50407 Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
parent
fa1d267beb
commit
ff9313fac7
1 changed files with 10 additions and 7 deletions
|
|
@ -233,13 +233,16 @@ try_blorp_blit(struct intel_context *intel,
|
|||
switch (buffer_bit) {
|
||||
case GL_COLOR_BUFFER_BIT:
|
||||
src_rb = read_fb->_ColorReadBuffer;
|
||||
dst_rb =
|
||||
draw_fb->Attachment[
|
||||
draw_fb->_ColorDrawBufferIndexes[0]].Renderbuffer;
|
||||
if (!formats_match(buffer_bit, src_rb, dst_rb))
|
||||
return false;
|
||||
do_blorp_blit(intel, buffer_bit, src_rb, dst_rb, srcX0, srcY0,
|
||||
dstX0, dstY0, dstX1, dstY1, mirror_x, mirror_y);
|
||||
for (unsigned i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; ++i) {
|
||||
dst_rb = ctx->DrawBuffer->_ColorDrawBuffers[i];
|
||||
if (dst_rb && !formats_match(buffer_bit, src_rb, dst_rb))
|
||||
return false;
|
||||
}
|
||||
for (unsigned i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; ++i) {
|
||||
dst_rb = ctx->DrawBuffer->_ColorDrawBuffers[i];
|
||||
do_blorp_blit(intel, buffer_bit, src_rb, dst_rb, srcX0, srcY0,
|
||||
dstX0, dstY0, dstX1, dstY1, mirror_x, mirror_y);
|
||||
}
|
||||
break;
|
||||
case GL_DEPTH_BUFFER_BIT:
|
||||
src_rb = read_fb->Attachment[BUFFER_DEPTH].Renderbuffer;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue