Можно ли очистить память устройства после распаковки в Vulkan?

Могу ли я очистить диапазон памяти после unmap?

Сначала кажется неправильным, потому что функция называется vkFlushMappedMemoryRanges(), но документация подразумевает, что память готова к очистке, даже если она не отображена:

Удаление сопоставленной некогерентной памяти не приводит к неявной очистке отображенной памяти, и записи хоста, которые не были очищены, могут никогда не быть видимыми для устройства. Однако реализации должны гарантировать, что записи, которые не были сброшены, не становятся видимыми для любой другой памяти.

1 ответ

Решение

Одно из действительных правил использования vkFlushMappedMemoryRanges() это то, что все VkMappedMemoryRange структуры должны быть действительными. И правила действительности для этой структуры говорят:

memory должны быть в настоящее время сопоставлены

Так что, если вы удалили память, вы не сможете ее стереть.

Тем не менее, промывка говорит:

байты в этом диапазоне сбрасываются, если хост записал какой-либо байт в этом наборе с момента его первого сопоставления или при последней очистке.

Так что, очевидно, если вы удалите его, а затем снова отобразите его, вы можете сбросить его и все равно увидеть данные. Лично я бы на это не рассчитывал.

Другие вопросы по тегам