d3d12: Implement resource_get_param

Reviewed-By: Silvio Vilerino <sivileri@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37628>
This commit is contained in:
David Rosca 2025-09-30 13:50:22 +02:00 committed by Marge Bot
parent 02aaf360ae
commit 25de079408

View file

@ -989,6 +989,65 @@ d3d12_resource_get_info(struct pipe_screen *pscreen,
}
}
static bool
d3d12_resource_get_param(struct pipe_screen *pscreen,
struct pipe_context *context,
struct pipe_resource *pres,
unsigned plane,
unsigned layer,
unsigned level,
enum pipe_resource_param param,
unsigned handle_usage,
uint64_t *value)
{
struct d3d12_resource* res = d3d12_resource(pres);
unsigned num_planes = util_format_get_num_planes(res->overall_format);
pipe_resource *planes[d3d12_max_planes];
unsigned int strides[d3d12_max_planes];
unsigned int layer_strides[d3d12_max_planes];
unsigned int offsets[d3d12_max_planes];
unsigned staging_res_size = 0;
d3d12_resource_get_planes_info(
pres,
num_planes,
planes,
strides,
layer_strides,
offsets,
&staging_res_size
);
switch (param) {
case PIPE_RESOURCE_PARAM_NPLANES:
*value = num_planes;
return true;
case PIPE_RESOURCE_PARAM_STRIDE:
*value = strides[res->plane_slice];
return true;
case PIPE_RESOURCE_PARAM_OFFSET:
*value = offsets[res->plane_slice];
return true;
case PIPE_RESOURCE_PARAM_LAYER_STRIDE:
*value = layer_strides[res->plane_slice];
return true;
case PIPE_RESOURCE_PARAM_DISJOINT_PLANES:
*value = num_planes > 1;
return true;
case PIPE_RESOURCE_PARAM_MODIFIER:
case PIPE_RESOURCE_PARAM_HANDLE_TYPE_SHARED:
case PIPE_RESOURCE_PARAM_HANDLE_TYPE_KMS:
case PIPE_RESOURCE_PARAM_HANDLE_TYPE_FD:
default:
return false;
}
}
static struct pipe_memory_object *
d3d12_memobj_create_from_handle(struct pipe_screen *pscreen, struct winsys_handle *handle, bool dedicated)
{
@ -1107,6 +1166,7 @@ d3d12_screen_resource_init(struct pipe_screen *pscreen)
pscreen->resource_get_handle = d3d12_resource_get_handle;
pscreen->resource_destroy = d3d12_resource_destroy;
pscreen->resource_get_info = d3d12_resource_get_info;
pscreen->resource_get_param = d3d12_resource_get_param;
pscreen->memobj_create_from_handle = d3d12_memobj_create_from_handle;
pscreen->memobj_destroy = d3d12_memobj_destroy;