From 5d547858dac2e9a608416e3b1310b01805e6f5d4 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 9 Jun 2020 16:04:37 -0400 Subject: [PATCH] panfrost: Ensure we have ro before using it Even through the resouce requested has a BIND_SCANOUT or related tag, this does not mean that we have a render-only driver. This can trivially happen as one requests such resource from GBM, while using the panfrost fd (and hence panfrost_dri.so) Forward port of !3000 Signed-off-by: Emil Velikov Signed-off-by: Robert Foss Signed-off-by: Alyssa Rosenzweig Closes: #2664 Part-of: --- src/gallium/drivers/panfrost/pan_resource.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c index 0506163f291..84f82ab7689 100644 --- a/src/gallium/drivers/panfrost/pan_resource.c +++ b/src/gallium/drivers/panfrost/pan_resource.c @@ -508,6 +508,8 @@ static struct pipe_resource * panfrost_resource_create(struct pipe_screen *screen, const struct pipe_resource *template) { + struct panfrost_device *dev = pan_device(screen); + /* Make sure we're familiar */ switch (template->target) { case PIPE_BUFFER: @@ -523,13 +525,11 @@ panfrost_resource_create(struct pipe_screen *screen, assert(0); } - if (template->bind & - (PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_SCANOUT | PIPE_BIND_SHARED)) + if (dev->ro && (template->bind & + (PIPE_BIND_DISPLAY_TARGET | PIPE_BIND_SCANOUT | PIPE_BIND_SHARED))) return panfrost_create_scanout_res(screen, template); struct panfrost_resource *so = rzalloc(screen, struct panfrost_resource); - struct panfrost_device *dev = pan_device(screen); - so->base = *template; so->base.screen = screen; so->internal_format = template->format; -- 2.30.2