[Mesa-dev] [PATCH] radv: introduce perf test env var and allow to enable chaining

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Thu Jun 8 20:25:43 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Thu, Jun 8, 2017 at 9:04 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> We have some features that seem to slow things down or cause other
> possible undesireable side effects, but it would be nice to test
> games etc with them easily.
>
> I forsee multisample DCC and maybe some shader opt changes using this.
>
> For now use it for batch chaining.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/vulkan/radv_debug.h                              |  3 +++
>  src/amd/vulkan/radv_device.c                             | 11 ++++++++++-
>  src/amd/vulkan/radv_private.h                            |  1 +
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c            |  2 +-
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c        |  3 ++-
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h        |  1 +
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h |  3 ++-
>  7 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
> index 4d1398e..c986c7b 100644
> --- a/src/amd/vulkan/radv_debug.h
> +++ b/src/amd/vulkan/radv_debug.h
> @@ -37,4 +37,7 @@ enum {
>         RADV_DEBUG_NO_IBS            = 0x200,
>  };
>
> +enum {
> +       RADV_PERFTEST_BATCHCHAIN     =   0x1,
> +};
>  #endif
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 3b32bf5..63135db 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -274,7 +274,8 @@ radv_physical_device_init(struct radv_physical_device *device,
>         assert(strlen(path) < ARRAY_SIZE(device->path));
>         strncpy(device->path, path, ARRAY_SIZE(device->path));
>
> -       device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags);
> +       device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags,
> +                                              instance->perftest_flags);
>         if (!device->ws) {
>                 result = VK_ERROR_INCOMPATIBLE_DRIVER;
>                 goto fail;
> @@ -371,6 +372,11 @@ static const struct debug_control radv_debug_options[] = {
>         {NULL, 0}
>  };
>
> +static const struct debug_control radv_perftest_options[] = {
> +       {"batchchain", RADV_PERFTEST_BATCHCHAIN},
> +       {NULL, 0}
> +};
> +
>  VkResult radv_CreateInstance(
>         const VkInstanceCreateInfo*                 pCreateInfo,
>         const VkAllocationCallbacks*                pAllocator,
> @@ -428,6 +434,9 @@ VkResult radv_CreateInstance(
>         instance->debug_flags = parse_debug_string(getenv("RADV_DEBUG"),
>                                                    radv_debug_options);
>
> +       instance->perftest_flags = parse_debug_string(getenv("RADV_PERFTEST"),
> +                                                  radv_perftest_options);
> +
>         *pInstance = radv_instance_to_handle(instance);
>
>         return VK_SUCCESS;
> diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
> index c21b17e..87cb0a6 100644
> --- a/src/amd/vulkan/radv_private.h
> +++ b/src/amd/vulkan/radv_private.h
> @@ -288,6 +288,7 @@ struct radv_instance {
>         struct radv_physical_device                 physicalDevices[RADV_MAX_DRM_DEVICES];
>
>         uint64_t debug_flags;
> +       uint64_t perftest_flags;
>  };
>
>  VkResult radv_init_wsi(struct radv_physical_device *physical_device);
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> index 5ea1218..7b74970 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> @@ -931,7 +931,7 @@ static int radv_amdgpu_winsys_cs_submit(struct radeon_winsys_ctx *_ctx,
>         if (!cs->ws->use_ib_bos) {
>                 ret = radv_amdgpu_winsys_cs_submit_sysmem(_ctx, queue_idx, cs_array,
>                                                            cs_count, initial_preamble_cs, continue_preamble_cs, _fence);
> -       } else if (can_patch && cs_count > AMDGPU_CS_MAX_IBS_PER_SUBMIT && false) {
> +       } else if (can_patch && cs_count > AMDGPU_CS_MAX_IBS_PER_SUBMIT && cs->ws->batchchain) {
>                 ret = radv_amdgpu_winsys_cs_submit_chained(_ctx, queue_idx, cs_array,
>                                                             cs_count, initial_preamble_cs, continue_preamble_cs, _fence);
>         } else {
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
> index bce8dd2..c7688cf 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
> @@ -82,7 +82,7 @@ static void radv_amdgpu_winsys_destroy(struct radeon_winsys *rws)
>  }
>
>  struct radeon_winsys *
> -radv_amdgpu_winsys_create(int fd, uint32_t debug_flags)
> +radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
>  {
>         uint32_t drm_major, drm_minor, r;
>         amdgpu_device_handle dev;
> @@ -106,6 +106,7 @@ radv_amdgpu_winsys_create(int fd, uint32_t debug_flags)
>         if (debug_flags & RADV_DEBUG_NO_IBS)
>                 ws->use_ib_bos = false;
>
> +       ws->batchchain = !!(perftest_flags & RADV_PERFTEST_BATCHCHAIN);
>         LIST_INITHEAD(&ws->global_bo_list);
>         pthread_mutex_init(&ws->global_bo_list_lock, NULL);
>         ws->base.query_info = radv_amdgpu_winsys_query_info;
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
> index 59e2730..426cf69 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
> @@ -43,6 +43,7 @@ struct radv_amdgpu_winsys {
>         ADDR_HANDLE addrlib;
>
>         bool debug_all_bos;
> +       bool batchchain;
>         pthread_mutex_t global_bo_list_lock;
>         struct list_head global_bo_list;
>         unsigned num_buffers;
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
> index d5d0ff5..854e216 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
> @@ -29,6 +29,7 @@
>  #ifndef RADV_AMDGPU_WINSYS_PUBLIC_H
>  #define RADV_AMDGPU_WINSYS_PUBLIC_H
>
> -struct radeon_winsys *radv_amdgpu_winsys_create(int fd, uint32_t debug_flags);
> +struct radeon_winsys *radv_amdgpu_winsys_create(int fd, uint64_t debug_flags,
> +                                               uint64_t perftest_flags);
>
>  #endif /* RADV_AMDGPU_WINSYS_PUBLIC_H */
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list