Commit 9919a2d3 authored by Jason Ekstrand's avatar Jason Ekstrand Committed by Nanley Chery

anv/image: Memset hiz surfaces to 0 when binding memory

Nanley Chery (amend):
 - Change memset value from 0xff to 0 (a defined value for HiZ).
Signed-off-by: Nanley Chery's avatarNanley Chery <nanley.g.chery@intel.com>
Reviewed-by: chadversary's avatarChad Versace <chadversary@chromium.org>
Reviewed-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
parent b4bbabf2
......@@ -317,11 +317,12 @@ anv_DestroyImage(VkDevice _device, VkImage _image,
}
VkResult anv_BindImageMemory(
VkDevice device,
VkDevice _device,
VkImage _image,
VkDeviceMemory _memory,
VkDeviceSize memoryOffset)
{
ANV_FROM_HANDLE(anv_device, device, _device);
ANV_FROM_HANDLE(anv_device_memory, mem, _memory);
ANV_FROM_HANDLE(anv_image, image, _image);
......@@ -333,6 +334,34 @@ VkResult anv_BindImageMemory(
image->offset = 0;
}
if (anv_image_has_hiz(image)) {
/* The offset and size must be a multiple of 4K or else the
* anv_gem_mmap call below will return NULL.
*/
assert((image->offset + image->hiz_surface.offset) % 4096 == 0);
assert(image->hiz_surface.isl.size % 4096 == 0);
/* HiZ surfaces need to have their memory cleared to 0 before they
* can be used. If we let it have garbage data, it can cause GPU
* hangs on some hardware.
*/
void *map = anv_gem_mmap(device, image->bo->gem_handle,
image->offset + image->hiz_surface.offset,
image->hiz_surface.isl.size,
device->info.has_llc ? 0 : I915_MMAP_WC);
/* If anv_gem_mmap returns NULL, it's likely that the kernel was
* not able to find space on the host to create a proper mapping.
*/
if (map == NULL)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
memset(map, 0, image->hiz_surface.isl.size);
anv_gem_munmap(map, image->hiz_surface.isl.size);
}
return VK_SUCCESS;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment