Find a file
Axel Davy 90a7573a65 st/nine: Add RAM memory manager for textures
On 32 bits, virtual memory is sometimes too short for apps.
Textures can hold virtual memory 3 ways:
1) MANAGED textures have a RAM copy of any texture
2) SYSTEMMEM is used to have RAM copy of DEFAULT textures
   (to upload them for example)
3) Textures being mapped.

Nine cannot do much for 3). It's up to driver to really unmap textures
when possible on 32 bits to reduce virtual memory usage.

It's not clear whether on Windows anything special is done for
1) and 2). However there is clear indication some efforts have
been done on 3) to really unmap when it makes sense.

My understanding is that other implementations reduce the usage
of 1) by deleting the RAM copy once the texture is uploaded
(Dxvk's behaviour is controlled by evictManagedOnUnlock).

The obvious issue with that approach is whether the texture is
read by the application after some time. In that case,
we have to recreate the RAM backing from the GPU buffer.

And apps DO that. Indeed I found that for example Mass Effect 2
with High Texture mods (one of the crash case fixed by this patch serie),
When the character gets close to an object, a high res texture and replaces
the low res one. The high res one simply has more levels, and the game seems
to optimize reading the high res texture by retrieving the small-resolution
levels from the original low res texture.
In other words during gameplay, the game will randomly read MANAGED textures.
This is expected to be fast as the data is supposed to be in RAM...

Instead of taking that RAM copy eviction approach, this patchset
proposes a different approach: storing in memfd and release the
virtual memory until needed.

Basically instead of using malloc(), we create a memfd file
and map it. When the data doesn't seem to be accessed anymore,
we can unmap the memfd file.
If the data is needed, the memfd file is mapped again.
This trick enables to allocate more than 4GB on 32 bits apps.

The advantage of this approach over the RAM eviction one,
is that the load is much faster and doesn't block the GPU.

Of course we have problems if there's not enough memory to map the
memfd file. But the problem is the same for the RAM eviction approach.

Naturally on 64 bits, we do not use memfd.

Signed-off-by: Axel Davy <davyaxel0@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9377>
2021-03-07 13:13:53 +00:00
.appveyor appveyor: Use Python3. 2020-08-06 09:46:48 +00:00
.gitlab/issue_templates gitlab: add RADV bug report template 2020-12-18 08:03:04 +00:00
.gitlab-ci ci: Bump deqp to vk-gl-cts 1.2.5.2 2021-03-04 11:09:35 +00:00
bin bin/post_version: convert the csv.reader into a concrete list 2021-01-21 23:22:36 +00:00
build-support configure: commit test files 2017-10-16 16:32:43 -07:00
docs zink: Enable GL_EXT_depth_bounds_test 2021-03-03 16:17:11 +00:00
doxygen doxygen: Plumb through gallium/ to automated documentation 2016-05-30 17:53:45 +01:00
include include/drm-uapi: bump AMDGPU headers 2021-02-26 18:05:36 +01:00
scons meson/gallium: Add an option to not use LLVM for gallium draw module 2021-02-25 17:48:16 +00:00
src st/nine: Add RAM memory manager for textures 2021-03-07 13:13:53 +00:00
subprojects d3d12: Use DirectX-Headers wrap for d3d12.h 2020-12-16 16:25:54 +00:00
.dir-locals.el dir-locals.el: Adds White Space support 2016-11-14 19:17:49 +02:00
.editorconfig docs: fixup indentation 2020-01-18 11:39:32 +01:00
.gitignore intel/tools: Add unit tests for assembler 2019-05-07 14:33:48 -07:00
.gitlab-ci.yml ci: Bump deqp to vk-gl-cts 1.2.5.2 2021-03-04 11:09:35 +00:00
.mailmap .mailmap: resolve duplicates for Yogesh Mohan Marimuthu 2021-03-05 16:35:07 +00:00
.travis.yml travis: autodetect python version instead of hard-coding it 2019-12-21 20:23:08 +00:00
Android.common.mk tree-wide: fix deprecated GitLab URLs 2020-05-23 15:33:50 +00:00
Android.mk meson/gallium: Add an option to not use LLVM for gallium draw module 2021-02-25 17:48:16 +00:00
appveyor.yml appveyor: Use Python3. 2020-08-06 09:46:48 +00:00
CleanSpec.mk CleanSpec.mk: Remove HOST_OUT_release 2018-08-02 15:42:40 -06:00
common.py scons: Print a deprecation warning about using scons on not windows 2019-10-24 18:33:50 +00:00
meson.build meson/gallium: Add an option to not use LLVM for gallium draw module 2021-02-25 17:48:16 +00:00
meson_options.txt meson/gallium: Add an option to not use LLVM for gallium draw module 2021-02-25 17:48:16 +00:00
README.rst README: update references to internal docs 2020-06-13 10:42:01 +00:00
REVIEWERS REVIEWERS: add VMware reviewers 2019-10-18 16:42:40 +00:00
SConstruct tree-wide: fix deprecated GitLab URLs 2020-05-23 15:33:50 +00:00
VERSION VERSION: bump for 21.1.0 cycle 2021-01-13 09:46:19 -08:00

`Mesa <https://mesa3d.org>`_ - The 3D Graphics Library
======================================================


Source
------

This repository lives at https://gitlab.freedesktop.org/mesa/mesa.
Other repositories are likely forks, and code found there is not supported.


Build & install
---------------

You can find more information in our documentation (`docs/install.rst
<https://mesa3d.org/install.html>`_), but the recommended way is to use
Meson (`docs/meson.rst <https://mesa3d.org/meson.html>`_):

.. code-block:: sh

  $ mkdir build
  $ cd build
  $ meson ..
  $ sudo ninja install


Support
-------

Many Mesa devs hang on IRC; if you're not sure which channel is
appropriate, you should ask your question on `Freenode's #dri-devel
<irc://chat.freenode.net#dri-devel>`_, someone will redirect you if
necessary.
Remember that not everyone is in the same timezone as you, so it might
take a while before someone qualified sees your question.
To figure out who you're talking to, or which nick to ping for your
question, check out `Who's Who on IRC
<https://dri.freedesktop.org/wiki/WhosWho/>`_.

The next best option is to ask your question in an email to the
mailing lists: `mesa-dev\@lists.freedesktop.org
<https://lists.freedesktop.org/mailman/listinfo/mesa-dev>`_


Bug reports
-----------

If you think something isn't working properly, please file a bug report
(`docs/bugs.rst <https://mesa3d.org/bugs.html>`_).


Contributing
------------

Contributions are welcome, and step-by-step instructions can be found in our
documentation (`docs/submittingpatches.rst
<https://mesa3d.org/submittingpatches.html>`_).

Note that Mesa uses gitlab for patches submission, review and discussions.