diff options
author | Simon Ser <contact@emersion.fr> | 2021-08-14 13:57:15 +0200 |
---|---|---|
committer | Eric Engestrom <eric@engestrom.ch> | 2021-09-07 20:08:48 +0100 |
commit | 7967fb6236fce3b98ff4f35d91444c1d4fbbdd9d (patch) | |
tree | 213feb5be0daf816f5a7ded20d0dd1dd08e34fc1 | |
parent | 9d3789671dff8582f7502b57e709aaffbadab504 (diff) | |
download | mesa-7967fb6236fce3b98ff4f35d91444c1d4fbbdd9d.tar.gz |
etnaviv: add stride, offset and modifier to resource_get_param
Prior to this commit, the stride, offset and modifier were fetched
via WINSYS_HANDLE_TYPE_KMS. However we can't make such a query
succeed if the buffer couldn't be imported to the KMS device.
Instead, extend the resource_get_param hook to allow users to fetch
this information without WINSYS_HANDLE_TYPE_KMS.
Signed-off-by: Simon Ser <contact@emersion.fr>
Fixes: 9da901d2b2e7 ("etnaviv: fail in get_handle(TYPE_KMS) without a scanout resource")
Reported-by: Roman Stratiienko <r.stratiienko@gmail.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12370>
(cherry picked from commit b5919b0b106dbdf5f5da6733e83cc532bdf257d8)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/gallium/drivers/etnaviv/etnaviv_resource.c | 22 |
2 files changed, 21 insertions, 3 deletions
diff --git a/.pick_status.json b/.pick_status.json index e58699642ef..90bef8f3182 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -868,7 +868,7 @@ "description": "etnaviv: add stride, offset and modifier to resource_get_param", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "9da901d2b2e7ab5d5f21a0004fc294810f69f04a" }, diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c index bac4b75614a..f08043acc7b 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_resource.c +++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c @@ -632,8 +632,7 @@ etna_resource_get_param(struct pipe_screen *pscreen, enum pipe_resource_param param, unsigned usage, uint64_t *value) { - switch (param) { - case PIPE_RESOURCE_PARAM_NPLANES: { + if (param == PIPE_RESOURCE_PARAM_NPLANES) { unsigned count = 0; for (struct pipe_resource *cur = prsc; cur; cur = cur->next) @@ -641,6 +640,25 @@ etna_resource_get_param(struct pipe_screen *pscreen, *value = count; return true; } + + struct pipe_resource *cur = prsc; + for (int i = 0; i < plane; i++) { + cur = cur->next; + if (!cur) + return false; + } + struct etna_resource *rsc = etna_resource(cur); + + switch (param) { + case PIPE_RESOURCE_PARAM_STRIDE: + *value = rsc->levels[level].stride; + return true; + case PIPE_RESOURCE_PARAM_OFFSET: + *value = rsc->levels[level].offset; + return true; + case PIPE_RESOURCE_PARAM_MODIFIER: + *value = layout_to_modifier(rsc->layout); + return true; default: return false; } |