Можно ли очистить память устройства после распаковки в Vulkan?
Могу ли я очистить диапазон памяти после unmap?
Сначала кажется неправильным, потому что функция называется vkFlushMappedMemoryRanges()
, но документация подразумевает, что память готова к очистке, даже если она не отображена:
Удаление сопоставленной некогерентной памяти не приводит к неявной очистке отображенной памяти, и записи хоста, которые не были очищены, могут никогда не быть видимыми для устройства. Однако реализации должны гарантировать, что записи, которые не были сброшены, не становятся видимыми для любой другой памяти.
1 ответ
Одно из действительных правил использования vkFlushMappedMemoryRanges()
это то, что все VkMappedMemoryRange
структуры должны быть действительными. И правила действительности для этой структуры говорят:
memory
должны быть в настоящее время сопоставлены
Так что, если вы удалили память, вы не сможете ее стереть.
Тем не менее, промывка говорит:
байты в этом диапазоне сбрасываются, если хост записал какой-либо байт в этом наборе с момента его первого сопоставления или при последней очистке.
Так что, очевидно, если вы удалите его, а затем снова отобразите его, вы можете сбросить его и все равно увидеть данные. Лично я бы на это не рассчитывал.