Commit f328260e authored by Alyssa Rosenzweig's avatar Alyssa Rosenzweig

Merge branch 'mergable'

parents 617cf403 fb2fbbc7
......@@ -352,7 +352,7 @@ matrix:
- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
- DRI_DRIVERS=""
- GALLIUM_ST="--enable-dri --disable-opencl --disable-xa --disable-nine --disable-xvmc --disable-vdpau --disable-va --disable-omx-bellagio --disable-gallium-osmesa"
- GALLIUM_DRIVERS="i915,nouveau,pl111,r300,r600,freedreno,svga,swrast,v3d,vc4,virgl,etnaviv,imx"
- GALLIUM_DRIVERS="i915,nouveau,kmsro,r300,r600,freedreno,svga,swrast,v3d,vc4,virgl,etnaviv,imx"
- VULKAN_DRIVERS=""
- LIBUNWIND_FLAGS="--enable-libunwind"
addons:
......
......@@ -24,7 +24,7 @@
# BOARD_GPU_DRIVERS should be defined. The valid values are
#
# classic drivers: i915 i965
# gallium drivers: swrast freedreno i915g nouveau pl111 r300g r600g radeonsi vc4 virgl vmwgfx etnaviv imx
# gallium drivers: swrast freedreno i915g nouveau kmsro r300g r600g radeonsi vc4 virgl vmwgfx etnaviv imx
#
# The main target is libGLES_mesa. For each classic driver enabled, a DRI
# module will also be built. DRI modules will be loaded by libGLES_mesa.
......@@ -52,7 +52,7 @@ gallium_drivers := \
freedreno.HAVE_GALLIUM_FREEDRENO \
i915g.HAVE_GALLIUM_I915 \
nouveau.HAVE_GALLIUM_NOUVEAU \
pl111.HAVE_GALLIUM_PL111 \
kmsro.HAVE_GALLIUM_KMSRO \
r300g.HAVE_GALLIUM_R300 \
r600g.HAVE_GALLIUM_R600 \
radeonsi.HAVE_GALLIUM_RADEONSI \
......
......@@ -45,7 +45,7 @@ AM_DISTCHECK_CONFIGURE_FLAGS = \
--enable-libunwind \
--with-platforms=x11,wayland,drm,surfaceless \
--with-dri-drivers=i915,i965,nouveau,radeon,r200,swrast \
--with-gallium-drivers=i915,nouveau,r300,pl111,r600,radeonsi,freedreno,svga,swrast,vc4,tegra,virgl,swr,etnaviv,imx \
--with-gallium-drivers=i915,nouveau,r300,kmsro,r600,radeonsi,freedreno,svga,swrast,vc4,tegra,virgl,swr,etnaviv,imx \
--with-vulkan-drivers=intel,radeon
ACLOCAL_AMFLAGS = -I m4
......
......@@ -1395,7 +1395,7 @@ GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast"
AC_ARG_WITH([gallium-drivers],
[AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],
[comma delimited Gallium drivers list, e.g.
"i915,nouveau,r300,r600,radeonsi,freedreno,pl111,svga,swrast,swr,tegra,v3d,vc4,virgl,etnaviv,imx"
"i915,nouveau,r300,r600,radeonsi,freedreno,kmsro,svga,swrast,swr,tegra,v3d,vc4,virgl,etnaviv,imx"
@<:@default=r300,r600,svga,swrast@:>@])],
[with_gallium_drivers="$withval"],
[with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"])
......@@ -2816,8 +2816,8 @@ if test -n "$with_gallium_drivers"; then
DEFINES="$DEFINES -DUSE_V3D_SIMULATOR"],
[USE_V3D_SIMULATOR=no])
;;
xpl111)
HAVE_GALLIUM_PL111=yes
xkmsro)
HAVE_GALLIUM_KMSRO=yes
;;
xvirgl)
HAVE_GALLIUM_VIRGL=yes
......@@ -2854,8 +2854,8 @@ if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" = xyes ; then
AC_MSG_ERROR([Building with imx requires etnaviv])
fi
if test "x$HAVE_GALLIUM_VC4" != xyes -a "x$HAVE_GALLIUM_PL111" = xyes ; then
AC_MSG_ERROR([Building with pl111 requires vc4])
if test "x$HAVE_GALLIUM_VC4" != xyes -a "x$HAVE_GALLIUM_KMSRO" = xyes ; then
AC_MSG_ERROR([Building with kmsro requires vc4])
fi
if test "x$HAVE_GALLIUM_NOUVEAU" != xyes -a "x$HAVE_GALLIUM_TEGRA" = xyes; then
......@@ -2952,7 +2952,7 @@ fi
AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_PL111, test "x$HAVE_GALLIUM_PL111" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_KMSRO, test "x$HAVE_GALLIUM_KMSRO" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes)
AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes)
......@@ -3102,7 +3102,7 @@ AC_CONFIG_FILES([Makefile
src/gallium/drivers/i915/Makefile
src/gallium/drivers/llvmpipe/Makefile
src/gallium/drivers/nouveau/Makefile
src/gallium/drivers/pl111/Makefile
src/gallium/drivers/kmsro/Makefile
src/gallium/drivers/r300/Makefile
src/gallium/drivers/r600/Makefile
src/gallium/drivers/radeonsi/Makefile
......@@ -3150,7 +3150,7 @@ AC_CONFIG_FILES([Makefile
src/gallium/winsys/freedreno/drm/Makefile
src/gallium/winsys/i915/drm/Makefile
src/gallium/winsys/nouveau/drm/Makefile
src/gallium/winsys/pl111/drm/Makefile
src/gallium/winsys/kmsro/drm/Makefile
src/gallium/winsys/radeon/drm/Makefile
src/gallium/winsys/amdgpu/drm/Makefile
src/gallium/winsys/svga/drm/Makefile
......
......@@ -131,8 +131,8 @@ if _drivers.contains('auto')
]
elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
_drivers = [
'pl111', 'v3d', 'vc4', 'freedreno', 'etnaviv', 'imx', 'nouveau',
'tegra', 'virgl', 'swrast', 'panfrost', 'meson', 'rockchip'
'kmsro', 'v3d', 'vc4', 'freedreno', 'etnaviv', 'imx', 'nouveau',
'tegra', 'virgl', 'swrast', 'panfrost'
]
else
error('Unknown architecture @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format(
......@@ -145,7 +145,7 @@ if _drivers.contains('auto')
host_machine.system()))
endif
endif
with_gallium_pl111 = _drivers.contains('pl111')
with_gallium_kmsro = _drivers.contains('kmsro')
with_gallium_radeonsi = _drivers.contains('radeonsi')
with_gallium_r300 = _drivers.contains('r300')
with_gallium_r600 = _drivers.contains('r600')
......@@ -155,8 +155,6 @@ with_gallium_softpipe = _drivers.contains('swrast')
with_gallium_vc4 = _drivers.contains('vc4')
with_gallium_v3d = _drivers.contains('v3d')
with_gallium_panfrost = _drivers.contains('panfrost')
with_gallium_meson = _drivers.contains('meson')
with_gallium_rockchip = _drivers.contains('rockchip')
with_gallium_etnaviv = _drivers.contains('etnaviv')
with_gallium_imx = _drivers.contains('imx')
with_gallium_tegra = _drivers.contains('tegra')
......@@ -194,9 +192,6 @@ if _vulkan_drivers.contains('auto')
host_machine.system()))
endif
endif
if (with_gallium_meson or with_gallium_rockchip) and not with_gallium_panfrost
error('meson/rockchip driver requires panfrost driver')
endif
with_intel_vk = _vulkan_drivers.contains('intel')
with_amd_vk = _vulkan_drivers.contains('amd')
......@@ -211,8 +206,8 @@ endif
if with_gallium_imx and not with_gallium_etnaviv
error('IMX driver requires etnaviv driver')
endif
if with_gallium_pl111 and not with_gallium_vc4
error('pl111 driver requires vc4 driver')
if with_gallium_kmsro and not (with_gallium_vc4 or with_gallium_etnaviv or with_gallium_panfrost)
error('kmsro driver requires one or more renderonly drivers (vc4, etnaviv)')
endif
if with_gallium_tegra and not with_gallium_nouveau
error('tegra driver requires nouveau driver')
......
......@@ -58,9 +58,9 @@ option(
type : 'array',
value : ['auto'],
choices : [
'', 'auto', 'pl111', 'radeonsi', 'r300', 'r600', 'nouveau', 'freedreno',
'', 'auto', 'kmsro', 'radeonsi', 'r300', 'r600', 'nouveau', 'freedreno',
'swrast', 'v3d', 'vc4', 'etnaviv', 'imx', 'tegra', 'i915', 'svga', 'virgl',
'swr', 'panfrost', 'meson', 'rockchip'
'swr', 'panfrost'
],
description : 'List of gallium drivers to build. If this is set to auto all drivers applicable to the target OS/architecture will be built'
)
......
......@@ -38,7 +38,7 @@ SUBDIRS += winsys/sw/kms-dri winsys/sw/dri drivers/softpipe
SUBDIRS += winsys/freedreno/drm drivers/freedreno
SUBDIRS += winsys/i915/drm drivers/i915
SUBDIRS += winsys/nouveau/drm drivers/nouveau
SUBDIRS += winsys/pl111/drm drivers/pl111
SUBDIRS += winsys/kmsro/drm drivers/kmsro
SUBDIRS += winsys/radeon/drm drivers/r300
SUBDIRS += winsys/radeon/drm drivers/r600
SUBDIRS += winsys/radeon/drm winsys/amdgpu/drm drivers/radeonsi
......
......@@ -60,8 +60,8 @@ if HAVE_GALLIUM_IMX
SUBDIRS += drivers/imx winsys/imx/drm
endif
if HAVE_GALLIUM_PL111
SUBDIRS += drivers/pl111 winsys/pl111/drm
if HAVE_GALLIUM_KMSRO
SUBDIRS += drivers/kmsro winsys/kmsro/drm
endif
## swrast/softpipe
......
......@@ -108,12 +108,7 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
},
{
.driver_name = "pl111",
.create_screen = pipe_pl111_create_screen,
.configuration = pipe_default_configuration_query,
},
{
.driver_name = "rockchip",
.create_screen = pipe_rockchip_create_screen,
.create_screen = pipe_kmsro_create_screen,
.configuration = pipe_default_configuration_query,
},
{
......@@ -136,6 +131,16 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
.create_screen = pipe_panfrost_create_screen,
.configuration = pipe_default_configuration_query,
},
{
.driver_name = "rockchip",
.create_screen = pipe_kmsro_create_screen,
.configuration = pipe_default_configuration_query,
},
{
.driver_name = "meson",
.create_screen = pipe_kmsro_create_screen,
.configuration = pipe_default_configuration_query,
},
{
.driver_name = "etnaviv",
.create_screen = pipe_etna_create_screen,
......@@ -151,11 +156,6 @@ static const struct drm_driver_descriptor driver_descriptors[] = {
.create_screen = pipe_tegra_create_screen,
.configuration = pipe_default_configuration_query,
},
{
.driver_name = "meson",
.create_screen = pipe_meson_create_screen,
.configuration = pipe_default_configuration_query,
},
};
#endif
......
......@@ -83,47 +83,24 @@ pipe_nouveau_create_screen(int fd, const struct pipe_screen_config *config)
#endif
#ifdef GALLIUM_PL111
#include "pl111/drm/pl111_drm_public.h"
#ifdef GALLIUM_KMSRO
#include "kmsro/drm/kmsro_drm_public.h"
struct pipe_screen *
pipe_pl111_create_screen(int fd, const struct pipe_screen_config *config)
pipe_kmsro_create_screen(int fd, const struct pipe_screen_config *config)
{
struct pipe_screen *screen;
screen = pl111_drm_screen_create(fd);
screen = kmsro_drm_screen_create(fd);
return screen ? debug_screen_wrap(screen) : NULL;
}
#else
struct pipe_screen *
pipe_pl111_create_screen(int fd, const struct pipe_screen_config *config)
pipe_kmsro_create_screen(int fd, const struct pipe_screen_config *config)
{
fprintf(stderr, "pl111: driver missing\n");
return NULL;
}
#endif
#ifdef GALLIUM_ROCKCHIP
#include "rockchip/drm/rockchip_drm_public.h"
struct pipe_screen *
pipe_rockchip_create_screen(int fd, const struct pipe_screen_config *config)
{
struct pipe_screen *screen;
screen = rockchip_drm_screen_create(fd);
return screen ? debug_screen_wrap(screen) : NULL;
}
#else
struct pipe_screen *
pipe_rockchip_create_screen(int fd, const struct pipe_screen_config *config)
{
fprintf(stderr, "rockchip: driver missing\n");
fprintf(stderr, "kmsro: driver missing\n");
return NULL;
}
......@@ -449,27 +426,4 @@ pipe_tegra_create_screen(int fd, const struct pipe_screen_config *config)
#endif
#ifdef GALLIUM_MESON
#include "meson/drm/meson_drm_public.h"
struct pipe_screen *
pipe_meson_create_screen(int fd, const struct pipe_screen_config *config)
{
struct pipe_screen *screen;
screen = meson_screen_create(fd);
return screen ? debug_screen_wrap(screen) : NULL;
}
#else
struct pipe_screen *
pipe_meson_create_screen(int fd, const struct pipe_screen_config *config)
{
fprintf(stderr, "meson: driver missing\n");
return NULL;
}
#endif
#endif /* DRM_HELPER_H */
......@@ -42,17 +42,11 @@ pipe_v3d_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_vc4_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_rockchip_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_meson_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_panfrost_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_pl111_create_screen(int fd, const struct pipe_screen_config *config);
pipe_kmsro_create_screen(int fd, const struct pipe_screen_config *config);
struct pipe_screen *
pipe_etna_create_screen(int fd, const struct pipe_screen_config *config);
......
......@@ -28,12 +28,12 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
$(C_SOURCES)
LOCAL_MODULE := libmesa_pipe_pl111
LOCAL_MODULE := libmesa_pipe_kmsro
include $(GALLIUM_COMMON_MK)
include $(BUILD_STATIC_LIBRARY)
ifneq ($(HAVE_GALLIUM_PL111),)
ifneq ($(HAVE_GALLIUM_KMSRO),)
GALLIUM_TARGET_DRIVERS += pl111
$(eval GALLIUM_LIBS += $(LOCAL_MODULE) libmesa_winsys_pl111)
$(eval GALLIUM_LIBS += $(LOCAL_MODULE) libmesa_winsys_kmsro)
endif
if HAVE_GALLIUM_PL111
if HAVE_GALLIUM_KMSRO
TARGET_DRIVERS += pl111
TARGET_CPPFLAGS += -DGALLIUM_PL111
TARGET_CPPFLAGS += -DGALLIUM_KMSRO
TARGET_LIB_DEPS += \
$(top_builddir)/src/gallium/winsys/pl111/drm/libpl111drm.la \
$(top_builddir)/src/gallium/winsys/kmsro/drm/libkmsrodrm.la \
$(LIBDRM_LIBS)
endif
......@@ -3,6 +3,6 @@ include $(top_srcdir)/src/gallium/Automake.inc
AM_CPPFLAGS = \
$(GALLIUM_CFLAGS)
noinst_LTLIBRARIES = libpl111.la
noinst_LTLIBRARIES = libkmsro.la
libpl111_la_SOURCES = $(C_SOURCES)
libkmsro_la_SOURCES = $(C_SOURCES)
......@@ -95,15 +95,16 @@ if with_gallium_vc4
else
driver_vc4 = declare_dependency()
endif
if with_gallium_pl111
subdir('winsys/pl111/drm')
if with_gallium_etnaviv
subdir('winsys/etnaviv/drm')
subdir('drivers/etnaviv')
else
driver_pl111 = declare_dependency()
driver_etnaviv = declare_dependency()
endif
if with_gallium_rockchip
subdir('winsys/rockchip/drm')
if with_gallium_kmsro
subdir('winsys/kmsro/drm')
else
driver_rockchip = declare_dependency()
driver_kmsro = declare_dependency()
endif
if with_gallium_v3d
subdir('winsys/v3d/drm')
......@@ -111,12 +112,6 @@ if with_gallium_v3d
else
driver_v3d = declare_dependency()
endif
if with_gallium_etnaviv
subdir('winsys/etnaviv/drm')
subdir('drivers/etnaviv')
else
driver_etnaviv = declare_dependency()
endif
if with_gallium_imx
subdir('winsys/imx/drm')
else
......@@ -147,11 +142,6 @@ if with_gallium_virgl
else
driver_virgl = declare_dependency()
endif
if with_gallium_meson
subdir('winsys/meson/drm')
else
driver_meson = declare_dependency()
endif
if with_gallium_opencl
# TODO: this isn't really clover specific, but ATM clover is the only
# consumer
......
......@@ -78,7 +78,7 @@ include $(top_srcdir)/src/gallium/drivers/tegra/Automake.inc
include $(top_srcdir)/src/gallium/drivers/v3d/Automake.inc
include $(top_srcdir)/src/gallium/drivers/vc4/Automake.inc
include $(top_srcdir)/src/gallium/drivers/pl111/Automake.inc
include $(top_srcdir)/src/gallium/drivers/kmsro/Automake.inc
include $(top_srcdir)/src/gallium/drivers/virgl/Automake.inc
......
......@@ -56,15 +56,13 @@ libgallium_dri = shared_library(
dependencies : [
dep_selinux, dep_expat, dep_libdrm, dep_llvm, dep_thread,
driver_swrast, driver_r300, driver_r600, driver_radeonsi, driver_nouveau,
driver_pl111, driver_v3d, driver_vc4, driver_freedreno, driver_etnaviv,
driver_kmsro, driver_v3d, driver_vc4, driver_freedreno, driver_etnaviv,
driver_imx, driver_tegra, driver_i915, driver_svga, driver_virgl,
driver_swr, driver_panfrost, driver_meson, driver_rockchip
driver_swr, driver_panfrost
],
)
foreach d : [[with_gallium_pl111, 'pl111_dri.so'],
[with_gallium_rockchip, 'rockchip_dri.so'],
[with_gallium_meson, 'meson_dri.so'],
foreach d : [[with_gallium_kmsro, 'pl111_dri.so'],
[with_gallium_radeonsi, 'radeonsi_dri.so'],
[with_gallium_nouveau, 'nouveau_dri.so'],
[with_gallium_freedreno, ['msm_dri.so', 'kgsl_dri.so']],
......@@ -73,6 +71,8 @@ foreach d : [[with_gallium_pl111, 'pl111_dri.so'],
[with_gallium_v3d, 'v3d_dri.so'],
[with_gallium_vc4, 'vc4_dri.so'],
[with_gallium_panfrost, 'panfrost_dri.so'],
[with_gallium_panfrost, 'rockchip_dri.so'],
[with_gallium_panfrost, 'meson_dri.so'],
[with_gallium_etnaviv, 'etnaviv_dri.so'],
[with_gallium_imx, 'imx-drm_dri.so'],
[with_gallium_tegra, 'tegra_dri.so'],
......
......@@ -77,17 +77,17 @@ DEFINE_LOADER_DRM_ENTRYPOINT(v3d)
#if defined(GALLIUM_VC4)
DEFINE_LOADER_DRM_ENTRYPOINT(vc4)
#if defined(GALLIUM_PL111)
#if defined(GALLIUM_KMSRO)
DEFINE_LOADER_DRM_ENTRYPOINT(pl111)
#endif
#endif
#if defined(GALLIUM_ROCKCHIP)
DEFINE_LOADER_DRM_ENTRYPOINT(rockchip)
#endif
#if defined(GALLIUM_PANFROST)
DEFINE_LOADER_DRM_ENTRYPOINT(panfrost)
#if defined(GALLIUM_KMSRO)
DEFINE_LOADER_DRM_ENTRYPOINT(rockchip)
DEFINE_LOADER_DRM_ENTRYPOINT(meson)
#endif
#endif
#if defined(GALLIUM_ETNAVIV)
......@@ -98,7 +98,3 @@ DEFINE_LOADER_DRM_ENTRYPOINT(etnaviv)
#if defined(GALLIUM_TEGRA)
DEFINE_LOADER_DRM_ENTRYPOINT(tegra);
#endif
#if defined(GALLIUM_MESON)
DEFINE_LOADER_DRM_ENTRYPOINT(meson)
#endif
......@@ -27,7 +27,7 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(C_SOURCES)
LOCAL_MODULE := libmesa_winsys_pl111
LOCAL_MODULE := libmesa_winsys_kmsro
include $(GALLIUM_COMMON_MK)
include $(BUILD_STATIC_LIBRARY)
......@@ -29,8 +29,16 @@ AM_CFLAGS = \
$(GALLIUM_WINSYS_CFLAGS) \
$(LIBDRM_CFLAGS)
noinst_LTLIBRARIES = librockchipdrm.la
if HAVE_GALLIUM_ETNAVIV
AM_CFLAGS += -DGALLIUM_ETNAVIV
endif
librockchipdrm_la_SOURCES = $(C_SOURCES)
if HAVE_GALLIUM_VC4
AM_CFLAGS += -DGALLIUM_VC4
endif
noinst_LTLIBRARIES = libkmsrodrm.la
libkmsrodrm_la_SOURCES = $(C_SOURCES)
EXTRA_DIST = meson.build
C_SOURCES := \
kmsro_drm_public.h \
kmsro_drm_winsys.c
......@@ -24,11 +24,11 @@
* Christian Gmeiner <christian.gmeiner@gmail.com>
*/
#ifndef __PL111_DRM_PUBLIC_H__
#define __PL111_DRM_PUBLIC_H__
#ifndef __KMSRO_DRM_PUBLIC_H__
#define __KMSRO_DRM_PUBLIC_H__
struct pipe_screen;
struct pipe_screen *pl111_drm_screen_create(int fd);
struct pipe_screen *kmsro_drm_screen_create(int fd);
#endif /* __PL111_DRM_PUBLIC_H__ */
#endif /* __KMSRO_DRM_PUBLIC_H__ */
......@@ -25,31 +25,69 @@
#include <fcntl.h>
#include <unistd.h>
#include "pl111_drm_public.h"
#include "kmsro_drm_public.h"
#include "vc4/drm/vc4_drm_public.h"
#include "etnaviv/drm/etnaviv_drm_public.h"
#include "panfrost/drm/panfrost_drm_public.h"
#include "xf86drm.h"
#include "pipe/p_screen.h"
#include "renderonly/renderonly.h"
struct pipe_screen *pl111_drm_screen_create(int fd)
struct pipe_screen *kmsro_drm_screen_create(int fd)
{
bool is_drm;
struct pipe_screen *screen = NULL;
struct renderonly ro = {
/* Passes the vc4-allocated BO through to the pl111 DRM device using
.kms_fd = fd,
.gpu_fd = -1,
};
#if defined(GALLIUM_VC4)
ro.gpu_fd = drmOpenWithType("vc4", NULL, DRM_NODE_RENDER);
if (ro.gpu_fd >= 0) {
/* Passes the vc4-allocated BO through to the KMS-only DRM device using
* PRIME buffer sharing. The VC4 BO must be linear, which the SCANOUT
* flag on allocation will have ensured.
*/
.create_for_resource = renderonly_create_gpu_import_for_resource,
.kms_fd = fd,
.gpu_fd = drmOpenWithType("vc4", NULL, DRM_NODE_RENDER),
};
ro.create_for_resource = renderonly_create_gpu_import_for_resource,
screen = vc4_drm_screen_create_renderonly(&ro);
if (!screen)
close(ro.gpu_fd);
return screen;
}
#endif
#if defined(GALLIUM_ETNAVIV)
ro.gpu_fd = drmOpenWithType("etnaviv", NULL, DRM_NODE_RENDER);
if (ro.gpu_fd >= 0) {
ro.create_for_resource = renderonly_create_kms_dumb_buffer_for_resource,
screen = etna_drm_screen_create_renderonly(&ro);
if (!screen)
close(ro.gpu_fd);
return screen;
}
#endif
#if defined(GALLIUM_PANFROST)
ro.gpu_fd = drmOpenWithType("panfrost", NULL, DRM_NODE_RENDER);
if (ro.gpu_fd < 0) {
ro.gpu_fd = open("/dev/mali0", O_RDWR | O_CLOEXEC);
is_drm = false;
} else
is_drm = true;
if (ro.gpu_fd < 0)
return NULL;
if (ro.gpu_fd >= 0) {
ro.create_for_resource = renderonly_create_kms_dumb_buffer_for_resource,
screen = panfrost_drm_screen_create_renderonly(&ro, is_drm);
if (!screen)
close(ro.gpu_fd);
struct pipe_screen *screen = vc4_drm_screen_create_renderonly(&ro);
if (!screen)
close(ro.gpu_fd);
return screen;
}
#endif
return screen;
}
......@@ -18,19 +18,29 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
libpl111winsys = static_library(
'pl111winsys',
files('pl111_drm_winsys.c'),
kmsro_c_args = []
if with_gallium_etnaviv
kmsro_c_args += '-DGALLIUM_ETNAVIV'
endif
if with_gallium_panfrost
kmsro_c_args += '-DGALLIUM_PANFROST'
endif
if with_gallium_vc4
kmsro_c_args += '-DGALLIUM_VC4'
endif
libkmsrowinsys = static_library(
'kmsrowinsys',
files('kmsro_drm_winsys.c'),
include_directories : [
inc_src, inc_include,
inc_gallium, inc_gallium_aux, inc_gallium_winsys,
],
c_args : [c_vis_args],
c_args : [c_vis_args, kmsro_c_args],
dependencies: dep_libdrm,
link_with : libvc4winsys,
)
driver_pl111 = declare_dependency(
compile_args : '-DGALLIUM_PL111',
link_with : libpl111winsys,
driver_kmsro = declare_dependency(
compile_args : '-DGALLIUM_KMSRO',
link_with : libkmsrowinsys,
)
# Copyright (c) 2017 Lima Project
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
LOCAL_PATH := $(call my-dir)
# get C_SOURCES
include $(LOCAL_PATH)/Makefile.sources
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(C_SOURCES)
LOCAL_MODULE := libmesa_winsys_meson
include $(GALLIUM_COMMON_MK)
include $(BUILD_STATIC_LIBRARY)
# Copyright (c) 2017 Lima Project
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,