dri: add backbuffer use flag
This will be used by the next commit. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -1100,6 +1100,11 @@ struct __DRIdri2ExtensionRec {
|
|||||||
#define __DRI_IMAGE_USE_SCANOUT 0x0002
|
#define __DRI_IMAGE_USE_SCANOUT 0x0002
|
||||||
#define __DRI_IMAGE_USE_CURSOR 0x0004 /* Depricated */
|
#define __DRI_IMAGE_USE_CURSOR 0x0004 /* Depricated */
|
||||||
#define __DRI_IMAGE_USE_LINEAR 0x0008
|
#define __DRI_IMAGE_USE_LINEAR 0x0008
|
||||||
|
/* The buffer will only be read by an external process after SwapBuffers,
|
||||||
|
* in contrary to gbm buffers, front buffers and fake front buffers, which
|
||||||
|
* could be read after a flush."
|
||||||
|
*/
|
||||||
|
#define __DRI_IMAGE_USE_BACKBUFFER 0x0010
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -305,7 +305,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
|||||||
{
|
{
|
||||||
struct dri2_egl_display *dri2_dpy =
|
struct dri2_egl_display *dri2_dpy =
|
||||||
dri2_egl_display(dri2_surf->base.Resource.Display);
|
dri2_egl_display(dri2_surf->base.Resource.Display);
|
||||||
int i;
|
int i, use_flags;
|
||||||
unsigned int dri_image_format;
|
unsigned int dri_image_format;
|
||||||
|
|
||||||
/* currently supports three WL DRM formats,
|
/* currently supports three WL DRM formats,
|
||||||
@@ -352,6 +352,8 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
|||||||
if (dri2_surf->back == NULL)
|
if (dri2_surf->back == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
use_flags = __DRI_IMAGE_USE_SHARE | __DRI_IMAGE_USE_BACKBUFFER;
|
||||||
|
|
||||||
if (dri2_dpy->is_different_gpu &&
|
if (dri2_dpy->is_different_gpu &&
|
||||||
dri2_surf->back->linear_copy == NULL) {
|
dri2_surf->back->linear_copy == NULL) {
|
||||||
dri2_surf->back->linear_copy =
|
dri2_surf->back->linear_copy =
|
||||||
@@ -359,7 +361,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
|||||||
dri2_surf->base.Width,
|
dri2_surf->base.Width,
|
||||||
dri2_surf->base.Height,
|
dri2_surf->base.Height,
|
||||||
dri_image_format,
|
dri_image_format,
|
||||||
__DRI_IMAGE_USE_SHARE |
|
use_flags |
|
||||||
__DRI_IMAGE_USE_LINEAR,
|
__DRI_IMAGE_USE_LINEAR,
|
||||||
NULL);
|
NULL);
|
||||||
if (dri2_surf->back->linear_copy == NULL)
|
if (dri2_surf->back->linear_copy == NULL)
|
||||||
@@ -373,7 +375,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
|
|||||||
dri2_surf->base.Height,
|
dri2_surf->base.Height,
|
||||||
dri_image_format,
|
dri_image_format,
|
||||||
dri2_dpy->is_different_gpu ?
|
dri2_dpy->is_different_gpu ?
|
||||||
0 : __DRI_IMAGE_USE_SHARE,
|
0 : use_flags,
|
||||||
NULL);
|
NULL);
|
||||||
dri2_surf->back->age = 0;
|
dri2_surf->back->age = 0;
|
||||||
}
|
}
|
||||||
|
@@ -858,7 +858,8 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
|
|||||||
width, height,
|
width, height,
|
||||||
format,
|
format,
|
||||||
__DRI_IMAGE_USE_SHARE |
|
__DRI_IMAGE_USE_SHARE |
|
||||||
__DRI_IMAGE_USE_SCANOUT,
|
__DRI_IMAGE_USE_SCANOUT |
|
||||||
|
__DRI_IMAGE_USE_BACKBUFFER,
|
||||||
buffer);
|
buffer);
|
||||||
pixmap_buffer = buffer->image;
|
pixmap_buffer = buffer->image;
|
||||||
|
|
||||||
@@ -878,7 +879,8 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format,
|
|||||||
(draw->ext->image->createImage)(draw->dri_screen,
|
(draw->ext->image->createImage)(draw->dri_screen,
|
||||||
width, height, format,
|
width, height, format,
|
||||||
__DRI_IMAGE_USE_SHARE |
|
__DRI_IMAGE_USE_SHARE |
|
||||||
__DRI_IMAGE_USE_LINEAR,
|
__DRI_IMAGE_USE_LINEAR |
|
||||||
|
__DRI_IMAGE_USE_BACKBUFFER,
|
||||||
buffer);
|
buffer);
|
||||||
pixmap_buffer = buffer->linear_buffer;
|
pixmap_buffer = buffer->linear_buffer;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user