222 {
223 const auto& cmd_buffer =
encoder.GetCommandBuffer();
224
225
228
230 return false;
231 }
232
233 BarrierVK dst_barrier;
234 dst_barrier.cmd_buffer = cmd_buffer;
235 dst_barrier.new_layout = vk::ImageLayout::eTransferDstOptimal;
236 dst_barrier.src_access = {};
237 dst_barrier.src_stage = vk::PipelineStageFlagBits::eTopOfPipe;
238 dst_barrier.dst_access =
239 vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eTransferWrite;
240 dst_barrier.dst_stage = vk::PipelineStageFlagBits::eFragmentShader |
241 vk::PipelineStageFlagBits::eTransfer;
242
243 vk::BufferImageCopy image_copy;
245 image_copy.setBufferRowLength(0);
246 image_copy.setBufferImageHeight(0);
247 image_copy.setImageSubresource(
248 vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1));
249 image_copy.setImageOffset(
251 image_copy.setImageExtent(vk::Extent3D(
destination->GetSize().width,
253
254 if (!
dst.SetLayout(dst_barrier)) {
256 return false;
257 }
258
259 cmd_buffer.copyBufferToImage(
src.GetBuffer(),
261 dst_barrier.new_layout,
262 image_copy
263 );
264
265 return true;
266}
static TextureVK & Cast(Texture &base)
std::shared_ptr< Texture > destination
IPoint destination_origin
std::shared_ptr< const DeviceBuffer > buffer