internal void BlitImageToCurrentImage(VulkanSurfaceRenderTarget renderTarget, CommandBuffer commandBuffer) { var image = renderTarget.GetImage(); VulkanMemoryHelper.TransitionLayout(_device, commandBuffer, image.InternalHandle.Value, (ImageLayout)image.CurrentLayout, AccessFlags.AccessNoneKhr, ImageLayout.TransferSrcOptimal, AccessFlags.AccessTransferReadBit, renderTarget.MipLevels); var srcBlitRegion = new ImageBlit { SrcOffsets = new ImageBlit.SrcOffsetsBuffer { Element0 = new Offset3D(0, 0, 0), Element1 = new Offset3D(renderTarget.Size.Width, renderTarget.Size.Height, 1), }, DstOffsets = new ImageBlit.DstOffsetsBuffer { Element0 = new Offset3D(0, 0, 0), Element1 = new Offset3D(Size.Width, Size.Height, 1), }, SrcSubresource = new ImageSubresourceLayers { AspectMask = ImageAspectFlags.ImageAspectColorBit, BaseArrayLayer = 0, LayerCount = 1, MipLevel = 0 }, DstSubresource = new ImageSubresourceLayers { AspectMask = ImageAspectFlags.ImageAspectColorBit, BaseArrayLayer = 0, LayerCount = 1, MipLevel = 0 } }; _device.Api.CmdBlitImage(commandBuffer, image.InternalHandle.Value, ImageLayout.TransferSrcOptimal, _swapchainImages[_nextImage], ImageLayout.TransferDstOptimal, 1, srcBlitRegion, Filter.Linear); VulkanMemoryHelper.TransitionLayout(_device, commandBuffer, image.InternalHandle.Value, ImageLayout.TransferSrcOptimal, AccessFlags.AccessTransferReadBit, (ImageLayout)image.CurrentLayout, AccessFlags.AccessNoneKhr, renderTarget.MipLevels); }
private static void BlitImage( ImageAspects aspectMask, Image fromImage, IntRect fromRegion, int fromMipLevel, int fromLayerCount, Image toImage, IntRect toRegion, int toMipLevel, int toLayerCount, TransientExecutor executor) { ImageBlit blit = new ImageBlit { SrcSubresource = new ImageSubresourceLayers( aspectMask, fromMipLevel, baseArrayLayer: 0, fromLayerCount), SrcOffset1 = new Offset3D(fromRegion.Min.X, fromRegion.Min.Y, 0), SrcOffset2 = new Offset3D(fromRegion.Max.X, fromRegion.Max.Y, 1), DstSubresource = new ImageSubresourceLayers( aspectMask, toMipLevel, baseArrayLayer: 0, toLayerCount), DstOffset1 = new Offset3D(toRegion.Min.X, toRegion.Min.Y, 0), DstOffset2 = new Offset3D(toRegion.Max.X, toRegion.Max.Y, 1) }; //Execute the blit executor.ExecuteBlocking(commandBuffer => { commandBuffer.CmdBlitImage( srcImage: fromImage, srcImageLayout: ImageLayout.TransferSrcOptimal, dstImage: toImage, dstImageLayout: ImageLayout.TransferDstOptimal, regions: new [] { blit }, filter: Filter.Linear); }); }
public unsafe void BlitImage(Image sourceImage, ImageLayout sourceImageLayout, Image destinationImage, ImageLayout destinationImageLayout, uint regionCount, ImageBlit* regions, Filter filter) { vkCmdBlitImage(this, sourceImage, sourceImageLayout, destinationImage, destinationImageLayout, regionCount, regions, filter); }
public void CmdBlitImage(Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ImageBlit pRegion, Filter filter) { unsafe { Interop.NativeMethods.vkCmdBlitImage(this.m, srcImage != null ? srcImage.m : default(UInt64), srcImageLayout, dstImage != null ? dstImage.m : default(UInt64), dstImageLayout, (UInt32)(pRegion != null ? 1 : 0), pRegion != null ? pRegion.m : (Interop.ImageBlit *) default(IntPtr), filter); } }
internal static unsafe extern void vkCmdBlitImage(CommandBuffer commandBuffer, Image sourceImage, ImageLayout sourceImageLayout, Image destinationImage, ImageLayout destinationImageLayout, uint regionCount, ImageBlit* regions, Filter filter);