Changes from V1 -> V2: - updated Copyright - added $(top_srcdir)/src/gallium/winsys to include path (suggested by Emil) - adapted driver to new renderonly API Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com> Acked-by: Emil Velikov <emil.velikov@collabora.com>tags/17.0-branchpoint
@@ -1234,7 +1234,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,ilo,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,etnaviv" | |||
"i915,ilo,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,etnaviv,imx" | |||
@<:@default=r300,r600,svga,swrast@:>@])], | |||
[with_gallium_drivers="$withval"], | |||
[with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"]) | |||
@@ -2512,6 +2512,9 @@ if test -n "$with_gallium_drivers"; then | |||
PKG_CHECK_MODULES([ETNAVIV], [libdrm_etnaviv >= $LIBDRM_ETNAVIV_REQUIRED]) | |||
require_libdrm "etnaviv" | |||
;; | |||
ximx) | |||
HAVE_GALLIUM_IMX=yes | |||
;; | |||
xswrast) | |||
HAVE_GALLIUM_SOFTPIPE=yes | |||
if test "x$MESA_LLVM" = x1 && test "x$enable_gallium_llvm" == "xyes"; then | |||
@@ -2566,6 +2569,12 @@ if test "x$enable_gallium_llvm" == "xyes"; then | |||
llvm_add_default_components "gallium" | |||
fi | |||
dnl We need to validate some needed dependencies for renderonly drivers. | |||
if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" == xyes ; then | |||
AC_ERROR([Building with imx requires etnaviv]) | |||
fi | |||
dnl Set LLVM_LIBS - This is done after the driver configuration so | |||
dnl that drivers can add additional components to LLVM_COMPONENTS. | |||
dnl Previously, gallium drivers were updating LLVM_LIBS directly | |||
@@ -2631,6 +2640,7 @@ AM_CONDITIONAL(HAVE_GALLIUM_RADEON_COMMON, test "x$HAVE_GALLIUM_R600" = xyes -o | |||
AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes) | |||
AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes) | |||
AM_CONDITIONAL(HAVE_GALLIUM_ETNAVIV, test "x$HAVE_GALLIUM_ETNAVIV" = xyes) | |||
AM_CONDITIONAL(HAVE_GALLIUM_IMX, test "x$HAVE_GALLIUM_IMX" = xyes) | |||
AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes) | |||
AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes) | |||
AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes) | |||
@@ -2785,6 +2795,7 @@ AC_CONFIG_FILES([Makefile | |||
src/gallium/drivers/swr/Makefile | |||
src/gallium/drivers/trace/Makefile | |||
src/gallium/drivers/etnaviv/Makefile | |||
src/gallium/drivers/imx/Makefile | |||
src/gallium/drivers/vc4/Makefile | |||
src/gallium/drivers/virgl/Makefile | |||
src/gallium/state_trackers/clover/Makefile | |||
@@ -2815,6 +2826,7 @@ AC_CONFIG_FILES([Makefile | |||
src/gallium/tests/trivial/Makefile | |||
src/gallium/tests/unit/Makefile | |||
src/gallium/winsys/etnaviv/drm/Makefile | |||
src/gallium/winsys/imx/drm/Makefile | |||
src/gallium/winsys/freedreno/drm/Makefile | |||
src/gallium/winsys/i915/drm/Makefile | |||
src/gallium/winsys/intel/drm/Makefile |
@@ -72,6 +72,10 @@ if HAVE_GALLIUM_ETNAVIV | |||
SUBDIRS += drivers/etnaviv winsys/etnaviv/drm | |||
endif | |||
if HAVE_GALLIUM_IMX | |||
SUBDIRS += drivers/imx winsys/imx/drm | |||
endif | |||
## swrast/softpipe | |||
if HAVE_GALLIUM_SOFTPIPE | |||
SUBDIRS += drivers/softpipe |
@@ -158,6 +158,11 @@ static const struct drm_driver_descriptor driver_descriptors[] = { | |||
.driver_name = "etnaviv", | |||
.create_screen = pipe_etna_create_screen, | |||
.configuration = configuration_query, | |||
}, | |||
{ | |||
.driver_name = "imx-drm", | |||
.create_screen = pipe_imx_drm_create_screen, | |||
.configuration = configuration_query, | |||
} | |||
}; | |||
#endif |
@@ -289,4 +289,28 @@ pipe_etna_create_screen(int fd) | |||
#endif | |||
#ifdef GALLIUM_IMX | |||
#include "imx/drm/imx_drm_public.h" | |||
struct pipe_screen * | |||
pipe_imx_drm_create_screen(int fd) | |||
{ | |||
struct pipe_screen *screen; | |||
screen = imx_drm_screen_create(fd); | |||
return screen ? debug_screen_wrap(screen) : NULL; | |||
} | |||
#else | |||
struct pipe_screen * | |||
pipe_imx_drm_create_screen(int fd) | |||
{ | |||
fprintf(stderr, "imx-drm: driver missing\n"); | |||
return NULL; | |||
} | |||
#endif | |||
#endif /* DRM_HELPER_H */ |
@@ -37,4 +37,7 @@ pipe_vc4_create_screen(int fd); | |||
struct pipe_screen * | |||
pipe_etna_create_screen(int fd); | |||
struct pipe_screen * | |||
pipe_imx_drm_create_screen(int fd); | |||
#endif /* _DRM_HELPER_PUBLIC_H */ |
@@ -0,0 +1,9 @@ | |||
if HAVE_GALLIUM_IMX | |||
TARGET_DRIVERS += imx-drm | |||
TARGET_CPPFLAGS += -DGALLIUM_IMX | |||
TARGET_LIB_DEPS += \ | |||
$(top_builddir)/src/gallium/winsys/imx/drm/libimxdrm.la \ | |||
$(LIBDRM_LIBS) | |||
endif |
@@ -0,0 +1,8 @@ | |||
include $(top_srcdir)/src/gallium/Automake.inc | |||
AM_CPPFLAGS = \ | |||
$(GALLIUM_CFLAGS) | |||
noinst_LTLIBRARIES = libimx.la | |||
libimx_la_SOURCES = |
@@ -92,6 +92,7 @@ include $(top_srcdir)/src/gallium/drivers/vc4/Automake.inc | |||
include $(top_srcdir)/src/gallium/drivers/virgl/Automake.inc | |||
include $(top_srcdir)/src/gallium/drivers/etnaviv/Automake.inc | |||
include $(top_srcdir)/src/gallium/drivers/imx/Automake.inc | |||
include $(top_srcdir)/src/gallium/drivers/softpipe/Automake.inc | |||
include $(top_srcdir)/src/gallium/drivers/llvmpipe/Automake.inc |
@@ -165,6 +165,14 @@ PUBLIC const __DRIextension **__driDriverGetExtensions_i965(void) | |||
#if defined(GALLIUM_ETNAVIV) | |||
const __DRIextension **__driDriverGetExtensions_imx_drm(void); | |||
PUBLIC const __DRIextension **__driDriverGetExtensions_imx_drm(void) | |||
{ | |||
globalDriverAPI = &galliumdrm_driver_api; | |||
return galliumdrm_driver_extensions; | |||
} | |||
const __DRIextension **__driDriverGetExtensions_etnaviv(void); | |||
PUBLIC const __DRIextension **__driDriverGetExtensions_etnaviv(void) |
@@ -0,0 +1,33 @@ | |||
# Copyright © 2012 Intel Corporation | |||
# | |||
# 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 (including the next | |||
# paragraph) 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. | |||
include Makefile.sources | |||
include $(top_srcdir)/src/gallium/Automake.inc | |||
AM_CFLAGS = \ | |||
-I$(top_srcdir)/src/gallium/drivers \ | |||
-I$(top_srcdir)/src/gallium/winsys \ | |||
$(GALLIUM_WINSYS_CFLAGS) | |||
noinst_LTLIBRARIES = libimxdrm.la | |||
libimxdrm_la_SOURCES = $(C_SOURCES) |
@@ -0,0 +1,3 @@ | |||
C_SOURCES := \ | |||
imx_drm_public.h \ | |||
imx_drm_winsys.c |
@@ -0,0 +1,34 @@ | |||
/* | |||
* Copyright (C) 2016 Christian Gmeiner <christian.gmeiner@gmail.com> | |||
* | |||
* 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 (including the next | |||
* paragraph) 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. | |||
* | |||
* Authors: | |||
* Christian Gmeiner <christian.gmeiner@gmail.com> | |||
*/ | |||
#ifndef __IMX_DRM_PUBLIC_H__ | |||
#define __IMX_DRM_PUBLIC_H__ | |||
struct pipe_screen; | |||
struct pipe_screen *imx_drm_screen_create(int fd); | |||
#endif /* __IMX_DRM_PUBLIC_H__ */ |
@@ -0,0 +1,50 @@ | |||
/* | |||
* Copyright (C) 2016 Christian Gmeiner <christian.gmeiner@gmail.com> | |||
* | |||
* 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 (including the next | |||
* paragraph) 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. | |||
* | |||
* Authors: | |||
* Christian Gmeiner <christian.gmeiner@gmail.com> | |||
*/ | |||
#include "imx_drm_public.h" | |||
#include "etnaviv/drm/etnaviv_drm_public.h" | |||
#include "renderonly/renderonly.h" | |||
#include <fcntl.h> | |||
#include <unistd.h> | |||
struct pipe_screen *imx_drm_screen_create(int fd) | |||
{ | |||
struct renderonly ro = { | |||
.create_for_resource = renderonly_create_kms_dumb_buffer_for_resource, | |||
.kms_fd = fd, | |||
.gpu_fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC) | |||
}; | |||
if (ro.gpu_fd < 0) | |||
return NULL; | |||
struct pipe_screen *screen = etna_drm_screen_create_renderonly(&ro); | |||
if (!screen) | |||
close(ro.gpu_fd); | |||
return screen; | |||
} |