Commit 9603d81d authored by Thierry Reding's avatar Thierry Reding
Browse files

tegra: Fix scanout resources without modifiers



Resources created for scanout but without modifiers need to be treated
as pitch-linear. This is because applications that don't use modifiers
to create resources must be assumed to not understand modifiers and in
turn won't be able to create a DRM framebuffer and passing along which
modifiers were picked by the implementation.
Tested-by: default avatarDaniel Kolesa <daniel@octaforge.org>
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent bd3e97e5
......@@ -260,6 +260,7 @@ tegra_screen_resource_create(struct pipe_screen *pscreen,
const struct pipe_resource *template)
{
struct tegra_screen *screen = to_tegra_screen(pscreen);
uint64_t modifier = DRM_FORMAT_MOD_INVALID;
struct tegra_resource *resource;
int err;
......@@ -267,7 +268,23 @@ tegra_screen_resource_create(struct pipe_screen *pscreen,
if (!resource)
return NULL;
resource->gpu = screen->gpu->resource_create(screen->gpu, template);
/*
* Applications that create scanout resources without modifiers are very
* unlikely to support modifiers at all. In that case the resources need
* to be created with a pitch-linear layout so that they can be properly
* shared with scanout hardware.
*
* Technically it is possible for applications to create resources without
* specifying a modifier but still query the modifier associated with the
* resource (e.g. using gbm_bo_get_modifier()) before handing it to the
* framebuffer creation API (such as the DRM_IOCTL_MODE_ADDFB2 IOCTL).
*/
if (template->bind & PIPE_BIND_SCANOUT)
modifier = DRM_FORMAT_MOD_LINEAR;
resource->gpu = screen->gpu->resource_create_with_modifiers(screen->gpu,
template,
&modifier, 1);
if (!resource->gpu)
goto free;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment