[Mesa-dev] [PATCH 0/7] Multi Context fixes for Nouveau
Karol Herbst
kherbst at redhat.com
Wed Dec 5 21:04:50 UTC 2018
Currently only fully implemented for nvc0.
General approach is to make a more stricter use of the *_context object and
give each contexts its own pushbuffer, nouveau_client and fence list. This
allows us to do some screen operations with the context pushbuf as well (like
resizing the text area or bind a cb).
I am still not quite sure about all the things I changed, but it seems to work
quite nicely and doesn't change anything for single context applications. And
still only uses one hardware context as we did before.
Fixes related crashes in:
* chromium (general experience is much better, especially when doing webgl stuff)
* qtwebengine (distros shipped patches with some env var to force enable with nouveau)
* dolphin (async ubershaders, needs code change)
* Warsow (needs some flag to force enable it)
Things I would like others to test:
* video players (using OpenGL _and_ VDPAU)
* other applications which randomly crashes related to this
Karol Herbst (7):
nouveau: include all compile dependencies for nouveau_context.h
nouveau: extract nouveau_context functions into a new file
nv50,nvc0: simplify screen.fence
nouveau: access client and pushbuf from context directly
WIP: buffered shader printing
nouveau: make fence API independent from nouveau_screen
WIP: per context fences/pushbuf
src/gallium/drivers/nouveau/Makefile.sources | 1 +
src/gallium/drivers/nouveau/codegen/nv50_ir.h | 1 +
.../drivers/nouveau/codegen/nv50_ir_print.cpp | 67 ++++++++-----
.../drivers/nouveau/codegen/nv50_ir_util.h | 1 +
src/gallium/drivers/nouveau/meson.build | 1 +
src/gallium/drivers/nouveau/nouveau_buffer.c | 47 ++++-----
src/gallium/drivers/nouveau/nouveau_buffer.h | 2 +-
src/gallium/drivers/nouveau/nouveau_context.c | 50 ++++++++++
src/gallium/drivers/nouveau/nouveau_context.h | 22 ++---
src/gallium/drivers/nouveau/nouveau_fence.c | 96 +++++++++----------
src/gallium/drivers/nouveau/nouveau_fence.h | 41 ++++++--
src/gallium/drivers/nouveau/nouveau_screen.c | 26 ++---
src/gallium/drivers/nouveau/nouveau_screen.h | 12 +--
.../drivers/nouveau/nv30/nv30_context.c | 8 +-
src/gallium/drivers/nouveau/nv30/nv30_draw.c | 4 +-
.../drivers/nouveau/nv30/nv30_miptree.c | 2 +-
.../drivers/nouveau/nv30/nv30_screen.c | 17 ++--
src/gallium/drivers/nouveau/nv30/nv30_vbo.c | 2 +-
.../drivers/nouveau/nv50/nv50_compute.c | 6 +-
.../drivers/nouveau/nv50/nv50_context.c | 12 +--
.../drivers/nouveau/nv50/nv50_miptree.c | 2 +-
.../drivers/nouveau/nv50/nv50_query_hw.c | 6 +-
.../drivers/nouveau/nv50/nv50_screen.c | 24 ++---
.../drivers/nouveau/nv50/nv50_screen.h | 1 -
.../drivers/nouveau/nv50/nv50_transfer.c | 4 +-
src/gallium/drivers/nouveau/nv50/nv50_vbo.c | 4 +-
.../drivers/nouveau/nvc0/nvc0_context.c | 80 +++++++++++-----
.../drivers/nouveau/nvc0/nvc0_context.h | 4 +
.../drivers/nouveau/nvc0/nvc0_program.c | 2 +-
.../drivers/nouveau/nvc0/nvc0_query_hw.c | 18 ++--
.../drivers/nouveau/nvc0/nvc0_screen.c | 43 ++++-----
.../drivers/nouveau/nvc0/nvc0_screen.h | 12 ++-
.../nouveau/nvc0/nvc0_state_validate.c | 8 +-
.../drivers/nouveau/nvc0/nvc0_transfer.c | 8 +-
src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c | 6 +-
35 files changed, 377 insertions(+), 263 deletions(-)
create mode 100644 src/gallium/drivers/nouveau/nouveau_context.c
--
2.19.2
More information about the mesa-dev
mailing list