Reviewed-by: Edward O'Callaghan <funfunc...@folklore1984.net> On 10/27/2016 11:49 AM, Fredrik Höglund wrote: > Advertise two device local memory heaps; one that is host visible > and one that is not. > > This makes it possible for clients to tell how much host visible > vs. non-host visible memory is available. > --- > src/amd/vulkan/radv_device.c | 15 ++++++++++----- > src/amd/vulkan/radv_radeon_winsys.h | 1 + > src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c | 10 +++++++++- > 3 files changed, 20 insertions(+), 6 deletions(-) > > diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c > index 86505f4..512d366 100644 > --- a/src/amd/vulkan/radv_device.c > +++ b/src/amd/vulkan/radv_device.c > @@ -530,27 +530,32 @@ void radv_GetPhysicalDeviceMemoryProperties( > pMemoryProperties->memoryTypes[1] = (VkMemoryType) { > .propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | > VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, > - .heapIndex = 1, > + .heapIndex = 2, > }; > pMemoryProperties->memoryTypes[2] = (VkMemoryType) { > .propertyFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | > VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | > VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, > - .heapIndex = 0, > + .heapIndex = 1, > }; > pMemoryProperties->memoryTypes[3] = (VkMemoryType) { > .propertyFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | > VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | > VK_MEMORY_PROPERTY_HOST_CACHED_BIT, > - .heapIndex = 1, > + .heapIndex = 2, > }; > > - pMemoryProperties->memoryHeapCount = 2; > + pMemoryProperties->memoryHeapCount = 3; > pMemoryProperties->memoryHeaps[0] = (VkMemoryHeap) { > - .size = physical_device->rad_info.vram_size, > + .size = physical_device->rad_info.vram_size - > + physical_device->rad_info.visible_vram_size, > .flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT, > }; > pMemoryProperties->memoryHeaps[1] = (VkMemoryHeap) { > + .size = physical_device->rad_info.visible_vram_size, > + .flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT, > + }; > + pMemoryProperties->memoryHeaps[2] = (VkMemoryHeap) { > .size = physical_device->rad_info.gart_size, > .flags = 0, > }; > diff --git a/src/amd/vulkan/radv_radeon_winsys.h > b/src/amd/vulkan/radv_radeon_winsys.h > index 6370f3d..76363a3 100644 > --- a/src/amd/vulkan/radv_radeon_winsys.h > +++ b/src/amd/vulkan/radv_radeon_winsys.h > @@ -85,6 +85,7 @@ struct radeon_info { > uint32_t gart_page_size; > uint64_t gart_size; > uint64_t vram_size; > + uint64_t visible_vram_size; > bool has_dedicated_vram; > bool has_virtual_memory; > bool gfx_ib_pad_with_type2; > diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c > b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c > index 0456100..b2e171a 100644 > --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c > +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c > @@ -116,7 +116,7 @@ static bool > do_winsys_init(struct radv_amdgpu_winsys *ws, int fd) > { > struct amdgpu_buffer_size_alignments alignment_info = {}; > - struct amdgpu_heap_info vram, gtt; > + struct amdgpu_heap_info vram, visible_vram, gtt; > struct drm_amdgpu_info_hw_ip dma = {}; > drmDevicePtr devinfo; > int r; > @@ -152,6 +152,13 @@ do_winsys_init(struct radv_amdgpu_winsys *ws, int fd) > goto fail; > } > > + r = amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_VRAM, > + AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, > &visible_vram); > + if (r) { > + fprintf(stderr, "amdgpu: amdgpu_query_heap_info(visible_vram) > failed.\n"); > + goto fail; > + } > + > r = amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_GTT, 0, >t); > if (r) { > fprintf(stderr, "amdgpu: amdgpu_query_heap_info(gtt) > failed.\n"); > @@ -270,6 +277,7 @@ do_winsys_init(struct radv_amdgpu_winsys *ws, int fd) > ws->info.name = get_chip_name(ws->info.family); > ws->info.gart_size = gtt.heap_size; > ws->info.vram_size = vram.heap_size; > + ws->info.visible_vram_size = visible_vram.heap_size; > /* convert the shader clock from KHz to MHz */ > ws->info.max_shader_clock = ws->amdinfo.max_engine_clk / 1000; > ws->info.max_se = ws->amdinfo.num_shader_engines; >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev