[Mesa-dev] [PATCH 13/16] anv: Refactor memory type setup

Nanley Chery nanleychery at gmail.com
Tue May 23 21:55:36 UTC 2017


On Thu, May 18, 2017 at 02:01:00PM -0700, Jason Ekstrand wrote:
> This makes us walk over the heaps one at a time and add the types for
> LLC and !LLC to each heap.
> ---
>  src/intel/vulkan/anv_device.c | 76 +++++++++++++++++++++++--------------------
>  1 file changed, 40 insertions(+), 36 deletions(-)
> 

This patch is
Reviewed-by: Nanley Chery <nanley.g.chery at intel.com>

> diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
> index bb02378..6ea8dfe 100644
> --- a/src/intel/vulkan/anv_device.c
> +++ b/src/intel/vulkan/anv_device.c
> @@ -112,42 +112,6 @@ anv_physical_device_init_heaps(struct anv_physical_device *device, int fd)
>     if (result != VK_SUCCESS)
>        return result;
>  
> -   if (device->info.has_llc) {
> -      /* Big core GPUs share LLC with the CPU and thus one memory type can be
> -       * both cached and coherent at the same time.
> -       */
> -      device->memory.type_count = 1;
> -      device->memory.types[0] = (struct anv_memory_type) {
> -         .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
> -         .heapIndex = 0,
> -         .valid_buffer_usage = ~0,
> -      };
> -   } else {
> -      /* The spec requires that we expose a host-visible, coherent memory
> -       * type, but Atom GPUs don't share LLC. Thus we offer two memory types
> -       * to give the application a choice between cached, but not coherent and
> -       * coherent but uncached (WC though).
> -       */
> -      device->memory.type_count = 2;
> -      device->memory.types[0] = (struct anv_memory_type) {
> -         .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
> -         .heapIndex = 0,
> -         .valid_buffer_usage = ~0,
> -      };
> -      device->memory.types[1] = (struct anv_memory_type) {
> -         .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> -                          VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
> -         .heapIndex = 0,
> -         .valid_buffer_usage = ~0,
> -      };
> -   }
> -
>     device->memory.heap_count = 1;
>     device->memory.heaps[0] = (struct anv_memory_heap) {
>        .size = heap_size,
> @@ -155,6 +119,46 @@ anv_physical_device_init_heaps(struct anv_physical_device *device, int fd)
>        .supports_48bit_addresses = device->supports_48bit_addresses,
>     };
>  
> +   uint32_t type_count = 0;
> +   for (uint32_t heap = 0; heap < device->memory.heap_count; heap++) {
> +      uint32_t valid_buffer_usage = ~0;
> +
> +      if (device->info.has_llc) {
> +         /* Big core GPUs share LLC with the CPU and thus one memory type can be
> +          * both cached and coherent at the same time.
> +          */
> +         device->memory.types[type_count++] = (struct anv_memory_type) {
> +            .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
> +            .heapIndex = heap,
> +            .valid_buffer_usage = valid_buffer_usage,
> +         };
> +      } else {
> +         /* The spec requires that we expose a host-visible, coherent memory
> +          * type, but Atom GPUs don't share LLC. Thus we offer two memory types
> +          * to give the application a choice between cached, but not coherent and
> +          * coherent but uncached (WC though).
> +          */
> +         device->memory.types[type_count++] = (struct anv_memory_type) {
> +            .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
> +            .heapIndex = heap,
> +            .valid_buffer_usage = valid_buffer_usage,
> +         };
> +         device->memory.types[type_count++] = (struct anv_memory_type) {
> +            .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> +                             VK_MEMORY_PROPERTY_HOST_CACHED_BIT,
> +            .heapIndex = heap,
> +            .valid_buffer_usage = valid_buffer_usage,
> +         };
> +      }
> +   }
> +   device->memory.type_count = type_count;
> +
>     return VK_SUCCESS;
>  }
>  
> -- 
> 2.5.0.400.gff86faf
> 
> _______________________________________________
> 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