static boolean amdgpu_bo_get_handle(struct pb_buffer *buffer, unsigned stride, struct winsys_handle *whandle) { struct amdgpu_winsys_bo *bo = get_amdgpu_winsys_bo(buffer); enum amdgpu_bo_handle_type type; int r; switch (whandle->type) { case DRM_API_HANDLE_TYPE_SHARED: type = amdgpu_bo_handle_type_gem_flink_name; break; case DRM_API_HANDLE_TYPE_FD: type = amdgpu_bo_handle_type_dma_buf_fd; break; case DRM_API_HANDLE_TYPE_KMS: type = amdgpu_bo_handle_type_kms; break; default: return FALSE; } r = amdgpu_bo_export(bo->bo, type, &whandle->handle); if (r) return FALSE; whandle->stride = stride; bo->is_shared = true; return TRUE; }
Bool amdgpu_share_pixmap_backing(struct amdgpu_buffer *bo, void **handle_p) { int handle; amdgpu_bo_export(bo->bo.amdgpu, amdgpu_bo_handle_type_dma_buf_fd, (uint32_t *)&handle); *handle_p = (void *)(long)handle; return TRUE; }
static void amdgpu_bo_export_import_do_type(enum amdgpu_bo_handle_type type) { struct amdgpu_bo_import_result res = {0}; uint32_t shared_handle; int r; r = amdgpu_bo_export(buffer_handle, type, &shared_handle); CU_ASSERT_EQUAL(r, 0); r = amdgpu_bo_import(device_handle, type, shared_handle, &res); CU_ASSERT_EQUAL(r, 0); CU_ASSERT_EQUAL(res.buf_handle, buffer_handle); CU_ASSERT_EQUAL(res.alloc_size, BUFFER_SIZE); r = amdgpu_bo_free(res.buf_handle); CU_ASSERT_EQUAL(r, 0); }