diff options
author | Alyssa Rosenzweig <[email protected]> | 2020-06-09 16:04:37 -0400 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-06-09 22:09:07 +0000 |
commit | 5d547858dac2e9a608416e3b1310b01805e6f5d4 (patch) | |
tree | d354091778ac1345a2ead9f66505b99f476afeb7 /src/gallium/drivers/panfrost | |
parent | 64f2d45c3bdc4cd0e56bb31d17fa94246f4f1e59 (diff) |
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 <[email protected]>
Signed-off-by: Robert Foss <[email protected]>
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Closes: #2664
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5410>
Diffstat (limited to 'src/gallium/drivers/panfrost')
-rw-r--r-- | src/gallium/drivers/panfrost/pan_resource.c | 8 |
1 files 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; |