winsys/amdgpu: use VRAM for command buffers if all VRAM is visible
authorMarek Olšák <marek.olsak@amd.com>
Tue, 8 Dec 2020 19:43:07 +0000 (14:43 -0500)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 9 Dec 2020 15:34:02 +0000 (10:34 -0500)
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7951>

src/gallium/winsys/amdgpu/drm/amdgpu_cs.c

index 632138f..497cb39 100644 (file)
@@ -705,14 +705,23 @@ static bool amdgpu_ib_new_buffer(struct amdgpu_winsys *ws,
    buffer_size = MIN2(buffer_size, max_size);
    buffer_size = MAX2(buffer_size, min_size); /* min_size is more important */
 
+   enum radeon_bo_domain domain;
+   unsigned flags = RADEON_FLAG_NO_INTERPROCESS_SHARING;
+
+   if (cs->ring_type == RING_GFX ||
+       cs->ring_type == RING_COMPUTE ||
+       cs->ring_type == RING_DMA) {
+      domain = ws->info.all_vram_visible ? RADEON_DOMAIN_VRAM : RADEON_DOMAIN_GTT;
+      flags |= RADEON_FLAG_32BIT | RADEON_FLAG_GTT_WC;
+   } else {
+      /* UVD/VCE */
+      /* TODO: validate that UVD/VCE don't read from IBs and enable WC or even VRAM. */
+      domain = RADEON_DOMAIN_GTT;
+   }
+
    pb = amdgpu_bo_create(ws, buffer_size,
                          ws->info.gart_page_size,
-                         RADEON_DOMAIN_GTT,
-                         RADEON_FLAG_NO_INTERPROCESS_SHARING |
-                         (cs->ring_type == RING_GFX ||
-                          cs->ring_type == RING_COMPUTE ||
-                          cs->ring_type == RING_DMA ?
-                          RADEON_FLAG_32BIT | RADEON_FLAG_GTT_WC : 0));
+                         domain, flags);
    if (!pb)
       return false;