mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-04 10:40:36 +01:00
panfrost: implement 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, implement 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:4c092947df("panfrost: fail in get_handle(TYPE_KMS) without a scanout resource") Reported-by: Roman Stratiienko <r.stratiienko@gmail.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12370> (cherry picked from commit99fc6f7271)
This commit is contained in:
parent
e26269535d
commit
5aa0faf512
2 changed files with 26 additions and 1 deletions
|
|
@ -49,7 +49,7 @@
|
|||
"description": "panfrost: implement resource_get_param",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "4c092947df308f20e288bb5baf50bff181e5d3fa"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -183,6 +183,30 @@ panfrost_resource_get_handle(struct pipe_screen *pscreen,
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool
|
||||
panfrost_resource_get_param(struct pipe_screen *pscreen,
|
||||
struct pipe_context *pctx, struct pipe_resource *prsc,
|
||||
unsigned plane, unsigned layer, unsigned level,
|
||||
enum pipe_resource_param param,
|
||||
unsigned usage, uint64_t *value)
|
||||
{
|
||||
struct panfrost_resource *rsrc = (struct panfrost_resource *) prsc;
|
||||
|
||||
switch (param) {
|
||||
case PIPE_RESOURCE_PARAM_STRIDE:
|
||||
*value = rsrc->image.layout.slices[level].line_stride;
|
||||
return true;
|
||||
case PIPE_RESOURCE_PARAM_OFFSET:
|
||||
*value = rsrc->image.layout.slices[level].offset;
|
||||
return true;
|
||||
case PIPE_RESOURCE_PARAM_MODIFIER:
|
||||
*value = rsrc->image.layout.modifier;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
panfrost_flush_resource(struct pipe_context *pctx, struct pipe_resource *prsc)
|
||||
{
|
||||
|
|
@ -1314,6 +1338,7 @@ panfrost_resource_screen_init(struct pipe_screen *pscreen)
|
|||
pscreen->resource_destroy = u_transfer_helper_resource_destroy;
|
||||
pscreen->resource_from_handle = panfrost_resource_from_handle;
|
||||
pscreen->resource_get_handle = panfrost_resource_get_handle;
|
||||
pscreen->resource_get_param = panfrost_resource_get_param;
|
||||
pscreen->transfer_helper = u_transfer_helper_create(&transfer_vtbl,
|
||||
true, false,
|
||||
fake_rgtc, true);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue