diff options
author | Michel Dänzer <[email protected]> | 2009-08-27 20:29:32 +0200 |
---|---|---|
committer | Michel Dänzer <[email protected]> | 2009-08-27 20:29:32 +0200 |
commit | 416ee3c53eeb1664784f224a42e293e5fed783bc (patch) | |
tree | 458f5bcddf20d94d5d1a437d0e3a74b64768b2e3 /src | |
parent | bfbfcdd7036add7121eb728daad6131fd77304d0 (diff) |
st/xorg: Set shared usage of pixmaps for use via DRI2.
Also allow pixmaps to have both the shared and displayed usage flags, as is
the case for the screen pixmap now.
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/xorg/xorg_dri2.c | 10 | ||||
-rw-r--r-- | src/gallium/state_trackers/xorg/xorg_driver.c | 1 | ||||
-rw-r--r-- | src/gallium/state_trackers/xorg/xorg_exa.c | 12 |
3 files changed, 10 insertions, 13 deletions
diff --git a/src/gallium/state_trackers/xorg/xorg_dri2.c b/src/gallium/state_trackers/xorg/xorg_dri2.c index 111024692eb..1a4677b50e5 100644 --- a/src/gallium/state_trackers/xorg/xorg_dri2.c +++ b/src/gallium/state_trackers/xorg/xorg_dri2.c @@ -92,7 +92,6 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count) else pPixmap = (*pScreen->GetWindowPixmap)((WindowPtr) pDraw); pPixmap->refcnt++; - tex = xorg_exa_get_texture(pPixmap); } else if (attachments[i] == DRI2BufferStencil) { pipe_texture_reference(&tex, depth); } else if (attachments[i] == DRI2BufferDepth) { @@ -110,19 +109,24 @@ driCreateBuffers(DrawablePtr pDraw, unsigned int *attachments, int count) template.height[0] = pDraw->height; template.depth[0] = 1; template.last_level = 0; - template.tex_usage = PIPE_TEXTURE_USAGE_DEPTH_STENCIL; + template.tex_usage = PIPE_TEXTURE_USAGE_DEPTH_STENCIL | + PIPE_TEXTURE_USAGE_DISPLAY_TARGET; tex = ms->screen->texture_create(ms->screen, &template); depth = tex; } else if (attachments[i] == DRI2BufferFakeFrontLeft && pDraw->type == DRAWABLE_PIXMAP) { pPixmap = (PixmapPtr) pDraw; pPixmap->refcnt++; - tex = xorg_exa_get_texture(pPixmap); } else { pPixmap = (*pScreen->CreatePixmap)(pScreen, pDraw->width, pDraw->height, pDraw->depth, 0); + } + + if (pPixmap) { + xorg_exa_set_shared_usage(pPixmap); + pScreen->ModifyPixmapHeader(pPixmap, 0, 0, 0, 0, 0, NULL); tex = xorg_exa_get_texture(pPixmap); } diff --git a/src/gallium/state_trackers/xorg/xorg_driver.c b/src/gallium/state_trackers/xorg/xorg_driver.c index 923662b24a9..d2253459696 100644 --- a/src/gallium/state_trackers/xorg/xorg_driver.c +++ b/src/gallium/state_trackers/xorg/xorg_driver.c @@ -481,6 +481,7 @@ CreateScreenResources(ScreenPtr pScreen) rootPixmap = pScreen->GetScreenPixmap(pScreen); xorg_exa_set_displayed_usage(rootPixmap); + xorg_exa_set_shared_usage(rootPixmap); if (!pScreen->ModifyPixmapHeader(rootPixmap, -1, -1, -1, -1, -1, NULL)) FatalError("Couldn't adjust screen pixmap\n"); diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c b/src/gallium/state_trackers/xorg/xorg_exa.c index 01846087ef1..4fc8d325abe 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa.c +++ b/src/gallium/state_trackers/xorg/xorg_exa.c @@ -373,11 +373,7 @@ xorg_exa_set_displayed_usage(PixmapPtr pPixmap) return 0; } - if (priv->flags & ~PIPE_TEXTURE_USAGE_PRIMARY) { - FatalError("BAD FLAGS\n"); - return 0; - } - priv->flags = PIPE_TEXTURE_USAGE_PRIMARY; + priv->flags |= PIPE_TEXTURE_USAGE_PRIMARY; return 0; } @@ -393,11 +389,7 @@ xorg_exa_set_shared_usage(PixmapPtr pPixmap) return 0; } - if (priv->flags & ~PIPE_TEXTURE_USAGE_DISPLAY_TARGET) { - FatalError("BAD FLAGS\n"); - return 0; - } - priv->flags = PIPE_TEXTURE_USAGE_DISPLAY_TARGET; + priv->flags |= PIPE_TEXTURE_USAGE_DISPLAY_TARGET; return 0; } |