d3d12/llvmpipe/softpipe: Add support for get_screen_fd

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21654>
This commit is contained in:
Lucas Fryzek
2023-03-02 14:52:02 -05:00
committed by Marge Bot
parent 0c0e7d5c1a
commit 59efea9f63
5 changed files with 50 additions and 0 deletions

View File

@@ -1231,6 +1231,18 @@ d3d12_interop_export_object(struct pipe_screen *pscreen, struct pipe_resource *r
return sizeof(*info);
}
static int
d3d12_screen_get_fd(struct pipe_screen *pscreen)
{
struct d3d12_screen *screen = d3d12_screen(pscreen);
struct sw_winsys *winsys = screen->winsys;
if (winsys->get_fd)
return winsys->get_fd(winsys);
else
return -1;
}
bool
d3d12_init_screen_base(struct d3d12_screen *screen, struct sw_winsys *winsys, LUID *adapter_luid)
{
@@ -1257,6 +1269,7 @@ d3d12_init_screen_base(struct d3d12_screen *screen, struct sw_winsys *winsys, LU
screen->base.get_vendor = d3d12_get_vendor;
screen->base.get_device_vendor = d3d12_get_device_vendor;
screen->base.get_screen_fd = d3d12_screen_get_fd;
screen->base.get_param = d3d12_get_param;
screen->base.get_paramf = d3d12_get_paramf;
screen->base.get_shader_param = d3d12_get_shader_param;

View File

@@ -964,6 +964,18 @@ lp_get_disk_shader_cache(struct pipe_screen *_screen)
return screen->disk_shader_cache;
}
static int
llvmpipe_screen_get_fd(struct pipe_screen *_screen)
{
struct llvmpipe_screen *screen = llvmpipe_screen(_screen);
struct sw_winsys *winsys = screen->winsys;
if (winsys->get_fd)
return winsys->get_fd(winsys);
else
return -1;
}
void
lp_disk_cache_find_shader(struct llvmpipe_screen *screen,
@@ -1066,6 +1078,7 @@ llvmpipe_create_screen(struct sw_winsys *winsys)
screen->base.get_name = llvmpipe_get_name;
screen->base.get_vendor = llvmpipe_get_vendor;
screen->base.get_device_vendor = llvmpipe_get_vendor; // TODO should be the CPU vendor
screen->base.get_screen_fd = llvmpipe_screen_get_fd;
screen->base.get_param = llvmpipe_get_param;
screen->base.get_shader_param = llvmpipe_get_shader_param;
screen->base.get_compute_param = llvmpipe_get_compute_param;

View File

@@ -572,6 +572,17 @@ softpipe_get_compute_param(struct pipe_screen *_screen,
return 0;
}
static int
softpipe_screen_get_fd(struct pipe_screen *screen)
{
struct sw_winsys *winsys = softpipe_screen(screen)->winsys;
if (winsys->get_fd)
return winsys->get_fd(winsys);
else
return -1;
}
/**
* Create a new pipe_screen object
* Note: we're not presently subclassing pipe_screen (no softpipe_screen).
@@ -593,6 +604,7 @@ softpipe_create_screen(struct sw_winsys *winsys)
screen->base.get_name = softpipe_get_name;
screen->base.get_vendor = softpipe_get_vendor;
screen->base.get_device_vendor = softpipe_get_vendor; // TODO should be the CPU vendor
screen->base.get_screen_fd = softpipe_screen_get_fd;
screen->base.get_param = softpipe_get_param;
screen->base.get_shader_param = softpipe_get_shader_param;
screen->base.get_paramf = softpipe_get_paramf;

View File

@@ -66,6 +66,9 @@ struct sw_winsys
void
(*destroy)( struct sw_winsys *ws );
int
(*get_fd)( struct sw_winsys *ws );
bool
(*is_displaytarget_format_supported)( struct sw_winsys *ws,
unsigned tex_usage,

View File

@@ -491,6 +491,13 @@ kms_sw_displaytarget_display(struct sw_winsys *ws,
assert(0);
}
static int
kms_sw_winsys_get_fd(struct sw_winsys *ws)
{
struct kms_sw_winsys *kms_sw = kms_sw_winsys(ws);
return kms_sw->fd;
}
static void
kms_destroy_sw_winsys(struct sw_winsys *winsys)
@@ -512,6 +519,8 @@ kms_dri_create_winsys(int fd)
ws->base.destroy = kms_destroy_sw_winsys;
ws->base.get_fd = kms_sw_winsys_get_fd;
ws->base.is_displaytarget_format_supported = kms_sw_is_displaytarget_format_supported;
/* screen texture functions */