vkInvalidateMappedMemoryRanges
To invalidate ranges of non-coherent memory from the host caches, call:
VkResult vkInvalidateMappedMemoryRanges(
VkDevice device,
uint32_t memoryRangeCount,
const VkMappedMemoryRange* pMemoryRanges);
pub fn invalidate_mapped_memory_ranges(
device: vk::Device,
memory_range_count: u32,
p_memory_ranges: *const vk::MappedMemoryRange,
) -> vk::Result;
deviceis the logical device that owns the memory ranges.memoryRangeCountis the length of thepMemoryRangesarray.pMemoryRangesis a pointer to an array of VkMappedMemoryRange structures describing the memory ranges to invalidate.
vkInvalidateMappedMemoryRanges guarantees that device writes to the
memory ranges described by pMemoryRanges, which have been made
available to the host memory domain using the VK_ACCESS_HOST_WRITE_BIT
and VK_ACCESS_HOST_READ_BIT access
types, are made visible to the host.
If a range of non-coherent memory is written by the host and then
invalidated without first being flushed, its contents are undefined.
The first synchronization scope includes all host operations that happened-before it, as defined by the host memory model.
- Device write
- Device memory barrier including host reads in its second scope
- Signal on the device (e.g. a fence signal operation)
- Wait on the host (e.g. vkWaitForFences)
- vkInvalidateMappedMemoryRanges
The second synchronization scope includes all host operations that happen-after it, as defined by the host memory model.
The first access scope is empty.
The second access scope includes host reads to the specified memory ranges.
nonCoherentAtomSize bytes that the memory location exists in will
also be made visible as if they were written by the device.
For example, with a nonCoherentAtomSize of 128, if an application
writes to the first byte of a memory object on the device, the first 128
bytes of the memory object will be made visible by this command.
While the value of the following 127 bytes will be unchanged, this does
count as an access for the purpose of synchronization, so care must be taken
to avoid data races.Valid Usage (Implicit)
VUID-vkInvalidateMappedMemoryRanges-device-parameter
device must be a valid VkDevice handle
VUID-vkInvalidateMappedMemoryRanges-pMemoryRanges-parameter
pMemoryRanges must be a valid pointer to an array of memoryRangeCount valid VkMappedMemoryRange structures
VUID-vkInvalidateMappedMemoryRanges-memoryRangeCount-arraylength
memoryRangeCount must be greater than 0