Files
FlaxEngine/Source/Engine/GraphicsDevice/WebGPU/RenderToolsWebGPU.cpp

242 lines
14 KiB
C++

// Copyright (c) Wojciech Figat. All rights reserved.
#if GRAPHICS_API_WEBGPU
#include "RenderToolsWebGPU.h"
#include "Engine/Graphics/PixelFormat.h"
WGPUVertexFormat RenderToolsWebGPU::ToVertexFormat(PixelFormat format)
{
switch (format)
{
// @formatter:off
case PixelFormat::R8_UInt: return WGPUVertexFormat_Uint8;
case PixelFormat::R8G8_UInt: return WGPUVertexFormat_Uint8x2;
case PixelFormat::R8G8B8A8_UInt: return WGPUVertexFormat_Uint8x4;
case PixelFormat::R8_SInt: return WGPUVertexFormat_Sint8;
case PixelFormat::R8G8_SInt: return WGPUVertexFormat_Sint8x2;
case PixelFormat::R8G8B8A8_SInt: return WGPUVertexFormat_Sint8x4;
case PixelFormat::R8_UNorm: return WGPUVertexFormat_Unorm8;
case PixelFormat::R8G8_UNorm: return WGPUVertexFormat_Unorm8x2;
case PixelFormat::R8G8B8A8_UNorm: return WGPUVertexFormat_Unorm8x4;
case PixelFormat::R8_SNorm: return WGPUVertexFormat_Snorm8;
case PixelFormat::R8G8_SNorm: return WGPUVertexFormat_Snorm8x2;
case PixelFormat::R8G8B8A8_SNorm: return WGPUVertexFormat_Snorm8x4;
case PixelFormat::R16_UInt: return WGPUVertexFormat_Uint16;
case PixelFormat::R16G16_UInt: return WGPUVertexFormat_Uint16x2;
case PixelFormat::R16G16B16A16_UInt: return WGPUVertexFormat_Uint16x4;
case PixelFormat::R16_SInt: return WGPUVertexFormat_Sint16;
case PixelFormat::R16G16_SInt: return WGPUVertexFormat_Sint16x2;
case PixelFormat::R16G16B16A16_SInt: return WGPUVertexFormat_Sint16x4;
case PixelFormat::R16_UNorm: return WGPUVertexFormat_Unorm16;
case PixelFormat::R16G16_UNorm: return WGPUVertexFormat_Unorm16x2;
case PixelFormat::R16G16B16A16_UNorm: return WGPUVertexFormat_Unorm16x4;
case PixelFormat::R16_SNorm: return WGPUVertexFormat_Snorm16;
case PixelFormat::R16G16_SNorm: return WGPUVertexFormat_Snorm16x2;
case PixelFormat::R16G16B16A16_SNorm: return WGPUVertexFormat_Snorm16x4;
case PixelFormat::R16_Float: return WGPUVertexFormat_Float16;
case PixelFormat::R16G16_Float: return WGPUVertexFormat_Float16x2;
case PixelFormat::R16G16B16A16_Float: return WGPUVertexFormat_Float16x4;
case PixelFormat::R32_Float: return WGPUVertexFormat_Float32;
case PixelFormat::R32G32_Float: return WGPUVertexFormat_Float32x2;
case PixelFormat::R32G32B32_Float: return WGPUVertexFormat_Float32x3;
case PixelFormat::R32G32B32A32_Float: return WGPUVertexFormat_Float32x4;
case PixelFormat::R32_UInt: return WGPUVertexFormat_Uint32;
case PixelFormat::R32G32_UInt: return WGPUVertexFormat_Uint32x2;
case PixelFormat::R32G32B32_UInt: return WGPUVertexFormat_Uint32x3;
case PixelFormat::R32G32B32A32_UInt: return WGPUVertexFormat_Uint32x4;
case PixelFormat::R32_SInt: return WGPUVertexFormat_Sint32;
case PixelFormat::R32G32_SInt: return WGPUVertexFormat_Sint32x2;
case PixelFormat::R32G32B32_SInt: return WGPUVertexFormat_Sint32x3;
case PixelFormat::R32G32B32A32_SInt: return WGPUVertexFormat_Sint32x4;
case PixelFormat::R10G10B10A2_UNorm: return WGPUVertexFormat_Unorm10_10_10_2;
case PixelFormat::B8G8R8A8_UNorm: return WGPUVertexFormat_Unorm8x4BGRA;
default: return WGPUVertexFormat_Force32;
// @formatter:on
}
}
WGPUTextureFormat RenderToolsWebGPU::ToTextureFormat(PixelFormat format)
{
switch (format)
{
// @formatter:off
case PixelFormat::R32G32B32A32_Typeless:
case PixelFormat::R32G32B32A32_Float: return WGPUTextureFormat_RGBA32Float;
case PixelFormat::R32G32B32A32_UInt: return WGPUTextureFormat_RGBA32Uint;
case PixelFormat::R32G32B32A32_SInt: return WGPUTextureFormat_RGBA32Sint;
case PixelFormat::R16G16B16A16_Typeless:
case PixelFormat::R16G16B16A16_Float: return WGPUTextureFormat_RGBA16Float;
case PixelFormat::R16G16B16A16_UNorm: return WGPUTextureFormat_RGBA16Unorm;
case PixelFormat::R16G16B16A16_UInt: return WGPUTextureFormat_RGBA16Uint;
case PixelFormat::R16G16B16A16_SNorm: return WGPUTextureFormat_RGBA16Snorm;
case PixelFormat::R16G16B16A16_SInt: return WGPUTextureFormat_RGBA16Sint;
case PixelFormat::R32G32_Typeless:
case PixelFormat::R32G32_Float: return WGPUTextureFormat_RG32Float;
case PixelFormat::R32G32_UInt: return WGPUTextureFormat_RG32Uint;
case PixelFormat::R32G32_SInt: return WGPUTextureFormat_RG32Sint;
case PixelFormat::R32G8X24_Typeless:
case PixelFormat::D32_Float_S8X24_UInt:
case PixelFormat::R32_Float_X8X24_Typeless:
case PixelFormat::X32_Typeless_G8X24_UInt: return WGPUTextureFormat_Depth32FloatStencil8;
case PixelFormat::R10G10B10A2_Typeless:
case PixelFormat::R10G10B10A2_UNorm: return WGPUTextureFormat_RGB10A2Unorm;
case PixelFormat::R10G10B10A2_UInt: return WGPUTextureFormat_RGB10A2Uint;
case PixelFormat::R11G11B10_Float: return WGPUTextureFormat_RG11B10Ufloat;
case PixelFormat::R8G8B8A8_Typeless:
case PixelFormat::R8G8B8A8_UNorm: return WGPUTextureFormat_RGBA8Unorm;
case PixelFormat::R8G8B8A8_UNorm_sRGB: return WGPUTextureFormat_RGBA8UnormSrgb;
case PixelFormat::R8G8B8A8_UInt: return WGPUTextureFormat_RGBA8Uint;
case PixelFormat::R8G8B8A8_SNorm: return WGPUTextureFormat_RGBA8Snorm;
case PixelFormat::R8G8B8A8_SInt: return WGPUTextureFormat_RGBA8Sint;
case PixelFormat::R16G16_Typeless:
case PixelFormat::R16G16_Float: return WGPUTextureFormat_RG16Float;
case PixelFormat::R16G16_UNorm: return WGPUTextureFormat_RG16Unorm;
case PixelFormat::R16G16_UInt: return WGPUTextureFormat_RG16Uint;
case PixelFormat::R16G16_SNorm: return WGPUTextureFormat_RG16Snorm;
case PixelFormat::R16G16_SInt: return WGPUTextureFormat_RG16Sint;
case PixelFormat::D32_Float: return WGPUTextureFormat_Depth32Float;
case PixelFormat::R32_Typeless:
case PixelFormat::R32_Float: return WGPUTextureFormat_R32Float;
case PixelFormat::R32_UInt: return WGPUTextureFormat_R32Uint;
case PixelFormat::R32_SInt: return WGPUTextureFormat_R32Sint;
case PixelFormat::R24G8_Typeless:
case PixelFormat::D24_UNorm_S8_UInt:
case PixelFormat::R24_UNorm_X8_Typeless:
case PixelFormat::X24_Typeless_G8_UInt: return WGPUTextureFormat_Depth24PlusStencil8;
case PixelFormat::R8G8_Typeless:
case PixelFormat::R8G8_UNorm: return WGPUTextureFormat_RG8Unorm;
case PixelFormat::R8G8_UInt: return WGPUTextureFormat_RG8Uint;
case PixelFormat::R8G8_SNorm: return WGPUTextureFormat_RG8Snorm;
case PixelFormat::R8G8_SInt: return WGPUTextureFormat_RG8Sint;
case PixelFormat::R16_Typeless:
case PixelFormat::R16_Float: return WGPUTextureFormat_R16Float;
case PixelFormat::D16_UNorm: return WGPUTextureFormat_Depth16Unorm;
case PixelFormat::R16_UNorm: return WGPUTextureFormat_R16Unorm;
case PixelFormat::R16_UInt: return WGPUTextureFormat_R16Uint;
case PixelFormat::R16_SNorm: return WGPUTextureFormat_R16Snorm;
case PixelFormat::R16_SInt: return WGPUTextureFormat_R16Sint;
case PixelFormat::R8_Typeless:
case PixelFormat::R8_UNorm: return WGPUTextureFormat_R8Unorm;
case PixelFormat::R8_UInt: return WGPUTextureFormat_R8Uint;
case PixelFormat::R8_SNorm: return WGPUTextureFormat_R8Snorm;
case PixelFormat::R8_SInt: return WGPUTextureFormat_R8Sint;
case PixelFormat::R9G9B9E5_SharedExp: return WGPUTextureFormat_RGB9E5Ufloat;
case PixelFormat::BC1_Typeless:
case PixelFormat::BC1_UNorm: return WGPUTextureFormat_BC1RGBAUnorm;
case PixelFormat::BC1_UNorm_sRGB: return WGPUTextureFormat_BC1RGBAUnormSrgb;
case PixelFormat::BC2_Typeless:
case PixelFormat::BC2_UNorm: return WGPUTextureFormat_BC2RGBAUnorm;
case PixelFormat::BC2_UNorm_sRGB: return WGPUTextureFormat_BC2RGBAUnormSrgb;
case PixelFormat::BC3_Typeless:
case PixelFormat::BC3_UNorm: return WGPUTextureFormat_BC3RGBAUnorm;
case PixelFormat::BC3_UNorm_sRGB: return WGPUTextureFormat_BC3RGBAUnormSrgb;
case PixelFormat::BC4_Typeless:
case PixelFormat::BC4_UNorm: return WGPUTextureFormat_BC4RUnorm;
case PixelFormat::BC4_SNorm: return WGPUTextureFormat_BC4RSnorm;
case PixelFormat::BC5_Typeless:
case PixelFormat::BC5_UNorm: return WGPUTextureFormat_BC5RGUnorm;
case PixelFormat::BC5_SNorm: return WGPUTextureFormat_BC5RGSnorm;
case PixelFormat::B8G8R8A8_Typeless:
case PixelFormat::B8G8R8X8_Typeless:
case PixelFormat::B8G8R8A8_UNorm:
case PixelFormat::B8G8R8X8_UNorm: return WGPUTextureFormat_BGRA8Unorm;
case PixelFormat::B8G8R8A8_UNorm_sRGB:
case PixelFormat::B8G8R8X8_UNorm_sRGB: return WGPUTextureFormat_BGRA8UnormSrgb;
case PixelFormat::BC6H_Typeless:
case PixelFormat::BC6H_Uf16: return WGPUTextureFormat_BC6HRGBUfloat;
case PixelFormat::BC6H_Sf16: return WGPUTextureFormat_BC6HRGBFloat;
case PixelFormat::BC7_Typeless:
case PixelFormat::BC7_UNorm: return WGPUTextureFormat_BC7RGBAUnorm;
case PixelFormat::BC7_UNorm_sRGB: return WGPUTextureFormat_BC7RGBAUnormSrgb;
case PixelFormat::ASTC_4x4_UNorm: return WGPUTextureFormat_ASTC4x4Unorm;
case PixelFormat::ASTC_4x4_UNorm_sRGB: return WGPUTextureFormat_ASTC4x4UnormSrgb;
case PixelFormat::ASTC_6x6_UNorm: return WGPUTextureFormat_ASTC6x6Unorm;
case PixelFormat::ASTC_6x6_UNorm_sRGB: return WGPUTextureFormat_ASTC6x6UnormSrgb;
case PixelFormat::ASTC_8x8_UNorm: return WGPUTextureFormat_ASTC8x8Unorm;
case PixelFormat::ASTC_8x8_UNorm_sRGB: return WGPUTextureFormat_ASTC8x8UnormSrgb;
case PixelFormat::ASTC_10x10_UNorm: return WGPUTextureFormat_ASTC10x10Unorm;
case PixelFormat::ASTC_10x10_UNorm_sRGB: return WGPUTextureFormat_ASTC10x10UnormSrgb;
default: return WGPUTextureFormat_Undefined;
// @formatter:on
}
}
PixelFormat RenderToolsWebGPU::ToPixelFormat(WGPUTextureFormat format)
{
switch (format)
{
// @formatter:off
case WGPUTextureFormat_R8Unorm: return PixelFormat::R8_UNorm;
case WGPUTextureFormat_R8Snorm: return PixelFormat::R8_SNorm;
case WGPUTextureFormat_R8Uint: return PixelFormat::R8_UInt;
case WGPUTextureFormat_R8Sint: return PixelFormat::R8_SInt;
case WGPUTextureFormat_R16Unorm: return PixelFormat::R16_UNorm;
case WGPUTextureFormat_R16Snorm: return PixelFormat::R16_SNorm;
case WGPUTextureFormat_R16Uint: return PixelFormat::R16_UInt;
case WGPUTextureFormat_R16Sint: return PixelFormat::R16_SInt;
case WGPUTextureFormat_R16Float: return PixelFormat::R16_Float;
case WGPUTextureFormat_R32Float: return PixelFormat::R32_Float;
case WGPUTextureFormat_R32Uint: return PixelFormat::R32_UInt;
case WGPUTextureFormat_R32Sint: return PixelFormat::R32_SInt;
case WGPUTextureFormat_RG16Unorm: return PixelFormat::R16G16_UNorm;
case WGPUTextureFormat_RG16Snorm: return PixelFormat::R16G16_SNorm;
case WGPUTextureFormat_RG16Uint: return PixelFormat::R16G16_UInt;
case WGPUTextureFormat_RG16Sint: return PixelFormat::R16G16_SInt;
case WGPUTextureFormat_RG16Float: return PixelFormat::R16G16_Float;
case WGPUTextureFormat_RGBA8Unorm: return PixelFormat::R8G8B8A8_UNorm;
case WGPUTextureFormat_RGBA8UnormSrgb: return PixelFormat::R8G8B8A8_UNorm_sRGB;
case WGPUTextureFormat_RGBA8Snorm: return PixelFormat::R8G8B8A8_SNorm;
case WGPUTextureFormat_RGBA8Uint: return PixelFormat::R8G8B8A8_UInt;
case WGPUTextureFormat_RGBA8Sint: return PixelFormat::R8G8B8A8_SInt;
case WGPUTextureFormat_BGRA8Unorm: return PixelFormat::B8G8R8A8_UNorm;
case WGPUTextureFormat_BGRA8UnormSrgb: return PixelFormat::B8G8R8A8_UNorm_sRGB;
case WGPUTextureFormat_RGB10A2Uint: return PixelFormat::R10G10B10A2_UInt;
case WGPUTextureFormat_RGB10A2Unorm: return PixelFormat::R10G10B10A2_UNorm;
case WGPUTextureFormat_RG11B10Ufloat: return PixelFormat::R11G11B10_Float;
case WGPUTextureFormat_RGB9E5Ufloat: return PixelFormat::R9G9B9E5_SharedExp;
case WGPUTextureFormat_RG32Float: return PixelFormat::R32G32_Float;
case WGPUTextureFormat_RG32Uint: return PixelFormat::R32G32_UInt;
case WGPUTextureFormat_RG32Sint: return PixelFormat::R32G32_SInt;
case WGPUTextureFormat_RGBA16Unorm: return PixelFormat::R16G16B16A16_UNorm;
case WGPUTextureFormat_RGBA16Snorm: return PixelFormat::R16G16B16A16_SNorm;
case WGPUTextureFormat_RGBA16Uint: return PixelFormat::R16G16B16A16_UInt;
case WGPUTextureFormat_RGBA16Sint: return PixelFormat::R16G16B16A16_SInt;
case WGPUTextureFormat_RGBA16Float: return PixelFormat::R16G16B16A16_Float;
case WGPUTextureFormat_RGBA32Float: return PixelFormat::R32G32B32A32_Float;
case WGPUTextureFormat_RGBA32Uint: return PixelFormat::R32G32B32A32_UInt;
case WGPUTextureFormat_RGBA32Sint: return PixelFormat::R32G32B32A32_SInt;
case WGPUTextureFormat_Depth16Unorm: return PixelFormat::D16_UNorm;
case WGPUTextureFormat_Depth24Plus:
case WGPUTextureFormat_Depth24PlusStencil8: return PixelFormat::D24_UNorm_S8_UInt;
case WGPUTextureFormat_Depth32Float: return PixelFormat::D32_Float;
case WGPUTextureFormat_Depth32FloatStencil8: return PixelFormat::D32_Float_S8X24_UInt;
case WGPUTextureFormat_BC1RGBAUnorm: return PixelFormat::BC1_UNorm;
case WGPUTextureFormat_BC1RGBAUnormSrgb: return PixelFormat::BC1_UNorm_sRGB;
case WGPUTextureFormat_BC2RGBAUnorm: return PixelFormat::BC2_UNorm;
case WGPUTextureFormat_BC2RGBAUnormSrgb: return PixelFormat::BC2_UNorm_sRGB;
case WGPUTextureFormat_BC3RGBAUnorm: return PixelFormat::BC3_UNorm;
case WGPUTextureFormat_BC3RGBAUnormSrgb: return PixelFormat::BC3_UNorm_sRGB;
case WGPUTextureFormat_BC4RUnorm: return PixelFormat::BC4_UNorm;
case WGPUTextureFormat_BC4RSnorm: return PixelFormat::BC4_SNorm;
case WGPUTextureFormat_BC5RGUnorm: return PixelFormat::BC5_UNorm;
case WGPUTextureFormat_BC5RGSnorm: return PixelFormat::BC5_SNorm;
case WGPUTextureFormat_BC6HRGBUfloat: return PixelFormat::BC6H_Uf16;
case WGPUTextureFormat_BC6HRGBFloat: return PixelFormat::BC6H_Sf16;
case WGPUTextureFormat_BC7RGBAUnorm: return PixelFormat::BC7_UNorm;
case WGPUTextureFormat_BC7RGBAUnormSrgb: return PixelFormat::BC7_UNorm_sRGB;
case WGPUTextureFormat_ASTC4x4Unorm: return PixelFormat::ASTC_4x4_UNorm;
case WGPUTextureFormat_ASTC4x4UnormSrgb: return PixelFormat::ASTC_4x4_UNorm_sRGB;
case WGPUTextureFormat_ASTC6x6Unorm: return PixelFormat::ASTC_6x6_UNorm;
case WGPUTextureFormat_ASTC6x6UnormSrgb: return PixelFormat::ASTC_6x6_UNorm_sRGB;
case WGPUTextureFormat_ASTC8x8Unorm: return PixelFormat::ASTC_8x8_UNorm;
case WGPUTextureFormat_ASTC8x8UnormSrgb: return PixelFormat::ASTC_8x8_UNorm_sRGB;
case WGPUTextureFormat_ASTC10x10Unorm: return PixelFormat::ASTC_10x10_UNorm;
case WGPUTextureFormat_ASTC10x10UnormSrgb: return PixelFormat::ASTC_10x10_UNorm_sRGB;
default: return PixelFormat::Unknown;
// @formatter:on
}
}
#endif