diff options
author | Michel Dänzer <daenzer@vmware.com> | 2009-08-27 20:29:32 +0200 |
---|---|---|
committer | Michel Dänzer <daenzer@vmware.com> | 2009-08-27 20:29:32 +0200 |
commit | 416ee3c53eeb1664784f224a42e293e5fed783bc (patch) | |
tree | 458f5bcddf20d94d5d1a437d0e3a74b64768b2e3 /src/gallium/state_trackers | |
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/gallium/state_trackers')
-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 111024692e..1a4677b50e 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 923662b24a..d225345969 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 01846087ef..4fc8d325ab 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; } |