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.
This commit is contained in:
Michel Dänzer 2009-08-27 20:29:32 +02:00
parent bfbfcdd703
commit 416ee3c53e
3 changed files with 10 additions and 13 deletions

View File

@ -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);
}

View File

@ -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");

View File

@ -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;
}