mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 20:10:17 +01:00
lima: Implement lima_resource_get_param() callback
Currently stride, offset, modifier is obtained by invoking lima_resource_get_handle() with WINSYS_HANDLE_TYPE_KMS. Before commit47f000c170this path was working. Obtained handle was simply ignored by DRI frontend and only requested data used. After commit47f000c170such requests started to fail when DRI is initialized using KMSRO and resource has no scanout data. When lima_resource_get_param() is implemented, it will be used in a first place to obtain resource data. Fixes:47f000c170("lima: fail in get_handle(TYPE_KMS) without a scanout resource") Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com> Reviewed-by: Simon Ser <contact@emersion.fr> Reviewed-by: Erico Nunes <nunes.erico@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12362>
This commit is contained in:
parent
221871fb6d
commit
5ec6b6e9bb
1 changed files with 30 additions and 0 deletions
|
|
@ -427,6 +427,35 @@ lima_resource_get_handle(struct pipe_screen *pscreen,
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
lima_resource_get_param(struct pipe_screen *pscreen,
|
||||
struct pipe_context *pctx,
|
||||
struct pipe_resource *pres,
|
||||
unsigned plane, unsigned layer, unsigned level,
|
||||
enum pipe_resource_param param,
|
||||
unsigned usage, uint64_t *value)
|
||||
{
|
||||
struct lima_resource *res = lima_resource(pres);
|
||||
|
||||
switch (param) {
|
||||
case PIPE_RESOURCE_PARAM_STRIDE:
|
||||
*value = res->levels[level].stride;
|
||||
return true;
|
||||
case PIPE_RESOURCE_PARAM_OFFSET:
|
||||
*value = res->levels[level].offset;
|
||||
return true;
|
||||
case PIPE_RESOURCE_PARAM_MODIFIER:
|
||||
if (res->tiled)
|
||||
*value = DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED;
|
||||
else
|
||||
*value = DRM_FORMAT_MOD_LINEAR;
|
||||
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
get_scissor_from_box(struct pipe_scissor_state *s,
|
||||
const struct pipe_box *b, int h)
|
||||
|
|
@ -522,6 +551,7 @@ lima_resource_screen_init(struct lima_screen *screen)
|
|||
screen->base.resource_from_handle = lima_resource_from_handle;
|
||||
screen->base.resource_destroy = lima_resource_destroy;
|
||||
screen->base.resource_get_handle = lima_resource_get_handle;
|
||||
screen->base.resource_get_param = lima_resource_get_param;
|
||||
screen->base.set_damage_region = lima_resource_set_damage_region;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue