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
+7 -3
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);
}
@@ -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");
+2 -10
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;
}