diff options
Diffstat (limited to 'src/gallium/winsys')
-rw-r--r-- | src/gallium/winsys/vc4/drm/meson.build | 15 | ||||
-rw-r--r-- | src/gallium/winsys/vc4/drm/vc4_drm_winsys.c | 23 |
2 files changed, 35 insertions, 3 deletions
diff --git a/src/gallium/winsys/vc4/drm/meson.build b/src/gallium/winsys/vc4/drm/meson.build index 58216dc5f54..55c85734e04 100644 --- a/src/gallium/winsys/vc4/drm/meson.build +++ b/src/gallium/winsys/vc4/drm/meson.build @@ -18,12 +18,23 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +dep_simpenrose = dependency('simpenrose', required : false) + +vc4_winsys_c_args = [] +if with_gallium_kmsro + vc4_winsys_c_args += '-DGALLIUM_KMSRO' +endif + +if dep_simpenrose.found() + vc4_winsys_c_args += '-DUSE_VC4_SIMULATOR' +endif + libvc4winsys = static_library( 'vc4winsys', files('vc4_drm_winsys.c'), include_directories : [ inc_src, inc_include, - inc_gallium, inc_gallium_aux, inc_gallium_drivers, + inc_gallium, inc_gallium_aux, inc_gallium_drivers, inc_gallium_winsys, ], - c_args : [c_vis_args], + c_args : [c_vis_args, vc4_winsys_c_args], ) diff --git a/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c b/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c index 73717d25fe4..4215857d06b 100644 --- a/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c +++ b/src/gallium/winsys/vc4/drm/vc4_drm_winsys.c @@ -23,15 +23,36 @@ #include <unistd.h> #include <fcntl.h> +#include <sys/ioctl.h> #include "renderonly/renderonly.h" +#include "kmsro/drm/kmsro_drm_public.h" #include "vc4_drm_public.h" #include "vc4/vc4_screen.h" +#include "drm-uapi/vc4_drm.h" struct pipe_screen * vc4_drm_screen_create(int fd) { - return vc4_screen_create(fcntl(fd, F_DUPFD_CLOEXEC, 3), NULL); + bool v3d_present = true; + +#ifndef USE_VC4_SIMULATOR + struct drm_vc4_get_param ident0 = { + .param = DRM_VC4_PARAM_V3D_IDENT0, + }; + + int ret = ioctl(fd, DRM_IOCTL_VC4_GET_PARAM, &ident0); + v3d_present = ret == 0; +#endif + + if (v3d_present) + return vc4_screen_create(fcntl(fd, F_DUPFD_CLOEXEC, 3), NULL); + +#ifdef GALLIUM_KMSRO + return kmsro_drm_screen_create(fd); +#endif + + return NULL; } struct pipe_screen * |