iris: Delay main and aux resource creation on import

Follow the pattern for initializing aux resource addresses.

Reviewed-by: Jianxun Zhang <jianxun.zhang@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25768>
This commit is contained in:
Nanley Chery
2023-10-18 06:24:36 -04:00
committed by Marge Bot
parent 5f93f97892
commit bd32badbb7
+30 -28
View File
@@ -1353,37 +1353,9 @@ iris_resource_from_handle(struct pipe_screen *pscreen,
if (!res->bo)
goto fail;
uint64_t modifier;
if (whandle->modifier == DRM_FORMAT_MOD_INVALID) {
/* We don't have a modifier; match whatever GEM_GET_TILING says */
uint32_t tiling;
iris_gem_get_tiling(res->bo, &tiling);
modifier = tiling_to_modifier(tiling);
} else {
modifier = whandle->modifier;
}
res->offset = whandle->offset;
res->external_format = whandle->format;
res->surf.row_pitch_B = whandle->stride;
if (templ->target == PIPE_BUFFER) {
res->surf.tiling = ISL_TILING_LINEAR;
return &res->base.b;
}
/* Create a surface for each plane specified by the external format. */
if (whandle->plane < util_format_get_num_planes(whandle->format)) {
const bool isl_surf_created_successfully =
iris_resource_configure_main(screen, res, templ, modifier,
whandle->stride);
if (!isl_surf_created_successfully)
goto fail;
if (!iris_resource_configure_aux(screen, res, true))
goto fail;
}
if (whandle->plane == 0) {
/* All planes are present. Fill out the main plane resource(s). */
for (unsigned plane = 0; plane < util_resource_num(templ); plane++) {
@@ -1420,6 +1392,36 @@ iris_resource_from_handle(struct pipe_screen *pscreen,
/* Fill out fields that are convenient to initialize now. */
assert(plane == main_plane);
main_res->external_format = whandle->format;
if (templ->target == PIPE_BUFFER) {
main_res->surf.tiling = ISL_TILING_LINEAR;
return &main_res->base.b;
}
uint64_t modifier;
if (whandle->modifier == DRM_FORMAT_MOD_INVALID) {
/* We have no modifier; match whatever GEM_GET_TILING says */
uint32_t tiling;
iris_gem_get_tiling(main_res->bo, &tiling);
modifier = tiling_to_modifier(tiling);
} else {
modifier = whandle->modifier;
}
const bool isl_surf_created_successfully =
iris_resource_configure_main(screen, main_res,
&main_res->base.b, modifier,
main_res->surf.row_pitch_B);
if (!isl_surf_created_successfully)
goto fail;
assert(main_res->bo->size >= main_res->offset +
main_res->surf.size_B);
if (!iris_resource_configure_aux(screen, main_res, true))
goto fail;
/* Add on a clear color BO if needed.
*
* Also add some padding to make sure the fast clear color state