| /* |
| * Copyright (C) 2021 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #pragma once |
| |
| #include <cstdint> |
| #include <pal/graphics/WebGPU/WebGPUTextureFormat.h> |
| |
| namespace WebCore { |
| |
| enum class GPUTextureFormat : uint8_t { |
| // 8-bit formats |
| R8unorm, |
| R8snorm, |
| R8uint, |
| R8sint, |
| |
| // 16-bit formats |
| R16uint, |
| R16sint, |
| R16float, |
| Rg8unorm, |
| Rg8snorm, |
| Rg8uint, |
| Rg8sint, |
| |
| // 32-bit formats |
| R32uint, |
| R32sint, |
| R32float, |
| Rg16uint, |
| Rg16sint, |
| Rg16float, |
| Rgba8unorm, |
| Rgba8unormSRGB, |
| Rgba8snorm, |
| Rgba8uint, |
| Rgba8sint, |
| Bgra8unorm, |
| Bgra8unormSRGB, |
| // Packed 32-bit formats |
| Rgb9e5ufloat, |
| Rgb10a2unorm, |
| Rg11b10ufloat, |
| |
| // 64-bit formats |
| Rg32uint, |
| Rg32sint, |
| Rg32float, |
| Rgba16uint, |
| Rgba16sint, |
| Rgba16float, |
| |
| // 128-bit formats |
| Rgba32uint, |
| Rgba32sint, |
| Rgba32float, |
| |
| // Depth and stencil formats |
| Stencil8, |
| Depth16unorm, |
| Depth24plus, |
| Depth24plusStencil8, |
| Depth32float, |
| |
| // BC compressed formats usable if texture-compression-bc is both |
| // supported by the device/user agent and enabled in requestDevice. |
| Bc1RgbaUnorm, |
| Bc1RgbaUnormSRGB, |
| Bc2RgbaUnorm, |
| Bc2RgbaUnormSRGB, |
| Bc3RgbaUnorm, |
| Bc3RgbaUnormSRGB, |
| Bc4RUnorm, |
| Bc4RSnorm, |
| Bc5RgUnorm, |
| Bc5RgSnorm, |
| Bc6hRgbUfloat, |
| Bc6hRgbFloat, |
| Bc7RgbaUnorm, |
| Bc7RgbaUnormSRGB, |
| |
| // ETC2 compressed formats usable if texture-compression-etc2 is both |
| // supported by the device/user agent and enabled in requestDevice. |
| Etc2Rgb8unorm, |
| Etc2Rgb8unormSRGB, |
| Etc2Rgb8a1unorm, |
| Etc2Rgb8a1unormSRGB, |
| Etc2Rgba8unorm, |
| Etc2Rgba8unormSRGB, |
| EacR11unorm, |
| EacR11snorm, |
| EacRg11unorm, |
| EacRg11snorm, |
| |
| // ASTC compressed formats usable if texture-compression-astc is both |
| // supported by the device/user agent and enabled in requestDevice. |
| Astc4x4Unorm, |
| Astc4x4UnormSRGB, |
| Astc5x4Unorm, |
| Astc5x4UnormSRGB, |
| Astc5x5Unorm, |
| Astc5x5UnormSRGB, |
| Astc6x5Unorm, |
| Astc6x5UnormSRGB, |
| Astc6x6Unorm, |
| Astc6x6UnormSRGB, |
| Astc8x5Unorm, |
| Astc8x5UnormSRGB, |
| Astc8x6Unorm, |
| Astc8x6UnormSRGB, |
| Astc8x8Unorm, |
| Astc8x8UnormSRGB, |
| Astc10x5Unorm, |
| Astc10x5UnormSRGB, |
| Astc10x6Unorm, |
| Astc10x6UnormSRGB, |
| Astc10x8Unorm, |
| Astc10x8UnormSRGB, |
| Astc10x10Unorm, |
| Astc10x10UnormSRGB, |
| Astc12x10Unorm, |
| Astc12x10UnormSRGB, |
| Astc12x12Unorm, |
| Astc12x12UnormSRGB, |
| |
| // depth24unorm-stencil8 feature |
| Depth24unormStencil8, |
| |
| // depth32float-stencil8 feature |
| Depth32floatStencil8, |
| }; |
| |
| inline PAL::WebGPU::TextureFormat convertToBacking(GPUTextureFormat textureFormat) |
| { |
| switch (textureFormat) { |
| case GPUTextureFormat::R8unorm: |
| return PAL::WebGPU::TextureFormat::R8unorm; |
| case GPUTextureFormat::R8snorm: |
| return PAL::WebGPU::TextureFormat::R8snorm; |
| case GPUTextureFormat::R8uint: |
| return PAL::WebGPU::TextureFormat::R8uint; |
| case GPUTextureFormat::R8sint: |
| return PAL::WebGPU::TextureFormat::R8sint; |
| case GPUTextureFormat::R16uint: |
| return PAL::WebGPU::TextureFormat::R16uint; |
| case GPUTextureFormat::R16sint: |
| return PAL::WebGPU::TextureFormat::R16sint; |
| case GPUTextureFormat::R16float: |
| return PAL::WebGPU::TextureFormat::R16float; |
| case GPUTextureFormat::Rg8unorm: |
| return PAL::WebGPU::TextureFormat::Rg8unorm; |
| case GPUTextureFormat::Rg8snorm: |
| return PAL::WebGPU::TextureFormat::Rg8snorm; |
| case GPUTextureFormat::Rg8uint: |
| return PAL::WebGPU::TextureFormat::Rg8uint; |
| case GPUTextureFormat::Rg8sint: |
| return PAL::WebGPU::TextureFormat::Rg8sint; |
| case GPUTextureFormat::R32uint: |
| return PAL::WebGPU::TextureFormat::R32uint; |
| case GPUTextureFormat::R32sint: |
| return PAL::WebGPU::TextureFormat::R32sint; |
| case GPUTextureFormat::R32float: |
| return PAL::WebGPU::TextureFormat::R32float; |
| case GPUTextureFormat::Rg16uint: |
| return PAL::WebGPU::TextureFormat::Rg16uint; |
| case GPUTextureFormat::Rg16sint: |
| return PAL::WebGPU::TextureFormat::Rg16sint; |
| case GPUTextureFormat::Rg16float: |
| return PAL::WebGPU::TextureFormat::Rg16float; |
| case GPUTextureFormat::Rgba8unorm: |
| return PAL::WebGPU::TextureFormat::Rgba8unorm; |
| case GPUTextureFormat::Rgba8unormSRGB: |
| return PAL::WebGPU::TextureFormat::Rgba8unormSRGB; |
| case GPUTextureFormat::Rgba8snorm: |
| return PAL::WebGPU::TextureFormat::Rgba8snorm; |
| case GPUTextureFormat::Rgba8uint: |
| return PAL::WebGPU::TextureFormat::Rgba8uint; |
| case GPUTextureFormat::Rgba8sint: |
| return PAL::WebGPU::TextureFormat::Rgba8sint; |
| case GPUTextureFormat::Bgra8unorm: |
| return PAL::WebGPU::TextureFormat::Bgra8unorm; |
| case GPUTextureFormat::Bgra8unormSRGB: |
| return PAL::WebGPU::TextureFormat::Bgra8unormSRGB; |
| case GPUTextureFormat::Rgb9e5ufloat: |
| return PAL::WebGPU::TextureFormat::Rgb9e5ufloat; |
| case GPUTextureFormat::Rgb10a2unorm: |
| return PAL::WebGPU::TextureFormat::Rgb10a2unorm; |
| case GPUTextureFormat::Rg11b10ufloat: |
| return PAL::WebGPU::TextureFormat::Rg11b10ufloat; |
| case GPUTextureFormat::Rg32uint: |
| return PAL::WebGPU::TextureFormat::Rg32uint; |
| case GPUTextureFormat::Rg32sint: |
| return PAL::WebGPU::TextureFormat::Rg32sint; |
| case GPUTextureFormat::Rg32float: |
| return PAL::WebGPU::TextureFormat::Rg32float; |
| case GPUTextureFormat::Rgba16uint: |
| return PAL::WebGPU::TextureFormat::Rgba16uint; |
| case GPUTextureFormat::Rgba16sint: |
| return PAL::WebGPU::TextureFormat::Rgba16sint; |
| case GPUTextureFormat::Rgba16float: |
| return PAL::WebGPU::TextureFormat::Rgba16float; |
| case GPUTextureFormat::Rgba32uint: |
| return PAL::WebGPU::TextureFormat::Rgba32uint; |
| case GPUTextureFormat::Rgba32sint: |
| return PAL::WebGPU::TextureFormat::Rgba32sint; |
| case GPUTextureFormat::Rgba32float: |
| return PAL::WebGPU::TextureFormat::Rgba32float; |
| case GPUTextureFormat::Stencil8: |
| return PAL::WebGPU::TextureFormat::Stencil8; |
| case GPUTextureFormat::Depth16unorm: |
| return PAL::WebGPU::TextureFormat::Depth16unorm; |
| case GPUTextureFormat::Depth24plus: |
| return PAL::WebGPU::TextureFormat::Depth24plus; |
| case GPUTextureFormat::Depth24plusStencil8: |
| return PAL::WebGPU::TextureFormat::Depth24plusStencil8; |
| case GPUTextureFormat::Depth32float: |
| return PAL::WebGPU::TextureFormat::Depth32float; |
| case GPUTextureFormat::Bc1RgbaUnorm: |
| return PAL::WebGPU::TextureFormat::Bc1RgbaUnorm; |
| case GPUTextureFormat::Bc1RgbaUnormSRGB: |
| return PAL::WebGPU::TextureFormat::Bc1RgbaUnormSRGB; |
| case GPUTextureFormat::Bc2RgbaUnorm: |
| return PAL::WebGPU::TextureFormat::Bc2RgbaUnorm; |
| case GPUTextureFormat::Bc2RgbaUnormSRGB: |
| return PAL::WebGPU::TextureFormat::Bc2RgbaUnormSRGB; |
| case GPUTextureFormat::Bc3RgbaUnorm: |
| return PAL::WebGPU::TextureFormat::Bc3RgbaUnorm; |
| case GPUTextureFormat::Bc3RgbaUnormSRGB: |
| return PAL::WebGPU::TextureFormat::Bc3RgbaUnormSRGB; |
| case GPUTextureFormat::Bc4RUnorm: |
| return PAL::WebGPU::TextureFormat::Bc4RUnorm; |
| case GPUTextureFormat::Bc4RSnorm: |
| return PAL::WebGPU::TextureFormat::Bc4RSnorm; |
| case GPUTextureFormat::Bc5RgUnorm: |
| return PAL::WebGPU::TextureFormat::Bc5RgUnorm; |
| case GPUTextureFormat::Bc5RgSnorm: |
| return PAL::WebGPU::TextureFormat::Bc5RgSnorm; |
| case GPUTextureFormat::Bc6hRgbUfloat: |
| return PAL::WebGPU::TextureFormat::Bc6hRgbUfloat; |
| case GPUTextureFormat::Bc6hRgbFloat: |
| return PAL::WebGPU::TextureFormat::Bc6hRgbFloat; |
| case GPUTextureFormat::Bc7RgbaUnorm: |
| return PAL::WebGPU::TextureFormat::Bc7RgbaUnorm; |
| case GPUTextureFormat::Bc7RgbaUnormSRGB: |
| return PAL::WebGPU::TextureFormat::Bc7RgbaUnormSRGB; |
| case GPUTextureFormat::Etc2Rgb8unorm: |
| return PAL::WebGPU::TextureFormat::Etc2Rgb8unorm; |
| case GPUTextureFormat::Etc2Rgb8unormSRGB: |
| return PAL::WebGPU::TextureFormat::Etc2Rgb8unormSRGB; |
| case GPUTextureFormat::Etc2Rgb8a1unorm: |
| return PAL::WebGPU::TextureFormat::Etc2Rgb8a1unorm; |
| case GPUTextureFormat::Etc2Rgb8a1unormSRGB: |
| return PAL::WebGPU::TextureFormat::Etc2Rgb8a1unormSRGB; |
| case GPUTextureFormat::Etc2Rgba8unorm: |
| return PAL::WebGPU::TextureFormat::Etc2Rgba8unorm; |
| case GPUTextureFormat::Etc2Rgba8unormSRGB: |
| return PAL::WebGPU::TextureFormat::Etc2Rgba8unormSRGB; |
| case GPUTextureFormat::EacR11unorm: |
| return PAL::WebGPU::TextureFormat::EacR11unorm; |
| case GPUTextureFormat::EacR11snorm: |
| return PAL::WebGPU::TextureFormat::EacR11snorm; |
| case GPUTextureFormat::EacRg11unorm: |
| return PAL::WebGPU::TextureFormat::EacRg11unorm; |
| case GPUTextureFormat::EacRg11snorm: |
| return PAL::WebGPU::TextureFormat::EacRg11snorm; |
| case GPUTextureFormat::Astc4x4Unorm: |
| return PAL::WebGPU::TextureFormat::Astc4x4Unorm; |
| case GPUTextureFormat::Astc4x4UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc4x4UnormSRGB; |
| case GPUTextureFormat::Astc5x4Unorm: |
| return PAL::WebGPU::TextureFormat::Astc5x4Unorm; |
| case GPUTextureFormat::Astc5x4UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc5x4UnormSRGB; |
| case GPUTextureFormat::Astc5x5Unorm: |
| return PAL::WebGPU::TextureFormat::Astc5x5Unorm; |
| case GPUTextureFormat::Astc5x5UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc5x5UnormSRGB; |
| case GPUTextureFormat::Astc6x5Unorm: |
| return PAL::WebGPU::TextureFormat::Astc6x5Unorm; |
| case GPUTextureFormat::Astc6x5UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc6x5UnormSRGB; |
| case GPUTextureFormat::Astc6x6Unorm: |
| return PAL::WebGPU::TextureFormat::Astc6x6Unorm; |
| case GPUTextureFormat::Astc6x6UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc6x6UnormSRGB; |
| case GPUTextureFormat::Astc8x5Unorm: |
| return PAL::WebGPU::TextureFormat::Astc8x5Unorm; |
| case GPUTextureFormat::Astc8x5UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc8x5UnormSRGB; |
| case GPUTextureFormat::Astc8x6Unorm: |
| return PAL::WebGPU::TextureFormat::Astc8x6Unorm; |
| case GPUTextureFormat::Astc8x6UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc8x6UnormSRGB; |
| case GPUTextureFormat::Astc8x8Unorm: |
| return PAL::WebGPU::TextureFormat::Astc8x8Unorm; |
| case GPUTextureFormat::Astc8x8UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc8x8UnormSRGB; |
| case GPUTextureFormat::Astc10x5Unorm: |
| return PAL::WebGPU::TextureFormat::Astc10x5Unorm; |
| case GPUTextureFormat::Astc10x5UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc10x5UnormSRGB; |
| case GPUTextureFormat::Astc10x6Unorm: |
| return PAL::WebGPU::TextureFormat::Astc10x6Unorm; |
| case GPUTextureFormat::Astc10x6UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc10x6UnormSRGB; |
| case GPUTextureFormat::Astc10x8Unorm: |
| return PAL::WebGPU::TextureFormat::Astc10x8Unorm; |
| case GPUTextureFormat::Astc10x8UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc10x8UnormSRGB; |
| case GPUTextureFormat::Astc10x10Unorm: |
| return PAL::WebGPU::TextureFormat::Astc10x10Unorm; |
| case GPUTextureFormat::Astc10x10UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc10x10UnormSRGB; |
| case GPUTextureFormat::Astc12x10Unorm: |
| return PAL::WebGPU::TextureFormat::Astc12x10Unorm; |
| case GPUTextureFormat::Astc12x10UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc12x10UnormSRGB; |
| case GPUTextureFormat::Astc12x12Unorm: |
| return PAL::WebGPU::TextureFormat::Astc12x12Unorm; |
| case GPUTextureFormat::Astc12x12UnormSRGB: |
| return PAL::WebGPU::TextureFormat::Astc12x12UnormSRGB; |
| case GPUTextureFormat::Depth24unormStencil8: |
| return PAL::WebGPU::TextureFormat::Depth24unormStencil8; |
| case GPUTextureFormat::Depth32floatStencil8: |
| return PAL::WebGPU::TextureFormat::Depth32floatStencil8; |
| } |
| RELEASE_ASSERT_NOT_REACHED(); |
| } |
| |
| } |