From f63081906df6f92cf43fec1052e2d649230840db Mon Sep 17 00:00:00 2001 From: Charlton Rodda Date: Fri, 1 Dec 2023 10:28:46 +0000 Subject: [PATCH] Copy paste static parts of wgpu format table --- src/graphics/vulkan.rs | 191 ++++++++++++++++++++++++++++------------- 1 file changed, 130 insertions(+), 61 deletions(-) diff --git a/src/graphics/vulkan.rs b/src/graphics/vulkan.rs index 8e69685..6a5379d 100644 --- a/src/graphics/vulkan.rs +++ b/src/graphics/vulkan.rs @@ -470,67 +470,136 @@ pub fn start_xr_session( } fn wgpu_to_vulkan(format: wgpu::TextureFormat) -> vk::Format { - use vk::Format; + // Copied with minor modification from: + // https://github.com/gfx-rs/wgpu/blob/v0.19/wgpu-hal/src/vulkan/conv.rs#L5C1-L153 + // license: MIT OR Apache-2.0 + use ash::vk::Format as F; + use wgpu::TextureFormat as Tf; + use wgpu::{AstcBlock, AstcChannel}; match format { - wgpu::TextureFormat::R8Unorm => Format::R8_UNORM, - wgpu::TextureFormat::R8Snorm => Format::R8_SNORM, - wgpu::TextureFormat::R8Uint => Format::R8_UINT, - wgpu::TextureFormat::R8Sint => Format::R8_SINT, - wgpu::TextureFormat::R16Uint => Format::R16_UINT, - wgpu::TextureFormat::R16Sint => Format::R16_SINT, - wgpu::TextureFormat::R16Unorm => Format::R16_UNORM, - wgpu::TextureFormat::R16Snorm => Format::R16_SNORM, - wgpu::TextureFormat::R16Float => Format::R16_SFLOAT, - wgpu::TextureFormat::Rg8Unorm => Format::R8G8_UNORM, - wgpu::TextureFormat::Rg8Snorm => Format::R8G8_SNORM, - wgpu::TextureFormat::Rg8Uint => Format::R8G8_UINT, - wgpu::TextureFormat::Rg8Sint => Format::R8G8_SINT, - wgpu::TextureFormat::R32Uint => Format::R32_UINT, - wgpu::TextureFormat::R32Sint => Format::R32_SINT, - wgpu::TextureFormat::R32Float => Format::R32_SFLOAT, - wgpu::TextureFormat::Rg16Uint => Format::R16G16_UINT, - wgpu::TextureFormat::Rg16Sint => Format::R16G16_SINT, - wgpu::TextureFormat::Rg16Unorm => Format::R16G16_UNORM, - wgpu::TextureFormat::Rg16Snorm => Format::R16G16_SNORM, - wgpu::TextureFormat::Rg16Float => Format::R16G16_SFLOAT, - wgpu::TextureFormat::Rgba8Unorm => Format::R8G8B8A8_UNORM, - wgpu::TextureFormat::Rgba8UnormSrgb => Format::R8G8B8A8_SRGB, - wgpu::TextureFormat::Rgba8Snorm => Format::R8G8B8A8_SNORM, - wgpu::TextureFormat::Rgba8Uint => Format::R8G8B8A8_UINT, - wgpu::TextureFormat::Rgba8Sint => Format::R8G8B8A8_SINT, - wgpu::TextureFormat::Bgra8Unorm => Format::B8G8R8A8_UNORM, - wgpu::TextureFormat::Bgra8UnormSrgb => Format::B8G8R8A8_SRGB, - wgpu::TextureFormat::Rgb9e5Ufloat => Format::E5B9G9R9_UFLOAT_PACK32, // this might be the wrong type??? i can't tell - wgpu::TextureFormat::Rgb10a2Unorm => Format::A2R10G10B10_UNORM_PACK32, - wgpu::TextureFormat::Rg11b10Float => panic!("this texture type invokes nothing but fear within my soul and i don't think vulkan has a proper type for this"), - wgpu::TextureFormat::Rg32Uint => Format::R32G32_UINT, - wgpu::TextureFormat::Rg32Sint => Format::R32G32_SINT, - wgpu::TextureFormat::Rg32Float => Format::R32G32_SFLOAT, - wgpu::TextureFormat::Rgba16Uint => Format::R16G16B16A16_UINT, - wgpu::TextureFormat::Rgba16Sint => Format::R16G16B16A16_SINT, - wgpu::TextureFormat::Rgba16Unorm => Format::R16G16B16A16_UNORM, - wgpu::TextureFormat::Rgba16Snorm => Format::R16G16B16A16_SNORM, - wgpu::TextureFormat::Rgba16Float => Format::R16G16B16A16_SFLOAT, - wgpu::TextureFormat::Rgba32Uint => Format::R32G32B32A32_UINT, - wgpu::TextureFormat::Rgba32Sint => Format::R32G32B32A32_SINT, - wgpu::TextureFormat::Rgba32Float => Format::R32G32B32A32_SFLOAT, - wgpu::TextureFormat::Stencil8 => Format::S8_UINT, - wgpu::TextureFormat::Depth16Unorm => Format::D16_UNORM, - wgpu::TextureFormat::Depth24Plus => Format::X8_D24_UNORM_PACK32, - wgpu::TextureFormat::Depth24PlusStencil8 => Format::D24_UNORM_S8_UINT, - wgpu::TextureFormat::Depth32Float => Format::D32_SFLOAT, - wgpu::TextureFormat::Depth32FloatStencil8 => Format::D32_SFLOAT_S8_UINT, - wgpu::TextureFormat::Etc2Rgb8Unorm => Format::ETC2_R8G8B8_UNORM_BLOCK, - wgpu::TextureFormat::Etc2Rgb8UnormSrgb => Format::ETC2_R8G8B8_SRGB_BLOCK, - wgpu::TextureFormat::Etc2Rgb8A1Unorm => Format::ETC2_R8G8B8A1_UNORM_BLOCK, - wgpu::TextureFormat::Etc2Rgb8A1UnormSrgb => Format::ETC2_R8G8B8A1_SRGB_BLOCK, - wgpu::TextureFormat::Etc2Rgba8Unorm => Format::ETC2_R8G8B8A8_UNORM_BLOCK, - wgpu::TextureFormat::Etc2Rgba8UnormSrgb => Format::ETC2_R8G8B8A8_SRGB_BLOCK, - wgpu::TextureFormat::EacR11Unorm => Format::EAC_R11_UNORM_BLOCK, - wgpu::TextureFormat::EacR11Snorm => Format::EAC_R11_SNORM_BLOCK, - wgpu::TextureFormat::EacRg11Unorm => Format::EAC_R11G11_UNORM_BLOCK, - wgpu::TextureFormat::EacRg11Snorm => Format::EAC_R11G11_SNORM_BLOCK, - wgpu::TextureFormat::Astc { .. } => panic!("please god kill me now"), - _ => panic!("fuck no") + Tf::R8Unorm => F::R8_UNORM, + Tf::R8Snorm => F::R8_SNORM, + Tf::R8Uint => F::R8_UINT, + Tf::R8Sint => F::R8_SINT, + Tf::R16Uint => F::R16_UINT, + Tf::R16Sint => F::R16_SINT, + Tf::R16Unorm => F::R16_UNORM, + Tf::R16Snorm => F::R16_SNORM, + Tf::R16Float => F::R16_SFLOAT, + Tf::Rg8Unorm => F::R8G8_UNORM, + Tf::Rg8Snorm => F::R8G8_SNORM, + Tf::Rg8Uint => F::R8G8_UINT, + Tf::Rg8Sint => F::R8G8_SINT, + Tf::Rg16Unorm => F::R16G16_UNORM, + Tf::Rg16Snorm => F::R16G16_SNORM, + Tf::R32Uint => F::R32_UINT, + Tf::R32Sint => F::R32_SINT, + Tf::R32Float => F::R32_SFLOAT, + Tf::Rg16Uint => F::R16G16_UINT, + Tf::Rg16Sint => F::R16G16_SINT, + Tf::Rg16Float => F::R16G16_SFLOAT, + Tf::Rgba8Unorm => F::R8G8B8A8_UNORM, + Tf::Rgba8UnormSrgb => F::R8G8B8A8_SRGB, + Tf::Bgra8UnormSrgb => F::B8G8R8A8_SRGB, + Tf::Rgba8Snorm => F::R8G8B8A8_SNORM, + Tf::Bgra8Unorm => F::B8G8R8A8_UNORM, + Tf::Rgba8Uint => F::R8G8B8A8_UINT, + Tf::Rgba8Sint => F::R8G8B8A8_SINT, + Tf::Rgb10a2Uint => F::A2B10G10R10_UINT_PACK32, + Tf::Rgb10a2Unorm => F::A2B10G10R10_UNORM_PACK32, + Tf::Rg11b10Float => F::B10G11R11_UFLOAT_PACK32, + Tf::Rg32Uint => F::R32G32_UINT, + Tf::Rg32Sint => F::R32G32_SINT, + Tf::Rg32Float => F::R32G32_SFLOAT, + Tf::Rgba16Uint => F::R16G16B16A16_UINT, + Tf::Rgba16Sint => F::R16G16B16A16_SINT, + Tf::Rgba16Unorm => F::R16G16B16A16_UNORM, + Tf::Rgba16Snorm => F::R16G16B16A16_SNORM, + Tf::Rgba16Float => F::R16G16B16A16_SFLOAT, + Tf::Rgba32Uint => F::R32G32B32A32_UINT, + Tf::Rgba32Sint => F::R32G32B32A32_SINT, + Tf::Rgba32Float => F::R32G32B32A32_SFLOAT, + Tf::Depth32Float => F::D32_SFLOAT, + Tf::Depth32FloatStencil8 => F::D32_SFLOAT_S8_UINT, + Tf::Depth24Plus | Tf::Depth24PlusStencil8 | Tf::Stencil8 => { + panic!("Cannot convert format that is dependent on device properties") + } + Tf::Depth16Unorm => F::D16_UNORM, + Tf::NV12 => F::G8_B8R8_2PLANE_420_UNORM, + Tf::Rgb9e5Ufloat => F::E5B9G9R9_UFLOAT_PACK32, + Tf::Bc1RgbaUnorm => F::BC1_RGBA_UNORM_BLOCK, + Tf::Bc1RgbaUnormSrgb => F::BC1_RGBA_SRGB_BLOCK, + Tf::Bc2RgbaUnorm => F::BC2_UNORM_BLOCK, + Tf::Bc2RgbaUnormSrgb => F::BC2_SRGB_BLOCK, + Tf::Bc3RgbaUnorm => F::BC3_UNORM_BLOCK, + Tf::Bc3RgbaUnormSrgb => F::BC3_SRGB_BLOCK, + Tf::Bc4RUnorm => F::BC4_UNORM_BLOCK, + Tf::Bc4RSnorm => F::BC4_SNORM_BLOCK, + Tf::Bc5RgUnorm => F::BC5_UNORM_BLOCK, + Tf::Bc5RgSnorm => F::BC5_SNORM_BLOCK, + Tf::Bc6hRgbUfloat => F::BC6H_UFLOAT_BLOCK, + Tf::Bc6hRgbFloat => F::BC6H_SFLOAT_BLOCK, + Tf::Bc7RgbaUnorm => F::BC7_UNORM_BLOCK, + Tf::Bc7RgbaUnormSrgb => F::BC7_SRGB_BLOCK, + Tf::Etc2Rgb8Unorm => F::ETC2_R8G8B8_UNORM_BLOCK, + Tf::Etc2Rgb8UnormSrgb => F::ETC2_R8G8B8_SRGB_BLOCK, + Tf::Etc2Rgb8A1Unorm => F::ETC2_R8G8B8A1_UNORM_BLOCK, + Tf::Etc2Rgb8A1UnormSrgb => F::ETC2_R8G8B8A1_SRGB_BLOCK, + Tf::Etc2Rgba8Unorm => F::ETC2_R8G8B8A8_UNORM_BLOCK, + Tf::Etc2Rgba8UnormSrgb => F::ETC2_R8G8B8A8_SRGB_BLOCK, + Tf::EacR11Unorm => F::EAC_R11_UNORM_BLOCK, + Tf::EacR11Snorm => F::EAC_R11_SNORM_BLOCK, + Tf::EacRg11Unorm => F::EAC_R11G11_UNORM_BLOCK, + Tf::EacRg11Snorm => F::EAC_R11G11_SNORM_BLOCK, + Tf::Astc { block, channel } => match channel { + AstcChannel::Unorm => match block { + AstcBlock::B4x4 => F::ASTC_4X4_UNORM_BLOCK, + AstcBlock::B5x4 => F::ASTC_5X4_UNORM_BLOCK, + AstcBlock::B5x5 => F::ASTC_5X5_UNORM_BLOCK, + AstcBlock::B6x5 => F::ASTC_6X5_UNORM_BLOCK, + AstcBlock::B6x6 => F::ASTC_6X6_UNORM_BLOCK, + AstcBlock::B8x5 => F::ASTC_8X5_UNORM_BLOCK, + AstcBlock::B8x6 => F::ASTC_8X6_UNORM_BLOCK, + AstcBlock::B8x8 => F::ASTC_8X8_UNORM_BLOCK, + AstcBlock::B10x5 => F::ASTC_10X5_UNORM_BLOCK, + AstcBlock::B10x6 => F::ASTC_10X6_UNORM_BLOCK, + AstcBlock::B10x8 => F::ASTC_10X8_UNORM_BLOCK, + AstcBlock::B10x10 => F::ASTC_10X10_UNORM_BLOCK, + AstcBlock::B12x10 => F::ASTC_12X10_UNORM_BLOCK, + AstcBlock::B12x12 => F::ASTC_12X12_UNORM_BLOCK, + }, + AstcChannel::UnormSrgb => match block { + AstcBlock::B4x4 => F::ASTC_4X4_SRGB_BLOCK, + AstcBlock::B5x4 => F::ASTC_5X4_SRGB_BLOCK, + AstcBlock::B5x5 => F::ASTC_5X5_SRGB_BLOCK, + AstcBlock::B6x5 => F::ASTC_6X5_SRGB_BLOCK, + AstcBlock::B6x6 => F::ASTC_6X6_SRGB_BLOCK, + AstcBlock::B8x5 => F::ASTC_8X5_SRGB_BLOCK, + AstcBlock::B8x6 => F::ASTC_8X6_SRGB_BLOCK, + AstcBlock::B8x8 => F::ASTC_8X8_SRGB_BLOCK, + AstcBlock::B10x5 => F::ASTC_10X5_SRGB_BLOCK, + AstcBlock::B10x6 => F::ASTC_10X6_SRGB_BLOCK, + AstcBlock::B10x8 => F::ASTC_10X8_SRGB_BLOCK, + AstcBlock::B10x10 => F::ASTC_10X10_SRGB_BLOCK, + AstcBlock::B12x10 => F::ASTC_12X10_SRGB_BLOCK, + AstcBlock::B12x12 => F::ASTC_12X12_SRGB_BLOCK, + }, + AstcChannel::Hdr => match block { + AstcBlock::B4x4 => F::ASTC_4X4_SFLOAT_BLOCK_EXT, + AstcBlock::B5x4 => F::ASTC_5X4_SFLOAT_BLOCK_EXT, + AstcBlock::B5x5 => F::ASTC_5X5_SFLOAT_BLOCK_EXT, + AstcBlock::B6x5 => F::ASTC_6X5_SFLOAT_BLOCK_EXT, + AstcBlock::B6x6 => F::ASTC_6X6_SFLOAT_BLOCK_EXT, + AstcBlock::B8x5 => F::ASTC_8X5_SFLOAT_BLOCK_EXT, + AstcBlock::B8x6 => F::ASTC_8X6_SFLOAT_BLOCK_EXT, + AstcBlock::B8x8 => F::ASTC_8X8_SFLOAT_BLOCK_EXT, + AstcBlock::B10x5 => F::ASTC_10X5_SFLOAT_BLOCK_EXT, + AstcBlock::B10x6 => F::ASTC_10X6_SFLOAT_BLOCK_EXT, + AstcBlock::B10x8 => F::ASTC_10X8_SFLOAT_BLOCK_EXT, + AstcBlock::B10x10 => F::ASTC_10X10_SFLOAT_BLOCK_EXT, + AstcBlock::B12x10 => F::ASTC_12X10_SFLOAT_BLOCK_EXT, + AstcBlock::B12x12 => F::ASTC_12X12_SFLOAT_BLOCK_EXT, + }, + }, } }