radeonsi: add a debug flag to zero vram allocations
authorGrazvydas Ignotas <notasas@gmail.com>
Wed, 20 Jun 2018 19:17:39 +0000 (22:17 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Thu, 21 Jun 2018 09:18:50 +0000 (12:18 +0300)
This allows to avoid having to see garbage in Dying Light loading screen
at least, which probably expects Windows/NV behavior of all allocations
being zeroed by default.

Analogous to radv flag with the same name.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_pipe.c
src/gallium/drivers/radeonsi/si_pipe.h
src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h

index 1e7c9916a8f39600577b74b6f4bf599ed71c0171..8f16b2bf8e69af28d7aaff7e9f886a07479df494 100644 (file)
@@ -82,6 +82,7 @@ static const struct debug_named_value debug_options[] = {
        { "nowc", DBG(NO_WC), "Disable GTT write combining" },
        { "check_vm", DBG(CHECK_VM), "Check VM faults and dump debug info." },
        { "reserve_vmid", DBG(RESERVE_VMID), "Force VMID reservation per context." },
+       { "zerovram", DBG(ZERO_VRAM), "Clear VRAM allocations." },
 
        /* 3D engine options: */
        { "switch_on_eop", DBG(SWITCH_ON_EOP), "Program WD/IA to switch on end-of-packet." },
index 61109477d44ab985ecd6e673afcbacfa43a0894c..d73ee600443cc09b27398607c11f56f78964e66e 100644 (file)
@@ -141,6 +141,7 @@ enum {
        DBG_NO_WC,
        DBG_CHECK_VM,
        DBG_RESERVE_VMID,
+       DBG_ZERO_VRAM,
 
        /* 3D engine options: */
        DBG_SWITCH_ON_EOP,
index cd75fe83488398960e0c098901d832d26b05fcdc..e3d56613dfa0cb933b519639cc07ac7db839833b 100644 (file)
@@ -428,6 +428,9 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws,
    if (flags & RADEON_FLAG_NO_INTERPROCESS_SHARING &&
        ws->info.has_local_buffers)
       request.flags |= AMDGPU_GEM_CREATE_VM_ALWAYS_VALID;
+   if (ws->zero_all_vram_allocs &&
+       (request.preferred_heap & AMDGPU_GEM_DOMAIN_VRAM))
+      request.flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED;
 
    r = amdgpu_bo_alloc(ws->dev, &request, &buf_handle);
    if (r) {
index 69202dc7e77e84dd572c9cbd31efbda42a62a500..d60b3640f6199852c51439b2460e429c40506369 100644 (file)
@@ -62,6 +62,7 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd)
    ws->check_vm = strstr(debug_get_option("R600_DEBUG", ""), "check_vm") != NULL;
    ws->debug_all_bos = debug_get_option_all_bos();
    ws->reserve_vmid = strstr(debug_get_option("R600_DEBUG", ""), "reserve_vmid") != NULL;
+   ws->zero_all_vram_allocs = strstr(debug_get_option("R600_DEBUG", ""), "zerovram") != NULL;
 
    return true;
 
index a6784e85c02d134168ed65aeab40b68c208eb3d4..8079255e4cf1cfdd6aa44d9eaaf6cba1a8a17e28 100644 (file)
@@ -79,6 +79,7 @@ struct amdgpu_winsys {
    bool check_vm;
    bool debug_all_bos;
    bool reserve_vmid;
+   bool zero_all_vram_allocs;
 
    /* List of all allocated buffers */
    simple_mtx_t global_bo_list_lock;