mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 00:00:11 +01:00
nvk: Implement VK_EXT_zero_initialize_device_memory
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13159 Reviewed-By: Thomas H.P. Andersen <phomes@gmail.com> Reviewed-By: Mel Henning <mhenning@darkrefraction.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34968>
This commit is contained in:
parent
f542a60686
commit
d808870d49
4 changed files with 36 additions and 5 deletions
|
|
@ -660,7 +660,7 @@ Khronos extensions that are not part of any Vulkan version:
|
|||
VK_EXT_vertex_attribute_divisor DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
||||
VK_EXT_vertex_input_dynamic_state DONE (anv, lvp, nvk, panvk, radv, tu, vn)
|
||||
VK_EXT_ycbcr_image_arrays DONE (anv, hasvk, lvp, nvk, panvk/v10+, radv, vn)
|
||||
VK_EXT_zero_initialize_device_memory DONE (radv)
|
||||
VK_EXT_zero_initialize_device_memory DONE (nvk, radv)
|
||||
VK_ANDROID_external_memory_android_hardware_buffer DONE (anv, radv, tu, vn)
|
||||
VK_ANDROID_native_buffer DONE (anv, radv, tu, v3dv, vn)
|
||||
VK_GOOGLE_decorate_string DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, vn)
|
||||
|
|
|
|||
|
|
@ -21,4 +21,4 @@ VK_EXT_shader_replicated_composites on panvk
|
|||
VK_EXT_depth_bias_control on panvk
|
||||
VK_KHR_shader_bfloat16 on anv/gfx125+ and radv/gfx12+
|
||||
VK_KHR_robustness2 on RADV
|
||||
VK_EXT_zero_initialize_device_memory on RADV
|
||||
VK_EXT_zero_initialize_device_memory on RADV and NVK
|
||||
|
|
|
|||
|
|
@ -102,6 +102,12 @@ nvk_GetMemoryFdPropertiesKHR(VkDevice device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
enum nvk_memory_init {
|
||||
NVK_MEMORY_INIT_NONE,
|
||||
NVK_MEMORY_INIT_ZERO,
|
||||
NVK_MEMORY_INIT_TRASH,
|
||||
};
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
nvk_AllocateMemory(VkDevice device,
|
||||
const VkMemoryAllocateInfo *pAllocateInfo,
|
||||
|
|
@ -189,9 +195,30 @@ nvk_AllocateMemory(VkDevice device,
|
|||
goto fail_alloc;
|
||||
}
|
||||
|
||||
if (!is_import && (pdev->debug_flags & (NVK_DEBUG_ZERO_MEMORY |
|
||||
NVK_DEBUG_TRASH_MEMORY))) {
|
||||
bool use_zero = (pdev->debug_flags & NVK_DEBUG_ZERO_MEMORY) != 0;
|
||||
enum nvk_memory_init init;
|
||||
if (is_import) {
|
||||
/* From the Vulkan 1.4.315 spec:
|
||||
*
|
||||
* VUID-VkMemoryAllocateFlagsInfo-flags-10760
|
||||
*
|
||||
* "If the allocation is performing a memory import operation, then
|
||||
* flags must not contain VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT"
|
||||
*/
|
||||
assert(!(mem->vk.alloc_flags & VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT));
|
||||
init = NVK_MEMORY_INIT_NONE;
|
||||
} else {
|
||||
if (mem->vk.alloc_flags & VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT)
|
||||
init = NVK_MEMORY_INIT_ZERO;
|
||||
else if (pdev->debug_flags & NVK_DEBUG_ZERO_MEMORY)
|
||||
init = NVK_MEMORY_INIT_ZERO;
|
||||
else if (pdev->debug_flags & NVK_DEBUG_TRASH_MEMORY)
|
||||
init = NVK_MEMORY_INIT_TRASH;
|
||||
else
|
||||
init = NVK_MEMORY_INIT_NONE;
|
||||
}
|
||||
|
||||
if (init != NVK_MEMORY_INIT_NONE) {
|
||||
bool use_zero = init == NVK_MEMORY_INIT_ZERO;
|
||||
if (type->propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
|
||||
void *map;
|
||||
result = nvkmd_mem_map(mem->mem, &dev->vk.base,
|
||||
|
|
|
|||
|
|
@ -288,6 +288,7 @@ nvk_get_device_extensions(const struct nvk_instance *instance,
|
|||
.EXT_vertex_input_dynamic_state = true,
|
||||
.EXT_ycbcr_2plane_444_formats = true,
|
||||
.EXT_ycbcr_image_arrays = true,
|
||||
.EXT_zero_initialize_device_memory = true,
|
||||
#if DETECT_OS_ANDROID
|
||||
.ANDROID_native_buffer = vk_android_get_ugralloc() != NULL,
|
||||
#endif
|
||||
|
|
@ -707,6 +708,9 @@ nvk_get_device_features(const struct nv_device_info *info,
|
|||
/* VK_EXT_ycbcr_image_arrays */
|
||||
.ycbcrImageArrays = true,
|
||||
|
||||
/* VK_EXT_zero_initialize_device_memory */
|
||||
.zeroInitializeDeviceMemory = true,
|
||||
|
||||
/* VK_MESA_image_alignment_control */
|
||||
.imageAlignmentControl = true,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue