Hi Alexandre, On 13 January 2017 at 07:47, Alexandre Courbot <acour...@nvidia.com> wrote:
> @@ -2559,6 +2559,10 @@ if test -n "$with_gallium_drivers"; then > require_libdrm "virgl" > require_basic_egl "virgl" > ;; > + xtegra) > + HAVE_GALLIUM_TEGRA=yes > + require_libdrm "tegra" > + ;; You'll need a similar inter-dependency as imx. Namely: either require nouveau gallium driver, or implicitly enable it (add new NEED_GALLIUM_NOUVEAU and update all the tracking). Former is one-line, whist latter might be better in the long run but rather picky to get right. > --- a/src/gallium/auxiliary/target-helpers/drm_helper.h > +++ b/src/gallium/auxiliary/target-helpers/drm_helper.h > @@ -312,5 +312,27 @@ pipe_imx_drm_create_screen(int fd) > > #endif > > +#ifdef GALLIUM_TEGRA > +#include "tegra/drm/tegra_drm_public.h" > + > +struct pipe_screen * > +pipe_tegra_create_screen(int fd) > +{ > + struct pipe_screen *screen; > + > + screen = tegra_drm_screen_create(fd); > + return screen ? debug_screen_wrap(screen) : NULL; > +} > + > +#else > + > +struct pipe_screen * > +pipe_tegra_create_screen(int fd) > +{ > + fprintf(stderr, "tegra: driver missing\n"); > + return NULL; > +} > + > +#endif > Out of curiosity: have you tried adding a macro which lets us minimise all this boilerplate ? Similar question for the one in dri/targets.c. Neither of these questions is a requirement for merging tegra. > --- /dev/null > +++ b/src/gallium/drivers/tegra/Makefile.am > @@ -0,0 +1,9 @@ > +include $(top_srcdir)/src/gallium/Automake.inc > + > +AM_CPPFLAGS = \ > + $(GALLIUM_CFLAGS) \ > + $(TEGRA_CFLAGS) This seems like a leftover from when libdrm_tegra was used. > --- /dev/null > +++ b/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c > +#include "tegra_drm_public.h" > +#include "nouveau/drm/nouveau_drm_public.h" > +#include "renderonly/renderonly.h" > + > +#include <libdrm/tegra_drm.h> Drop the "libdrm/" part. > +struct pipe_screen *tegra_drm_screen_create(int fd) > +{ > + struct renderonly ro = { > + .create_for_resource = tegra_create_with_tiling_for_resource, > + .kms_fd = fd, > + .gpu_fd = drmOpenWithType("nouveau", NULL, DRM_NODE_RENDER), All the drmOpen() API carries a lot of UMS legacy and nasty 'hacks'. Do not use it, please ? Please use the drmDevice API to query all devices and pick one based on $heuristics. We might want to add "driver" to the retrieved information [to make things a bit easier], but that has it's own set of problems. > + }; > + > + if (ro.gpu_fd < 0) > + return NULL; > + > + struct pipe_screen *screen = > nouveau_drm_screen_create_renderonly(ro.gpu_fd, &ro); > + if (!screen) > + drmClose(ro.gpu_fd); Thus this will become close(). Thanks Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev