gallium/virgl: Add code path for virgl to read driconf
This works only for the drm variant of virgl and not for the vtest variant. v2: Rebase, replace the configuration query function by a pointer to the configuration data. Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Emil Velikov <emil.velikov@collabora.com> (v1) Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
This commit is contained in:
parent
cf800998af
commit
30eb1fdc51
|
@ -107,6 +107,7 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
|
|||
{
|
||||
.driver_name = "virtio_gpu",
|
||||
.create_screen = pipe_virgl_create_screen,
|
||||
.driconf_xml = &virgl_driconf_xml,
|
||||
},
|
||||
{
|
||||
.driver_name = "v3d",
|
||||
|
|
|
@ -249,10 +249,14 @@ pipe_virgl_create_screen(int fd, const struct pipe_screen_config *config)
|
|||
{
|
||||
struct pipe_screen *screen;
|
||||
|
||||
screen = virgl_drm_screen_create(fd);
|
||||
screen = virgl_drm_screen_create(fd, config);
|
||||
return screen ? debug_screen_wrap(screen) : NULL;
|
||||
}
|
||||
|
||||
const char *virgl_driconf_xml =
|
||||
#include "virgl/virgl_driinfo.h"
|
||||
;
|
||||
|
||||
#else
|
||||
|
||||
struct pipe_screen *
|
||||
|
@ -262,6 +266,8 @@ pipe_virgl_create_screen(int fd, const struct pipe_screen_config *config)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
const char *virgl_driconf_xml = NULL;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef GALLIUM_VC4
|
||||
|
|
|
@ -7,6 +7,7 @@ struct pipe_screen_config;
|
|||
const char *iris_driconf_xml;
|
||||
const char *radeonsi_driconf_xml;
|
||||
const char *v3d_driconf_xml;
|
||||
const char *virgl_driconf_xml;
|
||||
|
||||
struct pipe_screen *
|
||||
pipe_i915_create_screen(int fd, const struct pipe_screen_config *config);
|
||||
|
|
|
@ -41,7 +41,7 @@ sw_screen_create_named(struct sw_winsys *winsys, const char *driver)
|
|||
if (screen == NULL && strcmp(driver, "virpipe") == 0) {
|
||||
struct virgl_winsys *vws;
|
||||
vws = virgl_vtest_winsys_wrap(winsys);
|
||||
screen = virgl_create_screen(vws);
|
||||
screen = virgl_create_screen(vws, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ sw_screen_create_named(struct sw_winsys *winsys, const char *driver)
|
|||
if (screen == NULL && strcmp(driver, "virpipe") == 0) {
|
||||
struct virgl_winsys *vws;
|
||||
vws = virgl_vtest_winsys_wrap(winsys);
|
||||
screen = virgl_create_screen(vws);
|
||||
screen = virgl_create_screen(vws, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
|
||||
struct pipe_screen;
|
||||
struct virgl_winsys;
|
||||
struct pipe_screen_config;
|
||||
|
||||
struct pipe_screen *
|
||||
virgl_create_screen(struct virgl_winsys *vws);
|
||||
virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *config);
|
||||
#endif
|
||||
|
|
|
@ -822,7 +822,7 @@ fixup_readback_format(union virgl_caps *caps)
|
|||
}
|
||||
|
||||
struct pipe_screen *
|
||||
virgl_create_screen(struct virgl_winsys *vws)
|
||||
virgl_create_screen(struct virgl_winsys *vws, const struct pipe_screen_config *config)
|
||||
{
|
||||
struct virgl_screen *screen = CALLOC_STRUCT(virgl_screen);
|
||||
|
||||
|
|
|
@ -25,6 +25,6 @@
|
|||
|
||||
struct pipe_screen;
|
||||
|
||||
struct pipe_screen *virgl_drm_screen_create(int fd);
|
||||
struct pipe_screen *virgl_drm_screen_create(int fd, const struct pipe_screen_config *config);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1057,7 +1057,7 @@ static int compare_fd(void *key1, void *key2)
|
|||
}
|
||||
|
||||
struct pipe_screen *
|
||||
virgl_drm_screen_create(int fd)
|
||||
virgl_drm_screen_create(int fd, const struct pipe_screen_config *config)
|
||||
{
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
|
||||
|
@ -1081,7 +1081,7 @@ virgl_drm_screen_create(int fd)
|
|||
goto unlock;
|
||||
}
|
||||
|
||||
pscreen = virgl_create_screen(vws);
|
||||
pscreen = virgl_create_screen(vws, config);
|
||||
if (pscreen) {
|
||||
util_hash_table_set(fd_tab, intptr_to_pointer(dup_fd), pscreen);
|
||||
|
||||
|
|
Loading…
Reference in New Issue