mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 18:00:24 +01:00
intel: Prevent an "irq is not working" printf when only pipe B is enabled.
intelMakeCurrent is called before intelWindowMoved (in fact, it calls it), so calculation of the correct vblank crtc has not happened yet. Fix this by making a function that fixes up a set of vblank flags and call if from both functions.
This commit is contained in:
parent
6f8896c599
commit
39b4061bb9
3 changed files with 34 additions and 8 deletions
|
|
@ -143,16 +143,13 @@ intel_get_cliprects(struct intel_context *intel,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This will be called whenever the currently bound window is moved/resized.
|
||||
* XXX: actually, it seems to NOT be called when the window is only moved (BP).
|
||||
/*
|
||||
* Correct a drawablePrivate's set of vblank flags WRT the current context.
|
||||
* When considering multiple crtcs.
|
||||
*/
|
||||
void
|
||||
intelWindowMoved(struct intel_context *intel)
|
||||
GLuint
|
||||
intelFixupVblank(struct intel_context *intel, __DRIdrawablePrivate *dPriv)
|
||||
{
|
||||
GLcontext *ctx = &intel->ctx;
|
||||
__DRIdrawablePrivate *dPriv = intel->driDrawable;
|
||||
struct intel_framebuffer *intel_fb = dPriv->driverPrivate;
|
||||
|
||||
if (!intel->intelScreen->driScrnPriv->dri2.enabled &&
|
||||
intel->intelScreen->driScrnPriv->ddx_version.minor >= 7) {
|
||||
|
|
@ -177,6 +174,27 @@ intelWindowMoved(struct intel_context *intel)
|
|||
flags = dPriv->vblFlags & ~VBLANK_FLAG_SECONDARY;
|
||||
}
|
||||
|
||||
return flags;
|
||||
} else {
|
||||
return dPriv->vblFlags & ~VBLANK_FLAG_SECONDARY;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This will be called whenever the currently bound window is moved/resized.
|
||||
* XXX: actually, it seems to NOT be called when the window is only moved (BP).
|
||||
*/
|
||||
void
|
||||
intelWindowMoved(struct intel_context *intel)
|
||||
{
|
||||
GLcontext *ctx = &intel->ctx;
|
||||
__DRIdrawablePrivate *dPriv = intel->driDrawable;
|
||||
struct intel_framebuffer *intel_fb = dPriv->driverPrivate;
|
||||
|
||||
if (!intel->intelScreen->driScrnPriv->dri2.enabled &&
|
||||
intel->intelScreen->driScrnPriv->ddx_version.minor >= 7) {
|
||||
GLuint flags = intelFixupVblank(intel, dPriv);
|
||||
|
||||
/* Check to see if we changed pipes */
|
||||
if (flags != dPriv->vblFlags && dPriv->vblFlags &&
|
||||
!(dPriv->vblFlags & VBLANK_FLAG_NO_IRQ)) {
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@ extern struct intel_region *intel_drawbuf_region(struct intel_context *intel);
|
|||
|
||||
extern void intelSwapBuffers(__DRIdrawablePrivate * dPriv);
|
||||
|
||||
extern GLuint intelFixupVblank(struct intel_context *intel,
|
||||
__DRIdrawablePrivate *dPriv);
|
||||
|
||||
extern void intelWindowMoved(struct intel_context *intel);
|
||||
|
||||
extern void intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb);
|
||||
|
|
|
|||
|
|
@ -865,6 +865,11 @@ intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
|
|||
? driGetDefaultVBlankFlags(&intel->optionCache)
|
||||
: VBLANK_FLAG_NO_IRQ;
|
||||
|
||||
/* Prevent error printf if one crtc is disabled, this will
|
||||
* be properly calculated in intelWindowMoved() next.
|
||||
*/
|
||||
driDrawPriv->vblFlags = intelFixupVblank(intel, driDrawPriv);
|
||||
|
||||
(*psp->systemTime->getUST) (&intel_fb->swap_ust);
|
||||
driDrawableInitVBlank(driDrawPriv);
|
||||
intel_fb->vbl_waited = driDrawPriv->vblSeq;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue