Vulkan: Implement GPU_storagebuf_copy_sub_from_vertbuf
This PR implements `GPU_storagebuf_copy_sub_from_vertbuf`. It can be used to copy a part of a vertex buffer to a storage buffer. Pull Request: https://projects.blender.org/blender/blender/pulls/112516
This commit is contained in:
@@ -216,6 +216,13 @@ void VKCommandBuffer::copy(VKTexture &dst_texture,
|
||||
regions.data());
|
||||
}
|
||||
|
||||
void VKCommandBuffer::copy(VKBuffer &dst_buffer, VkBuffer src_buffer, Span<VkBufferCopy> regions)
|
||||
{
|
||||
ensure_no_active_framebuffer();
|
||||
vkCmdCopyBuffer(
|
||||
vk_command_buffer_, src_buffer, dst_buffer.vk_handle(), regions.size(), regions.data());
|
||||
}
|
||||
|
||||
void VKCommandBuffer::blit(VKTexture &dst_texture,
|
||||
VKTexture &src_texture,
|
||||
Span<VkImageBlit> regions)
|
||||
|
||||
@@ -168,6 +168,7 @@ class VKCommandBuffer : NonCopyable, NonMovable {
|
||||
void copy(VKBuffer &dst_buffer, VKTexture &src_texture, Span<VkBufferImageCopy> regions);
|
||||
void copy(VKTexture &dst_texture, VKBuffer &src_buffer, Span<VkBufferImageCopy> regions);
|
||||
void copy(VKTexture &dst_texture, VKTexture &src_texture, Span<VkImageCopy> regions);
|
||||
void copy(VKBuffer &dst_buffer, VkBuffer src_buffer, Span<VkBufferCopy> regions);
|
||||
void blit(VKTexture &dst_texture, VKTexture &src_texture, Span<VkImageBlit> regions);
|
||||
void blit(VKTexture &dst_texture,
|
||||
VkImageLayout dst_layout,
|
||||
|
||||
@@ -73,12 +73,22 @@ void VKStorageBuffer::clear(uint32_t clear_value)
|
||||
buffer_.clear(context, clear_value);
|
||||
}
|
||||
|
||||
void VKStorageBuffer::copy_sub(VertBuf * /*src*/,
|
||||
uint /*dst_offset*/,
|
||||
uint /*src_offset*/,
|
||||
uint /*copy_size*/)
|
||||
void VKStorageBuffer::copy_sub(VertBuf *src, uint dst_offset, uint src_offset, uint copy_size)
|
||||
{
|
||||
NOT_YET_IMPLEMENTED;
|
||||
ensure_allocated();
|
||||
|
||||
VKVertexBuffer &src_vertex_buffer = *unwrap(src);
|
||||
src_vertex_buffer.upload();
|
||||
|
||||
VkBufferCopy region = {};
|
||||
region.srcOffset = src_offset;
|
||||
region.dstOffset = dst_offset;
|
||||
region.size = copy_size;
|
||||
|
||||
VKContext &context = *VKContext::get();
|
||||
VKCommandBuffer &command_buffer = context.command_buffer_get();
|
||||
command_buffer.copy(buffer_, src_vertex_buffer.vk_handle(), Span<VkBufferCopy>(®ion, 1));
|
||||
command_buffer.submit();
|
||||
}
|
||||
|
||||
void VKStorageBuffer::read(void *data)
|
||||
|
||||
Reference in New Issue
Block a user