Mesa (master): d3d12: Add a slab bufmgr for readback buffers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 5 23:03:11 UTC 2021


Module: Mesa
Branch: master
Commit: be19eb771acd77843bf463a12d37510ca0070ce3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=be19eb771acd77843bf463a12d37510ca0070ce3

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Mon Dec 14 11:45:16 2020 -0800

d3d12: Add a slab bufmgr for readback buffers

Readback (GPU write, CPU read) should use different CPU page
properties compared to upload (write-back vs write-combined).

A future commit will start to respect these PB usage flags.

Reviewed-by: Louis-Francis Ratté-Boulianne <lfrb at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8095>

---

 src/gallium/drivers/d3d12/d3d12_screen.cpp | 5 +++++
 src/gallium/drivers/d3d12/d3d12_screen.h   | 1 +
 2 files changed, 6 insertions(+)

diff --git a/src/gallium/drivers/d3d12/d3d12_screen.cpp b/src/gallium/drivers/d3d12/d3d12_screen.cpp
index b3bd1f40be0..0cb388277e2 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_screen.cpp
@@ -603,6 +603,7 @@ d3d12_destroy_screen(struct pipe_screen *pscreen)
 {
    struct d3d12_screen *screen = d3d12_screen(pscreen);
    slab_destroy_parent(&screen->transfer_pool);
+   screen->readback_slab_bufmgr->destroy(screen->readback_slab_bufmgr);
    screen->slab_bufmgr->destroy(screen->slab_bufmgr);
    screen->cache_bufmgr->destroy(screen->cache_bufmgr);
    screen->bufmgr->destroy(screen->bufmgr);
@@ -869,6 +870,10 @@ d3d12_init_screen(struct d3d12_screen *screen, struct sw_winsys *winsys, IUnknow
    screen->slab_bufmgr = pb_slab_range_manager_create(screen->cache_bufmgr, 16, 512,
                                                       D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT,
                                                       &desc);
+   desc.usage = (pb_usage_flags)(PB_USAGE_CPU_READ_WRITE | PB_USAGE_GPU_WRITE);
+   screen->readback_slab_bufmgr = pb_slab_range_manager_create(screen->cache_bufmgr, 16, 512,
+                                                               D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT,
+                                                               &desc);
 
    screen->have_load_at_vertex = can_attribute_at_vertex(screen);
    return true;
diff --git a/src/gallium/drivers/d3d12/d3d12_screen.h b/src/gallium/drivers/d3d12/d3d12_screen.h
index 75555211b99..347a6c5ce5d 100644
--- a/src/gallium/drivers/d3d12/d3d12_screen.h
+++ b/src/gallium/drivers/d3d12/d3d12_screen.h
@@ -48,6 +48,7 @@ struct d3d12_screen {
    struct pb_manager *bufmgr;
    struct pb_manager *cache_bufmgr;
    struct pb_manager *slab_bufmgr;
+   struct pb_manager *readback_slab_bufmgr;
 
    /* capabilities */
    D3D_FEATURE_LEVEL max_feature_level;



More information about the mesa-commit mailing list