summaryrefslogtreecommitdiff
path: root/docs/faq.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/faq.rst')
-rw-r--r--docs/faq.rst322
1 files changed, 322 insertions, 0 deletions
diff --git a/docs/faq.rst b/docs/faq.rst
new file mode 100644
index 00000000000..8ce6fdf8f06
--- /dev/null
+++ b/docs/faq.rst
@@ -0,0 +1,322 @@
+Frequently Asked Questions
+==========================
+
+Last updated: 19 September 2018
+
+Index
+-----
+
+#. `High-level Questions and Answers <#part1>`__
+#. `Compilation and Installation Problems <#part2>`__
+#. `Runtime / Rendering Problems <#part3>`__
+#. `Developer Questions <#part4>`__
+
+.. _part1:
+
+1. High-level Questions and Answers
+-----------------------------------
+
+1.1 What is Mesa?
+~~~~~~~~~~~~~~~~~
+
+Mesa is an open-source implementation of the OpenGL specification.
+OpenGL is a programming library for writing interactive 3D applications.
+See the `OpenGL website <https://www.opengl.org/>`__ for more
+information.
+
+Mesa 9.x supports the OpenGL 3.1 specification.
+
+1.2 Does Mesa support/use graphics hardware?
+--------------------------------------------
+
+Yes. Specifically, Mesa serves as the OpenGL core for the open-source
+DRI drivers for X.org.
+
+- See the `DRI website <https://dri.freedesktop.org/>`__ for more
+ information.
+- See `01.org <https://01.org/linuxgraphics>`__ for more information
+ about Intel drivers.
+- See `nouveau.freedesktop.org <https://nouveau.freedesktop.org>`__ for
+ more information about Nouveau drivers.
+- See
+ `www.x.org/wiki/RadeonFeature <https://www.x.org/wiki/RadeonFeature>`__
+ for more information about Radeon drivers.
+
+1.3 What purpose does Mesa serve today?
+---------------------------------------
+
+Hardware-accelerated OpenGL implementations are available for most
+popular operating systems today. Still, Mesa serves at least these
+purposes:
+
+- Mesa is used as the core of the open-source X.org DRI hardware
+ drivers.
+- Mesa is quite portable and allows OpenGL to be used on systems that
+ have no other OpenGL solution.
+- Software rendering with Mesa serves as a reference for validating the
+ hardware drivers.
+- A software implementation of OpenGL is useful for experimentation,
+ such as testing new rendering techniques.
+- Mesa can render images with deep color channels: 16-bit integer and
+ 32-bit floating point color channels are supported. This capability
+ is only now appearing in hardware.
+- Mesa's internal limits (max lights, clip planes, texture size, etc)
+ can be changed for special needs (hardware limits are hard to
+ overcome).
+
+1.4 What's the difference between "Stand-Alone" Mesa and the DRI drivers?
+-------------------------------------------------------------------------
+
+*Stand-alone Mesa* is the original incarnation of Mesa. On systems
+running the X Window System it does all its rendering through the Xlib
+API:
+
+- The GLX API is supported, but it's really just an emulation of the
+ real thing.
+- The GLX wire protocol is not supported and there's no OpenGL
+ extension loaded by the X server.
+- There is no hardware acceleration.
+- The OpenGL library, ``libGL.so``, contains everything (the
+ programming API, the GLX functions and all the rendering code).
+
+Alternately, Mesa acts as the core for a number of OpenGL hardware
+drivers within the DRI (Direct Rendering Infrastructure):
+
+- The ``libGL.so`` library provides the GL and GLX API functions, a GLX
+ protocol encoder, and a device driver loader.
+- The device driver modules (such as ``r200_dri.so``) contain a
+ built-in copy of the core Mesa code.
+- The X server loads the GLX module. The GLX module decodes incoming
+ GLX protocol and dispatches the commands to a rendering module. For
+ the DRI, this module is basically a software Mesa renderer.
+
+1.5 How do I upgrade my DRI installation to use a new Mesa release?
+-------------------------------------------------------------------
+
+This wasn't easy in the past. Now, the DRI drivers are included in the
+Mesa tree and can be compiled separately from the X server. Just follow
+the Mesa `compilation instructions <install.html>`__.
+
+1.6 Are there other open-source implementations of OpenGL?
+----------------------------------------------------------
+
+Yes, SGI's `OpenGL Sample Implementation
+(SI) <http://web.archive.org/web/20171010115110_/http://oss.sgi.com/projects/ogl-sample/index.html>`__
+is available. The SI was written during the time that OpenGL was
+originally designed. Unfortunately, development of the SI has stagnated.
+Mesa is much more up to date with modern features and extensions.
+
+`Vincent <https://sourceforge.net/projects/ogl-es/>`__ is an open-source
+implementation of OpenGL ES for mobile devices.
+
+`miniGL <http://web.archive.org/web/20130830162848/http://www.dsbox.com/minigl.html>`__
+is a subset of OpenGL for PalmOS devices. The website is gone, but the
+source code can still be found on
+`sourceforge.net <https://sourceforge.net/projects/minigl/>`__.
+
+`TinyGL <http://bellard.org/TinyGL/>`__ is a subset of OpenGL.
+
+`SoftGL <https://sourceforge.net/projects/softgl/>`__ is an OpenGL
+subset for mobile devices.
+
+`Chromium <http://chromium.sourceforge.net/>`__ isn't a conventional
+OpenGL implementation (it's layered upon OpenGL), but it does export the
+OpenGL API. It allows tiled rendering, sort-last rendering, etc.
+
+`ClosedGL <http://www.ticalc.org/archives/files/fileinfo/361/36173.html>`__
+is an OpenGL subset library for TI graphing calculators.
+
+There may be other open OpenGL implementations, but Mesa is the most
+popular and feature-complete.
+
+.. _part2:
+
+2. Compilation and Installation Problems
+----------------------------------------
+
+2.1 What's the easiest way to install Mesa?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you're using a Linux-based system, your distro CD most likely already
+has Mesa packages (like RPM or DEB) which you can easily install.
+
+2.2 I get undefined symbols such as bgnpolygon, v3f, etc...
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You're application is written in IRIS GL, not OpenGL. IRIS GL was the
+predecessor to OpenGL and is a different thing (almost) entirely. Mesa's
+not the solution.
+
+2.3 Where is the GLUT library?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+GLUT (OpenGL Utility Toolkit) is no longer in the separate
+``MesaGLUT-x.y.z.tar.gz`` file. If you don't already have GLUT
+installed, you should grab
+`freeglut <http://freeglut.sourceforge.net/>`__.
+
+2.4 Where is the GLw library?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+GLw (OpenGL widget library) is now available from a separate `git
+repository <https://gitlab.freedesktop.org/mesa/glw>`__. Unless you're
+using very old Xt/Motif applications with OpenGL, you shouldn't need it.
+
+2.5 What's the proper place for the libraries and headers?
+----------------------------------------------------------
+
+On Linux-based systems you'll want to follow the `Linux
+ABI <https://www.khronos.org/registry/OpenGL/ABI/>`__ standard.
+Basically you'll want the following:
+
+``/usr/include/GL/gl.h``
+ the main OpenGL header
+``/usr/include/GL/glu.h``
+ the OpenGL GLU (utility) header
+``/usr/include/GL/glx.h``
+ the OpenGL GLX header
+``/usr/include/GL/glext.h``
+ the OpenGL extensions header
+``/usr/include/GL/glxext.h``
+ the OpenGL GLX extensions header
+``/usr/include/GL/osmesa.h``
+ the Mesa off-screen rendering header
+``/usr/lib/libGL.so``
+ a symlink to ``libGL.so.1``
+``/usr/lib/libGL.so.1``
+ a symlink to ``libGL.so.1.xyz``
+``/usr/lib/libGL.so.xyz``
+ the actual OpenGL/Mesa library. xyz denotes the Mesa version number.
+
+When configuring Mesa, there are three meson options that affect the
+install location that you should take care with: ``--prefix``,
+``--libdir``, and ``-D dri-drivers-path``. To install Mesa into the
+system location where it will be available for all programs to use, set
+``--prefix=/usr``. Set ``--libdir`` to where your Linux distribution
+installs system libraries, usually either ``/usr/lib`` or
+``/usr/lib64``. Set ``-D dri-drivers-path`` to the directory where your
+Linux distribution installs DRI drivers. To find your system's DRI
+driver directory, try executing ``find /usr -type d -name dri``. For
+example, if the ``find`` command listed ``/usr/lib64/dri``, then set
+``-D dri-drivers-path=/usr/lib64/dri``.
+
+After determining the correct values for the install location, configure
+Mesa with
+``meson configure --prefix=/usr --libdir=xxx -D dri-drivers-path=xxx``
+and then install with ``sudo ninja install``.
+
+.. _part3:
+
+3. Runtime / Rendering Problems
+-------------------------------
+
+3.1 Rendering is slow / why isn't my graphics hardware being used?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If Mesa can't use its hardware accelerated drivers it falls back on one
+of its software renderers. (eg. classic swrast, softpipe or llvmpipe)
+
+You can run the ``glxinfo`` program to learn about your OpenGL library.
+Look for the ``OpenGL vendor`` and ``OpenGL renderer`` values. That will
+identify who's OpenGL library with which driver you're using and what
+sort of hardware it has detected.
+
+If you're using a hardware accelerated driver you want
+``direct rendering: Yes``.
+
+If your DRI-based driver isn't working, go to the `DRI
+website <https://dri.freedesktop.org/>`__ for trouble-shooting
+information.
+
+3.2 I'm seeing errors in depth (Z) buffering. Why?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Make sure the ratio of the far to near clipping planes isn't too great.
+Look
+`here <https://www.opengl.org/archives/resources/faq/technical/depthbuffer.htm#0040>`__
+for details.
+
+Mesa uses a 16-bit depth buffer by default which is smaller and faster
+to clear than a 32-bit buffer but not as accurate. If you need a deeper
+you can modify the parameters to ``glXChooseVisual`` in your code.
+
+3.3 Why Isn't depth buffering working at all?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Be sure you're requesting a depth buffered-visual. If you set the
+``MESA_DEBUG`` environment variable it will warn you about trying to
+enable depth testing when you don't have a depth buffer.
+
+Specifically, make sure ``glutInitDisplayMode`` is being called with
+``GLUT_DEPTH`` or ``glXChooseVisual`` is being called with a non-zero
+value for ``GLX_DEPTH_SIZE``.
+
+This discussion applies to stencil buffers, accumulation buffers and
+alpha channels too.
+
+3.4 Why does ``glGetString()`` always return ``NULL``?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Be sure you have an active/current OpenGL rendering context before
+calling ``glGetString``.
+
+3.5 ``GL_POINTS`` and ``GL_LINES`` don't touch the right pixels
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you're trying to draw a filled region by using ``GL_POINTS`` or
+``GL_LINES`` and seeing holes or gaps it's because of a float-to-int
+rounding problem. But this is not a bug. See Appendix H of the OpenGL
+Programming Guide - "OpenGL Correctness Tips". Basically, applying a
+translation of (0.375, 0.375, 0.0) to your coordinates will fix the
+problem.
+
+.. _part4:
+
+4. Developer Questions
+----------------------
+
+4.1 How can I contribute?
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+First, join the `mesa-dev mailing list <lists.html>`__. That's where
+Mesa development is discussed.
+
+The `OpenGL Specification <https://www.opengl.org/documentation>`__ is
+the bible for OpenGL implementation work. You should read it.
+
+Most of the Mesa development work involves implementing new OpenGL
+extensions, writing hardware drivers (for the DRI), and code
+optimization.
+
+4.2 How do I write a new device driver?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Unfortunately, writing a device driver isn't easy. It requires detailed
+understanding of OpenGL, the Mesa code, and your target
+hardware/operating system. 3D graphics are not simple.
+
+The best way to get started is to use an existing driver as your
+starting point. For a classic hardware driver, the i965 driver is a good
+example. For a Gallium3D hardware driver, the r300g, r600g and the i915g
+are good examples.
+
+The DRI website has more information about writing hardware drivers. The
+process isn't well document because the Mesa driver interface changes
+over time, and we seldom have spare time for writing documentation. That
+being said, many people have managed to figure out the process.
+
+Joining the appropriate mailing lists and asking questions (and
+searching the archives) is a good way to get information.
+
+4.3 Why isn't ``GL_EXT_texture_compression_s3tc`` implemented in Mesa?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Oh but it is! Prior to 2nd October 2017, the Mesa project did not
+include s3tc support due to intellectual property (IP) and/or patent
+issues around the s3tc algorithm.
+
+As of Mesa 17.3.0, Mesa now officially supports s3tc, as the patent has
+expired.
+
+In versions prior to this, a 3rd party `plug-in
+library <https://dri.freedesktop.org/wiki/S3TC>`__ was required.