Yes it looks like vkCmdUpdateBuffer is the best generic way. I haven't really looked at doing more than this patch at the moment because the main reason for it is to check if it fixes Hitman 2, which it doesn't. A more general solution may still prove necessary though.
Conor
On Sat, 9 Nov 2019, 1:27 AM Philip Rebohle philip.rebohle@tu-dortmund.de wrote:
Hello,
is it really necessary to use the AMD extension here?
Maybe I'm overlooking something, but looking at the MSDN docs, it should be possible to make a vendor-neutral implementation using core Vulkan functionality (vkCmdUpdateBuffer), and to also support the in/out modes via barriers:
VkPipelineStageFlags src_stages = 0;
for (i = 0; i < Count; i++) { if (pParams[i].Mode == MODE_MARKER_IN) src_stages |= TOP_OF_PIPE_BIT; else if (pParams[i].Mode == MODE_MARKER_OUT) src_stages |= BOTTOM_OF_PIPE_BIT; }
if (src_stages) memory_barrier(src_stages, TRANSFER_BIT);
for (i = 0; i < Count; i++) { update_buffer(...)
- Philip