/// <summary> /// Overrides the current VkImageLayout tracked by the given Texture. This should be used when a VkImage is created by /// an external library to inform Veldrid about its initial layout. /// </summary> /// <param name="texture">The Texture whose currently-tracked VkImageLayout will be overridden.</param> /// <param name="layout">The new VkImageLayout value.</param> public void OverrideImageLayout(Texture texture, uint layout) { VkTexture vkTex = Util.AssertSubtype <Texture, VkTexture>(texture); for (uint layer = 0; layer < vkTex.ArrayLayers; layer++) { for (uint level = 0; level < vkTex.MipLevels; level++) { vkTex.SetImageLayout(level, layer, (VkImageLayout)layout); } } }
/// <summary> /// Gets the underlying VkImage wrapped by the given Veldrid Texture. This method can not be used on Textures with /// TextureUsage.Staging. /// </summary> /// <param name="texture">The Texture whose underlying VkImage will be returned.</param> /// <returns>The underlying VkImage for the given Texture.</returns> public ulong GetVkImage(Texture texture) { VkTexture vkTexture = Util.AssertSubtype <Texture, VkTexture>(texture); if ((vkTexture.Usage & TextureUsage.Staging) != 0) { throw new VeldridException( $"{nameof(GetVkImage)} cannot be used if the {nameof(Texture)} " + $"has {nameof(TextureUsage)}.{nameof(TextureUsage.Staging)}."); } return(vkTexture.OptimalDeviceImage.Handle); }