diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c index be87e6b3da2..bae7f3101f6 100644 --- a/src/gallium/drivers/virgl/virgl_resource.c +++ b/src/gallium/drivers/virgl/virgl_resource.c @@ -572,7 +572,8 @@ static struct pipe_resource *virgl_resource_from_handle(struct pipe_screen *scre &plane, &winsys_stride, &plane_offset, - &modifier); + &modifier, + &res->blob_mem); virgl_resource_layout(&res->u.b, &res->metadata, plane, winsys_stride, plane_offset, modifier); diff --git a/src/gallium/drivers/virgl/virgl_resource.h b/src/gallium/drivers/virgl/virgl_resource.h index 2e0a078ad50..1107643d447 100644 --- a/src/gallium/drivers/virgl/virgl_resource.h +++ b/src/gallium/drivers/virgl/virgl_resource.h @@ -33,6 +33,10 @@ #include "virgl_screen.h" #define VR_MAX_TEXTURE_2D_LEVELS 15 +#define VIRGL_BLOB_MEM_GUEST 1 +#define VIRGL_BLOB_MEM_HOST3D 2 +#define VIRGL_BLOB_MEM_HOST3D_GUEST 3 + struct winsys_handle; struct virgl_screen; struct virgl_context; @@ -63,6 +67,7 @@ struct virgl_resource { * usable. */ unsigned bind_history; + uint32_t blob_mem; }; struct virgl_transfer { diff --git a/src/gallium/drivers/virgl/virgl_winsys.h b/src/gallium/drivers/virgl/virgl_winsys.h index 30d2afbd58e..29f2ed8d930 100644 --- a/src/gallium/drivers/virgl/virgl_winsys.h +++ b/src/gallium/drivers/virgl/virgl_winsys.h @@ -85,7 +85,8 @@ struct virgl_winsys { uint32_t *plane, uint32_t *stride, uint32_t *plane_offset, - uint64_t *modifier); + uint64_t *modifier, + uint32_t *blob_mem); boolean (*resource_get_handle)(struct virgl_winsys *vws, struct virgl_hw_res *res, uint32_t stride, diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c index 27225346b35..a5a672e5c1e 100644 --- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c +++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.c @@ -389,7 +389,8 @@ virgl_drm_winsys_resource_create_handle(struct virgl_winsys *qws, uint32_t *plane, uint32_t *stride, uint32_t *plane_offset, - uint64_t *modifier) + uint64_t *modifier, + uint32_t *blob_mem) { struct virgl_drm_winsys *qdws = virgl_drm_winsys(qws); struct drm_gem_open open_arg = {}; @@ -464,6 +465,8 @@ virgl_drm_winsys_resource_create_handle(struct virgl_winsys *qws, } res->res_handle = info_arg.res_handle; + res->blob_mem = info_arg.blob_mem; + *blob_mem = info_arg.blob_mem; res->size = info_arg.size; pipe_reference_init(&res->reference, 1); diff --git a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h index 2d35f42cffc..0f8ecabc194 100644 --- a/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h +++ b/src/gallium/winsys/virgl/drm/virgl_drm_winsys.h @@ -52,6 +52,7 @@ struct virgl_hw_res { /* false when the resource is known to be idle */ int maybe_busy; + uint32_t blob_mem; };