summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/etnaviv/etnaviv_resource.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/etnaviv/etnaviv_resource.c')
-rw-r--r--src/gallium/drivers/etnaviv/etnaviv_resource.c21
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