intel: Also get the DRI2 front buffer when doing front buffer reading.
(cherry picked from commit df70d3049a
)
This commit is contained in:
@@ -22,6 +22,7 @@ DRIVER_SOURCES = \
|
|||||||
intel_pixel_bitmap.c \
|
intel_pixel_bitmap.c \
|
||||||
intel_pixel_copy.c \
|
intel_pixel_copy.c \
|
||||||
intel_pixel_draw.c \
|
intel_pixel_draw.c \
|
||||||
|
intel_pixel_read.c \
|
||||||
intel_state.c \
|
intel_state.c \
|
||||||
intel_swapbuffers.c \
|
intel_swapbuffers.c \
|
||||||
intel_tex.c \
|
intel_tex.c \
|
||||||
|
@@ -345,6 +345,23 @@ intelDrawBuffer(GLcontext * ctx, GLenum mode)
|
|||||||
static void
|
static void
|
||||||
intelReadBuffer(GLcontext * ctx, GLenum mode)
|
intelReadBuffer(GLcontext * ctx, GLenum mode)
|
||||||
{
|
{
|
||||||
|
if ((ctx->DrawBuffer != NULL) && (ctx->DrawBuffer->Name == 0)) {
|
||||||
|
struct intel_context *const intel = intel_context(ctx);
|
||||||
|
const GLboolean was_front_buffer_reading =
|
||||||
|
intel->is_front_buffer_reading;
|
||||||
|
|
||||||
|
intel->is_front_buffer_reading = (mode == GL_FRONT_LEFT)
|
||||||
|
|| (mode == GL_FRONT);
|
||||||
|
|
||||||
|
/* If we weren't front-buffer reading before but we are now, make sure
|
||||||
|
* that the front-buffer has actually been allocated.
|
||||||
|
*/
|
||||||
|
if (!was_front_buffer_reading && intel->is_front_buffer_reading) {
|
||||||
|
intel_update_renderbuffers(intel->driContext,
|
||||||
|
intel->driContext->driDrawablePriv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ctx->ReadBuffer == ctx->DrawBuffer) {
|
if (ctx->ReadBuffer == ctx->DrawBuffer) {
|
||||||
/* This will update FBO completeness status.
|
/* This will update FBO completeness status.
|
||||||
* A framebuffer will be incomplete if the GL_READ_BUFFER setting
|
* A framebuffer will be incomplete if the GL_READ_BUFFER setting
|
||||||
|
@@ -220,7 +220,9 @@ intel_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable)
|
|||||||
struct intel_renderbuffer *stencil_rb;
|
struct intel_renderbuffer *stencil_rb;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
if ((intel->is_front_buffer_rendering || !intel_fb->color_rb[1])
|
if ((intel->is_front_buffer_rendering ||
|
||||||
|
intel->is_front_buffer_reading ||
|
||||||
|
!intel_fb->color_rb[1])
|
||||||
&& intel_fb->color_rb[0]) {
|
&& intel_fb->color_rb[0]) {
|
||||||
attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
|
attachments[i++] = __DRI_BUFFER_FRONT_LEFT;
|
||||||
attachments[i++] = intel_bits_per_pixel(intel_fb->color_rb[0]);
|
attachments[i++] = intel_bits_per_pixel(intel_fb->color_rb[0]);
|
||||||
|
@@ -295,6 +295,14 @@ struct intel_context
|
|||||||
* easily.
|
* easily.
|
||||||
*/
|
*/
|
||||||
GLboolean is_front_buffer_rendering;
|
GLboolean is_front_buffer_rendering;
|
||||||
|
/**
|
||||||
|
* Track whether front-buffer is the current read target.
|
||||||
|
*
|
||||||
|
* This is closely associated with is_front_buffer_rendering, but may
|
||||||
|
* be set separately. The DRI2 fake front buffer must be referenced
|
||||||
|
* either way.
|
||||||
|
*/
|
||||||
|
GLboolean is_front_buffer_reading;
|
||||||
|
|
||||||
drm_clip_rect_t fboRect; /**< cliprect for FBO rendering */
|
drm_clip_rect_t fboRect; /**< cliprect for FBO rendering */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user