From fa17cdde2da08155f0197c4150fdee4006733fb5 Mon Sep 17 00:00:00 2001 From: Dominik Behr Date: Thu, 30 Nov 2017 12:23:06 -0800 Subject: [PATCH] minigbm: amdgpu: use VRAM only for cursor and scanouts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Everything else should use GTT (USWC preferably). We should also switch scanouts to GTT after we enable display VM. BUG=b:69941535,b:69647975 TEST=run WebGL Aquarium on Kahlee Change-Id: I939b159551305f74102ba47eb551e2bed2e32e06 Signed-off-by: Dominik Behr Reviewed-on: https://chromium-review.googlesource.com/801797 Reviewed-by: Stéphane Marchesin Reviewed-by: Gurchetan Singh --- amdgpu.c | 16 ++++++++++++++-- drv_priv.h | 7 +++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/amdgpu.c b/amdgpu.c index 9abb79f..cca3537 100644 --- a/amdgpu.c +++ b/amdgpu.c @@ -376,8 +376,20 @@ static int amdgpu_bo_create(struct bo *bo, uint32_t width, uint32_t height, uint gem_create.in.bo_size = bo->total_size; gem_create.in.alignment = addr_out.baseAlign; /* Set the placement. */ - gem_create.in.domains = AMDGPU_GEM_DOMAIN_VRAM; - gem_create.in.domain_flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; + + gem_create.in.domain_flags = 0; + if (use_flags & (BO_USE_LINEAR | BO_USE_SW)) + gem_create.in.domain_flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; + + if (use_flags & (BO_USE_SCANOUT | BO_USE_CURSOR)) { + /* TODO(dbehr) do not use VRAM after we enable display VM */ + gem_create.in.domains = AMDGPU_GEM_DOMAIN_VRAM; + } else { + gem_create.in.domains = AMDGPU_GEM_DOMAIN_GTT; + if (!(use_flags & BO_USE_SW_READ_OFTEN)) + gem_create.in.domain_flags |= AMDGPU_GEM_CREATE_CPU_GTT_USWC; + } + /* Allocate the buffer with the preferred heap. */ ret = drmCommandWriteRead(drv_get_fd(bo->drv), DRM_AMDGPU_GEM_CREATE, &gem_create, sizeof(gem_create)); diff --git a/drv_priv.h b/drv_priv.h index 18a289c..a397b1e 100644 --- a/drv_priv.h +++ b/drv_priv.h @@ -85,6 +85,13 @@ struct backend { BO_USE_SW_READ_OFTEN | BO_USE_SW_WRITE_OFTEN | \ BO_USE_SW_READ_RARELY | BO_USE_SW_WRITE_RARELY | BO_USE_TEXTURE +#define BO_USE_SW BO_USE_SW_READ_OFTEN | BO_USE_SW_WRITE_OFTEN | \ + BO_USE_SW_READ_RARELY | BO_USE_SW_WRITE_RARELY + +#define BO_USE_SW_OFTEN BO_USE_SW_READ_OFTEN | BO_USE_SW_WRITE_OFTEN + +#define BO_USE_SW_RARELY BO_USE_SW_READ_RARELY | BO_USE_SW_WRITE_RARELY + #define LINEAR_METADATA (struct format_metadata) { 0, 1, DRM_FORMAT_MOD_NONE } // clang-format on