mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 16:00:08 +01:00
dri: further collapse dri_screen creation
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30619>
This commit is contained in:
parent
af6d3fdf6e
commit
764e17eb03
5 changed files with 32 additions and 76 deletions
|
|
@ -2011,35 +2011,22 @@ dri2_create_drawable(struct dri_screen *screen, const struct gl_config *visual,
|
|||
*
|
||||
* Returns the struct gl_config supported by this driver.
|
||||
*/
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
dri2_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
||||
{
|
||||
const __DRIconfig **configs;
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false))
|
||||
pscreen = pipe_loader_create_screen(screen->dev, driver_name_is_inferred);
|
||||
#endif
|
||||
|
||||
if (!pscreen)
|
||||
return NULL;
|
||||
|
||||
configs = dri_init_screen(screen, pscreen);
|
||||
if (!configs)
|
||||
goto fail;
|
||||
|
||||
screen->can_share_buffer = true;
|
||||
screen->auto_fake_front = dri_with_format(screen);
|
||||
|
||||
screen->create_drawable = dri2_create_drawable;
|
||||
|
||||
return configs;
|
||||
#ifdef HAVE_LIBDRM
|
||||
if (pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false))
|
||||
pscreen = pipe_loader_create_screen(screen->dev, driver_name_is_inferred);
|
||||
#endif
|
||||
|
||||
fail:
|
||||
pipe_loader_release(&screen->dev, 1);
|
||||
|
||||
return NULL;
|
||||
return pscreen;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -2047,36 +2034,20 @@ fail:
|
|||
*
|
||||
* Returns the struct gl_config supported by this driver.
|
||||
*/
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
dri_swrast_kms_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
||||
{
|
||||
#if defined(HAVE_SWRAST)
|
||||
const __DRIconfig **configs;
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
|
||||
#ifdef HAVE_DRISW_KMS
|
||||
if (pipe_loader_sw_probe_kms(&screen->dev, screen->fd))
|
||||
pscreen = pipe_loader_create_screen(screen->dev, driver_name_is_inferred);
|
||||
#endif
|
||||
|
||||
if (!pscreen)
|
||||
return NULL;
|
||||
|
||||
configs = dri_init_screen(screen, pscreen);
|
||||
if (!configs)
|
||||
goto fail;
|
||||
|
||||
screen->can_share_buffer = false;
|
||||
screen->auto_fake_front = dri_with_format(screen);
|
||||
screen->create_drawable = dri2_create_drawable;
|
||||
|
||||
return configs;
|
||||
#if defined(HAVE_DRISW_KMS) && defined(HAVE_SWRAST)
|
||||
if (pipe_loader_sw_probe_kms(&screen->dev, screen->fd))
|
||||
pscreen = pipe_loader_create_screen(screen->dev, driver_name_is_inferred);
|
||||
#endif
|
||||
|
||||
fail:
|
||||
pipe_loader_release(&screen->dev, 1);
|
||||
|
||||
#endif // HAVE_SWRAST
|
||||
return NULL;
|
||||
return pscreen;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -215,13 +215,13 @@ dri_release_screen(struct dri_screen * screen);
|
|||
void
|
||||
dri_destroy_screen(struct dri_screen *screen);
|
||||
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
dri2_init_screen(struct dri_screen *screen, bool driver_name_is_inferred);
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
dri_swrast_kms_init_screen(struct dri_screen *screen, bool driver_name_is_inferred);
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
kopper_init_screen(struct dri_screen *screen, bool driver_name_is_inferred);
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
drisw_init_screen(struct dri_screen *screen, bool driver_name_is_inferred);
|
||||
|
||||
extern const struct __DriverAPIRec dri_swrast_kms_driver_api;
|
||||
|
|
|
|||
|
|
@ -132,22 +132,28 @@ driCreateNewScreen3(int scrn, int fd,
|
|||
|
||||
(void) mtx_init(&screen->opencl_func_mutex, mtx_plain);
|
||||
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
switch (type) {
|
||||
case DRI_SCREEN_DRI3:
|
||||
*driver_configs = dri2_init_screen(screen, driver_name_is_inferred);
|
||||
pscreen = dri2_init_screen(screen, driver_name_is_inferred);
|
||||
break;
|
||||
case DRI_SCREEN_KOPPER:
|
||||
*driver_configs = kopper_init_screen(screen, driver_name_is_inferred);
|
||||
pscreen = kopper_init_screen(screen, driver_name_is_inferred);
|
||||
break;
|
||||
case DRI_SCREEN_SWRAST:
|
||||
*driver_configs = drisw_init_screen(screen, driver_name_is_inferred);
|
||||
pscreen = drisw_init_screen(screen, driver_name_is_inferred);
|
||||
break;
|
||||
case DRI_SCREEN_KMS_SWRAST:
|
||||
*driver_configs = dri_swrast_kms_init_screen(screen, driver_name_is_inferred);
|
||||
pscreen = dri_swrast_kms_init_screen(screen, driver_name_is_inferred);
|
||||
break;
|
||||
default:
|
||||
unreachable("unknown dri screen type");
|
||||
}
|
||||
if (pscreen == NULL) {
|
||||
dri_destroy_screen(screen);
|
||||
return NULL;
|
||||
}
|
||||
*driver_configs = dri_init_screen(screen, pscreen);
|
||||
if (*driver_configs == NULL) {
|
||||
dri_destroy_screen(screen);
|
||||
return NULL;
|
||||
|
|
|
|||
|
|
@ -622,11 +622,10 @@ drisw_create_drawable(struct dri_screen *screen, const struct gl_config * visual
|
|||
return drawable;
|
||||
}
|
||||
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
drisw_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
||||
{
|
||||
const __DRIswrastLoaderExtension *loader = screen->swrast_loader;
|
||||
const __DRIconfig **configs;
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
const struct drisw_loader_funcs *lf = &drisw_lf;
|
||||
|
||||
|
|
@ -636,6 +635,7 @@ drisw_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
|||
if (loader->putImageShm)
|
||||
lf = &drisw_shm_lf;
|
||||
}
|
||||
screen->create_drawable = drisw_create_drawable;
|
||||
|
||||
bool success = false;
|
||||
#ifdef HAVE_DRISW_KMS
|
||||
|
|
@ -648,19 +648,7 @@ drisw_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
|||
if (success)
|
||||
pscreen = pipe_loader_create_screen(screen->dev, driver_name_is_inferred);
|
||||
|
||||
if (!pscreen)
|
||||
return NULL;
|
||||
|
||||
configs = dri_init_screen(screen, pscreen);
|
||||
if (!configs)
|
||||
goto fail;
|
||||
|
||||
screen->create_drawable = drisw_create_drawable;
|
||||
|
||||
return configs;
|
||||
fail:
|
||||
pipe_loader_release(&screen->dev, 1);
|
||||
return NULL;
|
||||
return pscreen;
|
||||
}
|
||||
|
||||
/* swrast copy sub buffer entrypoint. */
|
||||
|
|
|
|||
|
|
@ -56,10 +56,9 @@ static struct dri_drawable *
|
|||
kopper_create_drawable(struct dri_screen *screen, const struct gl_config *visual,
|
||||
bool isPixmap, void *loaderPrivate);
|
||||
|
||||
const __DRIconfig **
|
||||
struct pipe_screen *
|
||||
kopper_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
||||
{
|
||||
const __DRIconfig **configs;
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
|
||||
if (!screen->kopper_loader) {
|
||||
|
|
@ -70,6 +69,7 @@ kopper_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
|||
}
|
||||
|
||||
screen->can_share_buffer = true;
|
||||
screen->create_drawable = kopper_create_drawable;
|
||||
|
||||
bool success;
|
||||
#ifdef HAVE_LIBDRM
|
||||
|
|
@ -87,19 +87,10 @@ kopper_init_screen(struct dri_screen *screen, bool driver_name_is_inferred)
|
|||
if (!pscreen)
|
||||
return NULL;
|
||||
|
||||
configs = dri_init_screen(screen, pscreen);
|
||||
if (!configs)
|
||||
goto fail;
|
||||
|
||||
assert(pscreen->get_param(pscreen, PIPE_CAP_DEVICE_RESET_STATUS_QUERY));
|
||||
screen->is_sw = zink_kopper_is_cpu(pscreen);
|
||||
|
||||
screen->create_drawable = kopper_create_drawable;
|
||||
|
||||
return configs;
|
||||
fail:
|
||||
pipe_loader_release(&screen->dev, 1);
|
||||
return NULL;
|
||||
return pscreen;
|
||||
}
|
||||
|
||||
// copypasta alert
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue