st/dri: Find out if the drawable is a pixmap
Part of this code is disabled since no performance gains where detected with it enabled. This code only detects if it is a pixmap that it is rendering to on the st/xorg DDX since it sets the fake front to the same handle as front.
This commit is contained in:
parent
6237ac2412
commit
a3e59b9d06
|
@ -87,6 +87,35 @@ dri_surface_from_handle(struct drm_api *api,
|
|||
return surface;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pixmaps have will have the same name of fake front and front.
|
||||
*/
|
||||
static boolean
|
||||
dri2_check_if_pixmap(__DRIbuffer *buffers, int count)
|
||||
{
|
||||
boolean found = FALSE;
|
||||
boolean is_pixmap = FALSE;
|
||||
unsigned name;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
switch (buffers[i].attachment) {
|
||||
case __DRI_BUFFER_FRONT_LEFT:
|
||||
case __DRI_BUFFER_FAKE_FRONT_LEFT:
|
||||
if (found) {
|
||||
is_pixmap = buffers[i].name == name;
|
||||
} else {
|
||||
name = buffers[i].name;
|
||||
found = TRUE;
|
||||
}
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return is_pixmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* This will be called a drawable is known to have been resized.
|
||||
*/
|
||||
|
@ -145,6 +174,8 @@ dri_get_buffers(__DRIdrawablePrivate * dPriv)
|
|||
memcpy(drawable->old, buffers, sizeof(__DRIbuffer) * count);
|
||||
}
|
||||
|
||||
drawable->is_pixmap = dri2_check_if_pixmap(buffers, count);
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
enum pipe_format format = 0;
|
||||
int index = 0;
|
||||
|
@ -234,6 +265,12 @@ dri_flush_frontbuffer(struct pipe_screen *screen,
|
|||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* TODO if rendering to pixmaps is slow enable this code. */
|
||||
if (drawable->is_pixmap)
|
||||
return;
|
||||
#endif
|
||||
|
||||
(*dri_screen->dri2.loader->flushFrontBuffer)(dri_drawable,
|
||||
dri_drawable->loaderPrivate);
|
||||
}
|
||||
|
|
|
@ -46,6 +46,8 @@ struct dri_drawable
|
|||
unsigned attachments[8];
|
||||
unsigned num_attachments;
|
||||
|
||||
boolean is_pixmap;
|
||||
|
||||
__DRIbuffer old[8];
|
||||
unsigned old_num;
|
||||
unsigned old_w;
|
||||
|
|
Loading…
Reference in New Issue