mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 02:10:12 +01:00
iris: Fix import of multi-planar surfaces with modifiers
Multi-planar surfaces are allowed to have modifiers. Don't require
DRM_FORMAT_MOD_INVALID in order to create a surface for each plane
defined by the format.
Fixes: 246eebba4a ("iris: Export and import surfaces with modifiers that have aux data")
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
51ee8fff9b
commit
21376cffb3
2 changed files with 12 additions and 1 deletions
|
|
@ -994,6 +994,7 @@ iris_resource_from_handle(struct pipe_screen *pscreen,
|
|||
}
|
||||
assert(mod_inf);
|
||||
|
||||
res->external_format = whandle->format;
|
||||
res->mod_info = mod_inf;
|
||||
|
||||
isl_surf_usage_flags_t isl_usage = pipe_bind_to_isl_usage(templ->bind);
|
||||
|
|
@ -1005,7 +1006,8 @@ iris_resource_from_handle(struct pipe_screen *pscreen,
|
|||
if (templ->target == PIPE_BUFFER) {
|
||||
res->surf.tiling = ISL_TILING_LINEAR;
|
||||
} else {
|
||||
if (whandle->modifier == DRM_FORMAT_MOD_INVALID || whandle->plane == 0) {
|
||||
/* Create a surface for each plane specified by the external format. */
|
||||
if (whandle->plane < util_format_get_num_planes(whandle->format)) {
|
||||
UNUSED const bool isl_surf_created_successfully =
|
||||
isl_surf_init(&screen->isl_dev, &res->surf,
|
||||
.dim = target_to_isl_surf_dim(templ->target),
|
||||
|
|
@ -1183,6 +1185,8 @@ iris_resource_get_handle(struct pipe_screen *pscreen,
|
|||
whandle->stride = res->surf.row_pitch_B;
|
||||
bo = res->bo;
|
||||
}
|
||||
|
||||
whandle->format = res->external_format;
|
||||
whandle->modifier =
|
||||
res->mod_info ? res->mod_info->modifier
|
||||
: tiling_to_modifier(res->bo->tiling_mode);
|
||||
|
|
|
|||
|
|
@ -162,6 +162,13 @@ struct iris_resource {
|
|||
uint16_t has_hiz;
|
||||
} aux;
|
||||
|
||||
/**
|
||||
* For external surfaces, this is format that was used to create or import
|
||||
* the surface. For internal surfaces, this will always be
|
||||
* PIPE_FORMAT_NONE.
|
||||
*/
|
||||
enum pipe_format external_format;
|
||||
|
||||
/**
|
||||
* For external surfaces, this is DRM format modifier that was used to
|
||||
* create or import the surface. For internal surfaces, this will always
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue