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:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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,
|
||||
|
@@ -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 */
|
||||
|
Reference in New Issue
Block a user