diff options
Diffstat (limited to 'src/gallium/drivers/etnaviv/etnaviv_resource.c')
-rw-r--r-- | src/gallium/drivers/etnaviv/etnaviv_resource.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index b1a814d4a39..c7eef96a6e8 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c @@ -479,12 +479,23 @@ etna_resource_get_handle(struct pipe_screen *pscreen, if (rsc->external) rsc = etna_resource(rsc->external); - if (handle->type == DRM_API_HANDLE_TYPE_KMS && - renderonly_get_handle(scanout, handle)) + handle->stride = rsc->levels[0].stride; + + if (handle->type == DRM_API_HANDLE_TYPE_SHARED) { + return etna_bo_get_name(rsc->bo, &handle->handle) == 0; + } else if (handle->type == DRM_API_HANDLE_TYPE_KMS) { + if (renderonly_get_handle(scanout, handle)) { + return TRUE; + } else { + handle->handle = etna_bo_handle(rsc->bo); + return TRUE; + } + } else if (handle->type == DRM_API_HANDLE_TYPE_FD) { + handle->handle = etna_bo_dmabuf(rsc->bo); return TRUE; - - return etna_screen_bo_get_handle(pscreen, rsc->bo, rsc->levels[0].stride, - handle); + } else { + return FALSE; + } } void |