mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 20:00:11 +01:00
gallium/dri: fix dri2_from_planar for multiplanar images
Fix the gbm_dri_bo_get_handle_for_plane use case by allowing plane > 0 in dri2_from_planar for images with multiple planes in separate chained texture resources. Not all multiplanar resources are chained, though. The iris aux buffer is a separate plane in the same resource. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7028>
This commit is contained in:
parent
6c118aebb1
commit
13859c769f
1 changed files with 14 additions and 2 deletions
|
|
@ -1379,18 +1379,28 @@ static __DRIimage *
|
|||
dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate)
|
||||
{
|
||||
__DRIimage *img;
|
||||
struct pipe_resource *tex = image->texture;
|
||||
int i;
|
||||
|
||||
if (plane < 0) {
|
||||
return NULL;
|
||||
} else if (plane > 0) {
|
||||
uint64_t planes;
|
||||
if (!dri2_resource_get_param(image, PIPE_RESOURCE_PARAM_NPLANES, 0,
|
||||
&planes) ||
|
||||
if (dri2_resource_get_param(image, PIPE_RESOURCE_PARAM_NPLANES, 0,
|
||||
&planes) &&
|
||||
plane >= planes) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (tex->next) {
|
||||
for (i = 0; i < plane; i++) {
|
||||
tex = tex->next;
|
||||
if (!tex)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (image->dri_components == 0) {
|
||||
uint64_t modifier;
|
||||
if (!dri2_resource_get_param(image, PIPE_RESOURCE_PARAM_MODIFIER, 0,
|
||||
|
|
@ -1404,6 +1414,8 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate)
|
|||
if (img == NULL)
|
||||
return NULL;
|
||||
|
||||
pipe_resource_reference(&img->texture, tex);
|
||||
|
||||
if (img->texture->screen->resource_changed)
|
||||
img->texture->screen->resource_changed(img->texture->screen,
|
||||
img->texture);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue