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:
Gert Wollny 2019-04-10 13:54:14 +02:00
parent cf800998af
commit 30eb1fdc51
9 changed files with 17 additions and 8 deletions

View File

@ -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",

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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);