mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
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: Daniel Kolesa <daniel@octaforge.org> Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
bd3e97e5aa
commit
9603d81df0
1 changed files with 18 additions and 1 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue