mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-12 16:08:19 +02:00
pipe-loader: plumb a flag for implicit driver load through screen creation
Acked-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28139>
This commit is contained in:
parent
744307289c
commit
b53a402edc
17 changed files with 25 additions and 21 deletions
|
|
@ -169,11 +169,12 @@ pipe_loader_get_driinfo_xml(const char *driver_name)
|
|||
}
|
||||
|
||||
struct pipe_screen *
|
||||
pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk)
|
||||
pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk, bool implicit)
|
||||
{
|
||||
struct pipe_screen_config config;
|
||||
|
||||
pipe_loader_load_options(dev);
|
||||
config.implicit_driver_load = implicit;
|
||||
config.options_info = &dev->option_info;
|
||||
config.options = &dev->option_cache;
|
||||
|
||||
|
|
@ -181,9 +182,9 @@ pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk)
|
|||
}
|
||||
|
||||
struct pipe_screen *
|
||||
pipe_loader_create_screen(struct pipe_loader_device *dev)
|
||||
pipe_loader_create_screen(struct pipe_loader_device *dev, bool implicit)
|
||||
{
|
||||
return pipe_loader_create_screen_vk(dev, false);
|
||||
return pipe_loader_create_screen_vk(dev, false, implicit);
|
||||
}
|
||||
|
||||
struct util_dl_library *
|
||||
|
|
|
|||
|
|
@ -88,17 +88,19 @@ pipe_loader_probe(struct pipe_loader_device **devs, int ndev, bool with_zink);
|
|||
*
|
||||
* \param dev Device the screen will be created for.
|
||||
* \param sw_vk Device is for software vulkan
|
||||
* \param implicit Whether the driver is being loaded implicitly.
|
||||
*/
|
||||
struct pipe_screen *
|
||||
pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk);
|
||||
pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk, bool implicit);
|
||||
|
||||
/**
|
||||
* Create a pipe_screen for the specified device.
|
||||
*
|
||||
* \param dev Device the screen will be created for.
|
||||
* \param implicit Whether the driver is being loaded implicitly.
|
||||
*/
|
||||
struct pipe_screen *
|
||||
pipe_loader_create_screen(struct pipe_loader_device *dev);
|
||||
pipe_loader_create_screen(struct pipe_loader_device *dev, bool implicit);
|
||||
|
||||
/**
|
||||
* Ensures that the driconf option cache has been parsed for the driver.
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ vl_dri2_screen_create(Display *display, int screen)
|
|||
goto free_authenticate;
|
||||
|
||||
if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd, false))
|
||||
scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev);
|
||||
scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, false);
|
||||
|
||||
if (!scrn->base.pscreen)
|
||||
goto release_pipe;
|
||||
|
|
|
|||
|
|
@ -843,7 +843,7 @@ vl_dri3_screen_create(Display *display, int screen)
|
|||
free(geom_reply);
|
||||
|
||||
if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd, false))
|
||||
scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev);
|
||||
scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, false);
|
||||
|
||||
if (!scrn->base.pscreen)
|
||||
goto release_pipe;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ vl_drm_screen_create(int fd)
|
|||
return NULL;
|
||||
|
||||
if (pipe_loader_drm_probe_fd(&vscreen->dev, fd, false))
|
||||
vscreen->pscreen = pipe_loader_create_screen(vscreen->dev);
|
||||
vscreen->pscreen = pipe_loader_create_screen(vscreen->dev, false);
|
||||
|
||||
if (!vscreen->pscreen)
|
||||
goto release_pipe;
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ namespace {
|
|||
|
||||
device::device(clover::platform &platform, pipe_loader_device *ldev) :
|
||||
platform(platform), clc_cache(NULL), ldev(ldev) {
|
||||
pipe = pipe_loader_create_screen(ldev);
|
||||
pipe = pipe_loader_create_screen(ldev, false);
|
||||
if (pipe && pipe->get_param(pipe, PIPE_CAP_COMPUTE)) {
|
||||
const bool has_supported_ir = supports_ir(PIPE_SHADER_IR_NATIVE) ||
|
||||
supports_ir(PIPE_SHADER_IR_NIR_SERIALIZED);
|
||||
|
|
|
|||
|
|
@ -2341,7 +2341,7 @@ dri2_init_screen(struct dri_screen *screen, bool implicit)
|
|||
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false))
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
pscreen = pipe_loader_create_screen(screen->dev, implicit);
|
||||
#endif
|
||||
|
||||
if (!pscreen)
|
||||
|
|
@ -2398,7 +2398,7 @@ dri_swrast_kms_init_screen(struct dri_screen *screen, bool implicit)
|
|||
|
||||
#ifdef HAVE_DRISW_KMS
|
||||
if (pipe_loader_sw_probe_kms(&screen->dev, screen->fd))
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
pscreen = pipe_loader_create_screen(screen->dev, implicit);
|
||||
#endif
|
||||
|
||||
if (!pscreen)
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ drisw_init_screen(struct dri_screen *screen, bool implicit)
|
|||
success = pipe_loader_sw_probe_dri(&screen->dev, lf);
|
||||
|
||||
if (success)
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
pscreen = pipe_loader_create_screen(screen->dev, implicit);
|
||||
|
||||
if (!pscreen)
|
||||
goto fail;
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ kopper_init_screen(struct dri_screen *screen, bool implicit)
|
|||
#endif
|
||||
|
||||
if (success)
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
pscreen = pipe_loader_create_screen(screen->dev, implicit);
|
||||
|
||||
if (!pscreen)
|
||||
goto fail;
|
||||
|
|
|
|||
|
|
@ -1203,7 +1203,7 @@ lvp_physical_device_init(struct lvp_physical_device *device,
|
|||
}
|
||||
device->pld = pld;
|
||||
|
||||
device->pscreen = pipe_loader_create_screen_vk(device->pld, true);
|
||||
device->pscreen = pipe_loader_create_screen_vk(device->pld, true, false);
|
||||
if (!device->pscreen)
|
||||
return vk_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(device->drv_options); i++)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ impl PipeLoaderDevice {
|
|||
}
|
||||
|
||||
fn load_screen(self) -> Option<PipeScreen> {
|
||||
let s = unsafe { pipe_loader_create_screen(self.ldev.as_ptr()) };
|
||||
let s = unsafe { pipe_loader_create_screen(self.ldev.as_ptr(), false) };
|
||||
PipeScreen::new(self, s)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ __attribute__((visibility("default"))) TfLiteDelegate *tflite_plugin_create_dele
|
|||
|
||||
teflon_debug("Teflon delegate: loaded %s driver\n", delegate->dev->driver_name);
|
||||
|
||||
screen = pipe_loader_create_screen(delegate->dev);
|
||||
screen = pipe_loader_create_screen(delegate->dev, false);
|
||||
delegate->context = screen->context_create(screen, NULL, PIPE_CONTEXT_COMPUTE_ONLY);
|
||||
|
||||
return &delegate->base;
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ xa_tracker_create(int drm_fd)
|
|||
return NULL;
|
||||
|
||||
if (pipe_loader_drm_probe_fd(&xa->dev, drm_fd, false))
|
||||
xa->screen = pipe_loader_create_screen(xa->dev);
|
||||
xa->screen = pipe_loader_create_screen(xa->dev, false);
|
||||
|
||||
if (!xa->screen)
|
||||
goto out_no_screen;
|
||||
|
|
|
|||
|
|
@ -810,6 +810,7 @@ struct pipe_screen {
|
|||
* Global configuration options for screen creation.
|
||||
*/
|
||||
struct pipe_screen_config {
|
||||
bool implicit_driver_load;
|
||||
struct driOptionCache *options;
|
||||
const struct driOptionCache *options_info;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ drm_create_adapter( int fd,
|
|||
return D3DERR_DRIVERINTERNALERROR;
|
||||
}
|
||||
|
||||
ctx->base.hal = pipe_loader_create_screen(ctx->dev);
|
||||
ctx->base.hal = pipe_loader_create_screen(ctx->dev, false);
|
||||
if (!ctx->base.hal) {
|
||||
ERR("Unable to load requested driver.\n");
|
||||
drm_destroy(&ctx->base);
|
||||
|
|
@ -285,7 +285,7 @@ drm_create_adapter( int fd,
|
|||
sw_rendering |= debug_get_bool_option("D3D_ALWAYS_SOFTWARE", false);
|
||||
/* wrap it to create a software screen that can share resources */
|
||||
if (sw_rendering && pipe_loader_sw_probe_wrapped(&ctx->swdev, ctx->base.hal))
|
||||
ctx->base.ref = pipe_loader_create_screen(ctx->swdev);
|
||||
ctx->base.ref = pipe_loader_create_screen(ctx->swdev, false);
|
||||
else {
|
||||
/* Use the hardware for sw rendering */
|
||||
ctx->swdev = ctx->dev;
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ static void init_prog(struct program *p)
|
|||
assert(ret);
|
||||
|
||||
/* init a pipe screen */
|
||||
p->screen = pipe_loader_create_screen(p->dev);
|
||||
p->screen = pipe_loader_create_screen(p->dev, false);
|
||||
assert(p->screen);
|
||||
|
||||
/* create the pipe driver context and cso context */
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ static void init_prog(struct program *p)
|
|||
assert(ret);
|
||||
|
||||
/* init a pipe screen */
|
||||
p->screen = pipe_loader_create_screen(p->dev);
|
||||
p->screen = pipe_loader_create_screen(p->dev, false);
|
||||
assert(p->screen);
|
||||
|
||||
/* create the pipe driver context and cso context */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue