Browse Source

Vk: don't access and call conversion methods on items in empty arrays.

Triggers the new OOB assertion in ArrayView element access APIs.
"Technically" this was okay, since converting a BufferMemoryBarrier to
VkBufferMemoryBarrier is just `return this;` (and a cast), which if
`this == nullptr` returns `nullptr`. But practically this probably
triggered all sorts of UB. Haha.
pull/499/head
Vladimír Vondruš 3 years ago
parent
commit
674ef46355
  1. 5
      src/Magnum/Vk/Pipeline.cpp

5
src/Magnum/Vk/Pipeline.cpp

@ -428,7 +428,10 @@ CommandBuffer& CommandBuffer::pipelineBarrier(const PipelineStages sourceStages,
sizeof(BufferMemoryBarrier) == sizeof(VkBufferMemoryBarrier) &&
sizeof(ImageMemoryBarrier) == sizeof(VkImageMemoryBarrier),
"");
(**_device).CmdPipelineBarrier(_handle, VkPipelineStageFlags(sourceStages), VkPipelineStageFlags(destinationStages), VkDependencyFlags(dependencyFlags), memoryBarriers.size(), memoryBarriers[0], bufferMemoryBarriers.size(), bufferMemoryBarriers[0], imageMemoryBarriers.size(), imageMemoryBarriers[0]);
(**_device).CmdPipelineBarrier(_handle, VkPipelineStageFlags(sourceStages), VkPipelineStageFlags(destinationStages), VkDependencyFlags(dependencyFlags),
memoryBarriers.size(), memoryBarriers.isEmpty() ? nullptr : &*memoryBarriers.front(),
bufferMemoryBarriers.size(), bufferMemoryBarriers.isEmpty() ? nullptr : &*bufferMemoryBarriers.front(),
imageMemoryBarriers.size(), imageMemoryBarriers.isEmpty() ? nullptr : &*imageMemoryBarriers.front());
return *this;
}

Loading…
Cancel
Save