diff options
author | Daniel Stone <[email protected]> | 2019-10-17 13:49:54 +0200 |
---|---|---|
committer | Daniel Stone <[email protected]> | 2019-10-18 09:38:52 +0200 |
commit | 40689f5ac0bf2aecdcbf87103a25aed03ba8640f (patch) | |
tree | 6daea2032021416bd25d99ecddf3d0561120e027 /src | |
parent | 22859a18d5c802cf2d486ecff4eb32e3bf88786d (diff) |
panfrost: Respect offset for imported resources
When we import a resource through Gallium, we need to take account of
the offset parameter passed.
Fixes a failure seen with the VIVID V4L2 driver, which would create NV12
resources within the same BO, with an offset. Sample pipeline to
reproduce (replace videoN with your actual VIVID device node):
gst-launch-1.0 v4l2src device=/dev/videoN ! video/x-raw,format=NV12 ! glimagesink
Signed-off-by: Daniel Stone <[email protected]>
Reviewed-by: Tomeu Vizoso <[email protected]>
Reviewed-by: Alyssa Rosenzweig <[email protected]>
Reported-by: Nicolas Dufresne <[email protected]>
Tested-by: Nicolas Dufresne <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 01ef5c5776d..db0643c7305 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -84,6 +84,7 @@ panfrost_resource_from_handle(struct pipe_screen *pscreen, rsc->bo = panfrost_bo_import(screen, whandle->handle); rsc->slices[0].stride = whandle->stride; + rsc->slices[0].offset = whandle->offset; rsc->slices[0].initialized = true; panfrost_resource_reset_damage(rsc); @@ -117,6 +118,7 @@ panfrost_resource_get_handle(struct pipe_screen *pscreen, handle->handle = rsrc->bo->gem_handle; handle->stride = rsrc->slices[0].stride; + handle->offset = rsrc->slices[0].offset; return TRUE; } else if (handle->type == WINSYS_HANDLE_TYPE_FD) { if (scanout) { @@ -141,6 +143,7 @@ panfrost_resource_get_handle(struct pipe_screen *pscreen, handle->handle = fd; handle->stride = rsrc->slices[0].stride; + handle->offset = rsrc->slices[0].offset; return true; } } |