[Mesa-dev] [PATCH] radv: reduce CPU overhead merging bo lists.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Fri Feb 10 18:30:02 UTC 2017


Was thinking of a sort or other asymptotically more efficient merge
method, but in the meantime this is

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

On Fri, Feb 10, 2017, at 02:07, Dave Airlie wrote:
> From: Dave Airlie <airlied at redhat.com>
> 
> Just noticed we do a fair bit of unneeded searching here.
> 
> Since we know that the buffers in a CS are unique already,
> the first time we get any buffers, we can just memcpy those into
> place, and when we are searching for subsequent CSes, we only
> have to search up until where the previous unique buffers were.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> index b58f5db..9e468bd 100644
> --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
> @@ -486,9 +486,19 @@ static int radv_amdgpu_create_bo_list(struct
> radv_amdgpu_winsys *ws,
>  			else
>  				cs = (struct radv_amdgpu_cs*)cs_array[i];
>  
> +                       if (!cs->num_buffers)
> +                               continue;
> +
> +                       if (unique_bo_count == 0) {
> +                               memcpy(handles, cs->handles,
> cs->num_buffers * sizeof(amdgpu_bo_handle));
> +                               memcpy(priorities, cs->priorities,
> cs->num_buffers * sizeof(uint8_t));
> +                               unique_bo_count = cs->num_buffers;
> +                               continue;
> +                       }
> +                       int unique_bo_so_far = unique_bo_count;
>  			for (unsigned j = 0; j < cs->num_buffers; ++j) {
>  				bool found = false;
> -                               for (unsigned k = 0; k < unique_bo_count;
> ++k) {
> +                               for (unsigned k = 0; k <
> unique_bo_so_far; ++k) {
>  					if (handles[k] == cs->handles[j]) {
>  						found = true;
>  						priorities[k] = MAX2(priorities[k],
> -- 
> 2.7.4
> 
> _______________________________________________
> 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