d3d12: Add a slab bufmgr for readback buffers
authorJesse Natalie <jenatali@microsoft.com>
Mon, 14 Dec 2020 19:45:16 +0000 (11:45 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 5 Jan 2021 22:25:41 +0000 (22:25 +0000)
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@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8095>

src/gallium/drivers/d3d12/d3d12_screen.cpp
src/gallium/drivers/d3d12/d3d12_screen.h

index b3bd1f4..0cb3882 100644 (file)
@@ -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;
index 7555521..347a6c5 100644 (file)
@@ -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;