mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
iris: let isl set tiling mode for external resources
Patch sets memory object external format (which is otherwise PIPE_FORMAT_NONE for memory objects) before main surface gets configured. With this we can add a check that when dealing with external resource that has no modifier set, we let isl figure out the tiling mode. Fixes memobj tests on DG2: piglit.spec.ext_external_objects.vk-image-display-muliple-textures piglit.spec.ext_external_objects.vk-image-display-overwrite piglit.spec.ext_external_objects.vk-depth-display piglit.spec.ext_external_objects.vk-image-display piglit.spec.ext_external_objects.vk-stencil-display v2: add assert and comment on tiling decision (Ken) Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7684 Cc: mesa-stable Signed-off-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Simon Zeni <simon@bl4ckb0ne.ca> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20473>
This commit is contained in:
parent
fdf4a87823
commit
319d485679
1 changed files with 13 additions and 5 deletions
|
|
@ -678,6 +678,14 @@ iris_resource_configure_main(const struct iris_screen *screen,
|
|||
} else if (templ->usage == PIPE_USAGE_STAGING ||
|
||||
templ->bind & (PIPE_BIND_LINEAR | PIPE_BIND_CURSOR)) {
|
||||
tiling_flags = ISL_TILING_LINEAR_BIT;
|
||||
} else if (res->external_format != PIPE_FORMAT_NONE) {
|
||||
/* This came from iris_resource_from_memobj and didn't have
|
||||
* PIPE_BIND_LINEAR set, so "optimal" tiling is desired. Let isl
|
||||
* select the tiling. The implicit contract is that both drivers
|
||||
* will arrive at the same tiling by using the same code to decide.
|
||||
*/
|
||||
assert(modifier == DRM_FORMAT_MOD_INVALID);
|
||||
tiling_flags = ISL_TILING_ANY_MASK;
|
||||
} else if (!screen->devinfo->has_tiling_uapi &&
|
||||
(templ->bind & (PIPE_BIND_SCANOUT | PIPE_BIND_SHARED))) {
|
||||
tiling_flags = ISL_TILING_LINEAR_BIT;
|
||||
|
|
@ -1465,17 +1473,17 @@ iris_resource_from_memobj(struct pipe_screen *pscreen,
|
|||
if (!res)
|
||||
return NULL;
|
||||
|
||||
res->bo = memobj->bo;
|
||||
res->offset = offset;
|
||||
res->external_format = templ->format;
|
||||
res->internal_format = templ->format;
|
||||
|
||||
if (templ->flags & PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY) {
|
||||
UNUSED const bool isl_surf_created_successfully =
|
||||
iris_resource_configure_main(screen, res, templ, DRM_FORMAT_MOD_INVALID, 0);
|
||||
assert(isl_surf_created_successfully);
|
||||
}
|
||||
|
||||
res->bo = memobj->bo;
|
||||
res->offset = offset;
|
||||
res->external_format = memobj->format;
|
||||
res->internal_format = templ->format;
|
||||
|
||||
iris_bo_reference(memobj->bo);
|
||||
|
||||
return &res->base.b;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue