[Mesa-dev] [PATCH] radv: Change memory type order for GPUs without dedicated VRAM
Samuel Pitoiset
samuel.pitoiset at gmail.com
Mon Jun 3 07:51:21 UTC 2019
On 6/3/19 9:46 AM, Alex Smith wrote:
> On Sun, 2 Jun 2019 at 11:59, Bas Nieuwenhuizen
> <bas at basnieuwenhuizen.nl <mailto:bas at basnieuwenhuizen.nl>> wrote:
>
> On Sun, Jun 2, 2019 at 12:32 PM Alex Smith
> <asmith at feralinteractive.com <mailto:asmith at feralinteractive.com>>
> wrote:
> >
> > Put the uncached GTT type at a higher index than the visible
> VRAM type,
> > rather than having GTT first.
> >
> > When we don't have dedicated VRAM, we don't have a non-visible VRAM
> > type, and the property flags for GTT and visible VRAM are identical.
> > According to the spec, for types with identical flags, we should
> give
> > the one with better performance a lower index.
> >
> > Previously, apps which follow the spec guidance for choosing a
> memory
> > type would have picked the GTT type in preference to visible
> VRAM (all
> > Feral games will do this), and end up with lower performance.
> >
> > On a Ryzen 5 2500U laptop (Raven Ridge), this improves average
> FPS in
> > the Rise of the Tomb Raider benchmark by up to ~30%. Tested a
> couple of
> > other (Feral) games and saw similar improvement on those as well.
> >
> > Signed-off-by: Alex Smith <asmith at feralinteractive.com
> <mailto:asmith at feralinteractive.com>>
> > ---
> > I noticed that the memory types advertised on my Raven laptop
> looked a
> > bit odd so played around with it and found this. I'm not sure if
> it is
> > actually expected that the performance difference between
> visible VRAM
> > and GTT is so large, seeing as it's not dedicated VRAM, but the
> results
> > are clear (and consistent, tested multiple times).
>
> AFAIU it is still using different memory paths, with GTT using
> different pagetables (those from the CPU I believe on APUs) and
> possible CPU snooping.
>
> Main risk here seems applications pushing out driver internal stuff
> (descriptor sets etc.) from "VRAM", posssibly hitting perf elsewhere.
>
>
> Driver internal allocations have higher BO priorities than all app
> allocations, wouldn't that help avoid that? I'm not sure how much
> effect the priorities actually have...
Priorities shouldn't matter much.
>
> That said,
>
> Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl
> <mailto:bas at basnieuwenhuizen.nl>>
>
> > ---
> > src/amd/vulkan/radv_device.c | 18 +++++++++++++++---
> > 1 file changed, 15 insertions(+), 3 deletions(-)
> >
> > diff --git a/src/amd/vulkan/radv_device.c
> b/src/amd/vulkan/radv_device.c
> > index 3cf050ed220..d36ee226ebd 100644
> > --- a/src/amd/vulkan/radv_device.c
> > +++ b/src/amd/vulkan/radv_device.c
> > @@ -171,12 +171,11 @@ radv_physical_device_init_mem_types(struct
> radv_physical_device *device)
> > .heapIndex = vram_index,
> > };
> > }
> > - if (gart_index >= 0) {
> > + if (gart_index >= 0 &&
> device->rad_info.has_dedicated_vram) {
> > device->mem_type_indices[type_count] =
> RADV_MEM_TYPE_GTT_WRITE_COMBINE;
> > device->memory_properties.memoryTypes[type_count++] =
> (VkMemoryType) {
> > .propertyFlags =
> VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> > - VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
> > - (device->rad_info.has_dedicated_vram ? 0 :
> VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT),
> > + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
> > .heapIndex = gart_index,
> > };
> > }
> > @@ -189,6 +188,19 @@ radv_physical_device_init_mem_types(struct
> radv_physical_device *device)
> > .heapIndex = visible_vram_index,
> > };
> > }
> > + if (gart_index >= 0 &&
> !device->rad_info.has_dedicated_vram) {
> > + /* Put GTT after visible VRAM for GPUs without
> dedicated VRAM
> > + * as they have identical property flags, and
> according to the
> > + * spec, for types with identical flags, the one
> with greater
> > + * performance must be given a lower index. */
> > + device->mem_type_indices[type_count] =
> RADV_MEM_TYPE_GTT_WRITE_COMBINE;
> > + device->memory_properties.memoryTypes[type_count++] =
> (VkMemoryType) {
> > + .propertyFlags =
> VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT |
> > + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
> > + VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
> > + .heapIndex = gart_index,
> > + };
> > + }
> > if (gart_index >= 0) {
> > device->mem_type_indices[type_count] =
> RADV_MEM_TYPE_GTT_CACHED;
> > device->memory_properties.memoryTypes[type_count++] =
> (VkMemoryType) {
> > --
> > 2.21.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> <mailto:mesa-dev at lists.freedesktop.org>
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190603/129f3570/attachment-0001.html>
More information about the mesa-dev
mailing list