| 271 | } |
| 272 | |
| 273 | void vulkan_buffer::copy(const compute_queue& cqueue, const compute_buffer& src, |
| 274 | const size_t size_, const size_t src_offset, const size_t dst_offset) { |
| 275 | if(buffer == nullptr) return; |
| 276 | |
| 277 | const size_t src_size = src.get_size(); |
| 278 | const size_t copy_size = (size_ == 0 ? std::min(src_size, size) : size_); |
| 279 | if(!copy_check(size, src_size, copy_size, dst_offset, src_offset)) return; |
| 280 | |
| 281 | const auto& vk_queue = (const vulkan_queue&)cqueue; |
| 282 | VK_CMD_BLOCK_RET(vk_queue, "buffer zero", ({ |
| 283 | const VkBufferCopy region { |
| 284 | .srcOffset = src_offset, |
| 285 | .dstOffset = dst_offset, |
| 286 | .size = copy_size, |
| 287 | }; |
| 288 | vkCmdCopyBuffer(block_cmd_buffer.cmd_buffer, ((const vulkan_buffer&)src).buffer, buffer, 1, ®ion); |
| 289 | }), , true /* always blocking */); |
| 290 | } |
| 291 | |
| 292 | bool vulkan_buffer::fill(const compute_queue& cqueue, |
| 293 | const void* pattern, const size_t& pattern_size, |