mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
gallium: push offset down to driver
Push offset down to drivers when importing dmabuf. This is needed to more fully support EGL_EXT_image_dma_buf_import when a non-zero offset is specified. Tesing has been done for freedreno, and compile tested following gallium drivers: nouveau,svga,virgl,r600,r300,radeonsi,swrast,i915,ilo Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
This commit is contained in:
parent
30d28d7c31
commit
e382bc649b
9 changed files with 53 additions and 5 deletions
|
|
@ -89,6 +89,12 @@ nouveau_screen_bo_from_handle(struct pipe_screen *pscreen,
|
|||
struct nouveau_bo *bo = 0;
|
||||
int ret;
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
debug_printf("%s: attempt to import unsupported winsys offset %d\n",
|
||||
__FUNCTION__, whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (whandle->type != DRM_API_HANDLE_TYPE_SHARED &&
|
||||
whandle->type != DRM_API_HANDLE_TYPE_FD) {
|
||||
debug_printf("%s: attempt to import unsupported handle type %d\n",
|
||||
|
|
|
|||
|
|
@ -559,6 +559,13 @@ vc4_screen_bo_from_handle(struct pipe_screen *pscreen,
|
|||
{
|
||||
struct vc4_screen *screen = vc4_screen(pscreen);
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
fprintf(stderr,
|
||||
"Attempt to import unsupported winsys offset %u\n",
|
||||
whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (whandle->type) {
|
||||
case DRM_API_HANDLE_TYPE_SHARED:
|
||||
return vc4_bo_open_name(screen, whandle->handle, whandle->stride);
|
||||
|
|
|
|||
|
|
@ -790,8 +790,6 @@ dri2_create_image_from_winsys(__DRIscreen *_screen,
|
|||
templ.depth0 = 1;
|
||||
templ.array_size = 1;
|
||||
|
||||
whandle->offset = 0;
|
||||
|
||||
img->texture = screen->base.screen->resource_from_handle(screen->base.screen,
|
||||
&templ, whandle, PIPE_HANDLE_USAGE_READ_WRITE);
|
||||
if (!img->texture) {
|
||||
|
|
@ -842,7 +840,7 @@ dri2_create_image_from_fd(__DRIscreen *_screen,
|
|||
__DRIimage *img = NULL;
|
||||
unsigned err = __DRI_IMAGE_ERROR_SUCCESS;
|
||||
|
||||
if (num_fds != 1 || offsets[0] != 0) {
|
||||
if (num_fds != 1) {
|
||||
err = __DRI_IMAGE_ERROR_BAD_MATCH;
|
||||
goto exit;
|
||||
}
|
||||
|
|
@ -1056,8 +1054,6 @@ dri2_from_names(__DRIscreen *screen, int width, int height, int format,
|
|||
|
||||
if (num_names != 1)
|
||||
return NULL;
|
||||
if (offsets[0] != 0)
|
||||
return NULL;
|
||||
|
||||
format = convert_fourcc(format, &dri_components);
|
||||
if (format == -1)
|
||||
|
|
@ -1067,6 +1063,7 @@ dri2_from_names(__DRIscreen *screen, int width, int height, int format,
|
|||
whandle.type = DRM_API_HANDLE_TYPE_SHARED;
|
||||
whandle.handle = names[0];
|
||||
whandle.stride = strides[0];
|
||||
whandle.offset = offsets[0];
|
||||
|
||||
img = dri2_create_image_from_winsys(screen, width, height, format,
|
||||
&whandle, loaderPrivate);
|
||||
|
|
|
|||
|
|
@ -101,6 +101,9 @@ i915_drm_buffer_from_handle(struct i915_winsys *iws,
|
|||
if ((whandle->type != DRM_API_HANDLE_TYPE_SHARED) && (whandle->type != DRM_API_HANDLE_TYPE_FD))
|
||||
return NULL;
|
||||
|
||||
if (whandle->offset != 0)
|
||||
return NULL;
|
||||
|
||||
buf = CALLOC_STRUCT(i915_drm_buffer);
|
||||
if (!buf)
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -313,6 +313,11 @@ intel_winsys_import_handle(struct intel_winsys *winsys,
|
|||
drm_intel_bo *bo;
|
||||
int err;
|
||||
|
||||
if (handle->offset != 0) {
|
||||
debug_error("attempt to import unsupported winsys offset");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (handle->type) {
|
||||
case DRM_API_HANDLE_TYPE_SHARED:
|
||||
{
|
||||
|
|
|
|||
|
|
@ -858,6 +858,12 @@ static struct pb_buffer *radeon_winsys_bo_from_handle(struct radeon_winsys *rws,
|
|||
unsigned handle;
|
||||
uint64_t size = 0;
|
||||
|
||||
if (!offset && whandle->offset != 0) {
|
||||
fprintf(stderr, "attempt to import unsupported winsys offset %u\n",
|
||||
whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* We must maintain a list of pairs <handle, bo>, so that we always return
|
||||
* the same BO for one particular handle. If we didn't do that and created
|
||||
* more than one BO for the same handle and then relocated them in a CS,
|
||||
|
|
|
|||
|
|
@ -186,6 +186,12 @@ vmw_drm_gb_surface_from_handle(struct svga_winsys_screen *sws,
|
|||
uint32_t handle;
|
||||
int ret;
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
fprintf(stderr, "Attempt to import unsupported winsys offset %u\n",
|
||||
whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret = vmw_ioctl_gb_surface_ref(vws, whandle, &flags, format,
|
||||
&mip_levels, &handle, &desc.region);
|
||||
|
||||
|
|
@ -253,6 +259,12 @@ vmw_drm_surface_from_handle(struct svga_winsys_screen *sws,
|
|||
int ret;
|
||||
int i;
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
fprintf(stderr, "Attempt to import unsupported winsys offset %u\n",
|
||||
whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (whandle->type) {
|
||||
case DRM_API_HANDLE_TYPE_SHARED:
|
||||
case DRM_API_HANDLE_TYPE_KMS:
|
||||
|
|
|
|||
|
|
@ -266,6 +266,12 @@ kms_sw_displaytarget_from_handle(struct sw_winsys *ws,
|
|||
assert(whandle->type == DRM_API_HANDLE_TYPE_KMS ||
|
||||
whandle->type == DRM_API_HANDLE_TYPE_FD);
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
DEBUG_PRINT("KMS-DEBUG: attempt to import unsupported winsys offset %d\n",
|
||||
whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch(whandle->type) {
|
||||
case DRM_API_HANDLE_TYPE_FD:
|
||||
kms_sw_dt = kms_sw_displaytarget_add_from_prime(kms_sw, whandle->handle);
|
||||
|
|
|
|||
|
|
@ -380,6 +380,12 @@ virgl_drm_winsys_resource_create_handle(struct virgl_winsys *qws,
|
|||
struct virgl_hw_res *res;
|
||||
uint32_t handle = whandle->handle;
|
||||
|
||||
if (whandle->offset != 0) {
|
||||
fprintf(stderr, "attempt to import unsupported winsys offset %u\n",
|
||||
whandle->offset);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pipe_mutex_lock(qdws->bo_handles_mutex);
|
||||
|
||||
if (whandle->type == DRM_API_HANDLE_TYPE_SHARED) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue