intel: Avoid dri2 GetBuffers round-trips for internal Viewport calls.
This gets us the savings for driver-internal viewport calls that
dd1c68f151 was attempting, without relying
on Xlib internals or clients handling X events.
This commit is contained in:
@@ -307,9 +307,11 @@ intel_viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
|
||||
if (!driContext->driScreenPriv->dri2.enabled)
|
||||
return;
|
||||
|
||||
intel_update_renderbuffers(driContext, driContext->driDrawablePriv);
|
||||
if (driContext->driDrawablePriv != driContext->driReadablePriv)
|
||||
intel_update_renderbuffers(driContext, driContext->driReadablePriv);
|
||||
if (!intel->internal_viewport_call) {
|
||||
intel_update_renderbuffers(driContext, driContext->driDrawablePriv);
|
||||
if (driContext->driDrawablePriv != driContext->driReadablePriv)
|
||||
intel_update_renderbuffers(driContext, driContext->driReadablePriv);
|
||||
}
|
||||
|
||||
old_viewport = ctx->Driver.Viewport;
|
||||
ctx->Driver.Viewport = NULL;
|
||||
|
||||
@@ -180,6 +180,7 @@ struct intel_context
|
||||
struct intel_region *front_region;
|
||||
struct intel_region *back_region;
|
||||
struct intel_region *depth_region;
|
||||
GLboolean internal_viewport_call;
|
||||
|
||||
/**
|
||||
* This value indicates that the kernel memory manager is being used
|
||||
|
||||
@@ -184,7 +184,9 @@ intel_meta_set_passthrough_transform(struct intel_context *intel)
|
||||
intel->meta.saved_vp_height = ctx->Viewport.Height;
|
||||
intel->meta.saved_matrix_mode = ctx->Transform.MatrixMode;
|
||||
|
||||
intel->internal_viewport_call = GL_TRUE;
|
||||
_mesa_Viewport(0, 0, ctx->DrawBuffer->Width, ctx->DrawBuffer->Height);
|
||||
intel->internal_viewport_call = GL_FALSE;
|
||||
|
||||
_mesa_MatrixMode(GL_PROJECTION);
|
||||
_mesa_PushMatrix();
|
||||
@@ -206,8 +208,10 @@ intel_meta_restore_transform(struct intel_context *intel)
|
||||
|
||||
_mesa_MatrixMode(intel->meta.saved_matrix_mode);
|
||||
|
||||
intel->internal_viewport_call = GL_TRUE;
|
||||
_mesa_Viewport(intel->meta.saved_vp_x, intel->meta.saved_vp_y,
|
||||
intel->meta.saved_vp_width, intel->meta.saved_vp_height);
|
||||
intel->internal_viewport_call = GL_FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user