Bug 75453 - i915/DRM Gallium driver apparently not usable without DRM pipe loader
Summary: i915/DRM Gallium driver apparently not usable without DRM pipe loader
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/Gallium/i915g (show other bugs)
Version: git
Hardware: Other All
: medium normal
Assignee: Default DRI bug account
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-02-24 16:25 UTC by Christian Prochaska
Modified: 2014-02-28 23:08 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description Christian Prochaska 2014-02-24 16:25:38 UTC
(git master 73b46136b0ba20f7f84abdadad895111a4c37166)

I've built Mesa with the following configuration:

./autogen.sh --enable-gles2 --disable-glx --with-dri-drivers= --enable-gallium-egl --with-egl-platforms=drm --with-gallium-drivers=i915

With this configuration, both a DRI driver and a Gallium driver get built, despite the --with-dri-drivers= configure option (bug or intended?).

Then I've built the 'es2gears' demo as follows:

gcc -g -O0 -DMESA_EGL_NO_X11_HEADERS -o es2gears es2gears.c ../eglut/eglut_screen.c ../eglut/eglut.c -I../eglut -lGLESv2 -lEGL -lm

When I tried to run it on an IBM T60 notebook (Debian testing), at first bug 75335 triggered. Now that this bug has been resolved, the following error occured:

-----
EGL_VERSION = 1.4 (DRI2)
EGLUT: failed to choose a config
-----

When I deleted the DRI driver, the following error occured:

-----
gbm: failed to open any driver (search paths /usr/local/lib/dri)failed to load driver: i915
gbm: failed to open any driver (search paths /usr/local/lib/dri)failed to load driver: i915
gbm: failed to open any driver (search paths /usr/local/lib/dri)failed to load driver: i915
EGLUT: failed to initialize EGL display
-----

Apparently, the Gallium driver was not usable, too. Since bug 75335 got triggered by the missing DRM pipe loader, I tried to enable it with the following modification of configure.ac:

-----
index ba158e8..feb025f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1748,6 +1748,7 @@ if test "x$with_gallium_drivers" != x; then
         xi915)
             HAVE_GALLIUM_I915=yes
             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
+            gallium_require_drm_loader
             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 softpipe"
             if test "x$MESA_LLVM" = x1; then
                 GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
-----

With that, the demo finally worked:

-----
EGL_VERSION = 1.4 (Gallium)
Found 6 modes:
  0: 1400 x 1050
  1: 1400 x 1050
  2: 1280 x 1024
  3: 1024 x 768
  4: 800 x 600
  5: 640 x 480
Will use screen size: 1400 x 1050
vertex shader info: 
fragment shader info: 
info: 
724 frames in 5.0 seconds = 144.713 FPS
-----

So it seems that the DRM pipe loader should get enabled by default for the i915/DRM Gallium configuration, but I'm not sure if the modification I made would break some other configuration.
Comment 1 Emil Velikov 2014-02-24 19:06:31 UTC
Two distinct things happening here
 - I've assumed that string as "" is considered of length zero, thus an empty dri megadriver is built.

 -  gallium_require_drm_loader is missing for the i915, r300 and possibly svga gallium drivers.

Will send patches for both shortly
Comment 2 Emil Velikov 2014-02-24 19:22:55 UTC
* Correction: a white space only, including an empty string ("") is considered as of both zero and non zero size according test ...
Comment 3 Christian Prochaska 2014-02-25 16:12:53 UTC
Ah, that's interesting. Actually, the "DRI driver" I meant was the 'i915_dri.so' file, which got created from these components:

- libdricommon.a
- libmesagallium.a
- libgallium.a
- libdridrm.a
- libi915drm.a
- libwsw.a
- libsoftpipe.a
- libgalahad.a
- libtrace.a
- librbug.a
- libi915.a

The Makefile for this library is located in src/gallium/targets/dri-i915.

But you're right, there also apppeared a 'mesa_dri_drivers.so' in the build log, which doesn't appear anymore with your four patches applied. I also remember having seen an 'i915_dri.so' file linked to 'mesa_dri_drivers.so' with another configuration.

So, there appear to be two ways to get this 'i915_dri.so' file built and one of them is actually a Gallium driver? I'm confused now.
Comment 4 Emil Velikov 2014-02-28 23:08:17 UTC
(In reply to comment #3)
> Ah, that's interesting. Actually, the "DRI driver" I meant was the
> 'i915_dri.so' file, which got created from these components:
> 
Classic mesa can produce only DRI drivers, whereas gallium can do alot more - dri, vdpau, xvmc, omx, opencl...

> - libdricommon.a
> - libmesagallium.a
> - libgallium.a
> - libdridrm.a
> - libi915drm.a
> - libwsw.a
> - libsoftpipe.a
> - libgalahad.a
> - libtrace.a
> - librbug.a
> - libi915.a
> 
> The Makefile for this library is located in src/gallium/targets/dri-i915.
> 
> But you're right, there also apppeared a 'mesa_dri_drivers.so' in the build
> log, which doesn't appear anymore with your four patches applied. I also
> remember having seen an 'i915_dri.so' file linked to 'mesa_dri_drivers.so'
> with another configuration.
> 
Currently only classic dri drivers build into megadriver (mesa_dri_drivers.so) 

> So, there appear to be two ways to get this 'i915_dri.so' file built and one
> of them is actually a Gallium driver? I'm confused now.
Same hardware, different drivers developed via different infrastructure by  different teams. Is it that confusing :P

Named in the same way so that people can simply make install, and things just work(tm). If you're building both, then you need to keep an eye open to install the one you want. Simples :-)

FWIW the build should be fine now, thanks for the report.

commit 4687b0a1a7280a7f19e349aa6b00ee1c0f634b21
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Mon Feb 24 22:58:13 2014 +0000

    configure: enable the drm pipe-loader for non swrast drivers

    All hardware drivers including the virtual vmwgfx require
    the drm pipe-loader in order to be properly loaded by xa,
    gbm and opencl.

    Note this does _not_ add support for the above three it only
    allows the pipe driver to be loaded by the library.

    Eg. GBM will now properly open the pipe-i915 driver, should
    one be working on the such hardware.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.