| // GENERATED FILE - DO NOT EDIT. |
| // Generated by gen_mtl_format_table.py using data from mtl_format_map.json |
| // |
| // Copyright 2019 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Metal Format table: |
| // Conversion from ANGLE format to Metal format. |
| |
| #import <Metal/Metal.h> |
| #include <TargetConditionals.h> |
| |
| #include "libANGLE/renderer/Format.h" |
| #include "libANGLE/renderer/metal/DisplayMtl.h" |
| #include "libANGLE/renderer/metal/mtl_format_utils.h" |
| |
| namespace rx |
| { |
| namespace mtl |
| { |
| |
| void Format::init(const DisplayMtl *display, angle::FormatID intendedFormatId_) |
| { |
| this->intendedFormatId = intendedFormatId_; |
| |
| id<MTLDevice> metalDevice = display->getMetalDevice(); |
| |
| // Actual conversion |
| switch (this->intendedFormatId) |
| { |
| case angle::FormatID::A8_UNORM: |
| this->metalFormat = MTLPixelFormatA8Unorm; |
| this->actualFormatId = angle::FormatID::A8_UNORM; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::B8G8R8A8_UNORM: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatBGRA8Unorm; |
| this->actualFormatId = angle::FormatID::B8G8R8A8_UNORM; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::B8G8R8A8_UNORM: |
| this->metalFormat = MTLPixelFormatBGRA8Unorm; |
| this->actualFormatId = angle::FormatID::B8G8R8A8_UNORM; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::B8G8R8A8_UNORM_SRGB: |
| this->metalFormat = MTLPixelFormatBGRA8Unorm_sRGB; |
| this->actualFormatId = angle::FormatID::B8G8R8A8_UNORM_SRGB; |
| break; |
| |
| case angle::FormatID::D32_FLOAT: |
| this->metalFormat = MTLPixelFormatDepth32Float; |
| this->actualFormatId = angle::FormatID::D32_FLOAT; |
| break; |
| |
| case angle::FormatID::D32_FLOAT_S8X24_UINT: |
| this->metalFormat = MTLPixelFormatDepth32Float_Stencil8; |
| this->actualFormatId = angle::FormatID::D32_FLOAT_S8X24_UINT; |
| break; |
| |
| case angle::FormatID::NONE: |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16G16B16A16_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16G16B16A16_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16G16_FLOAT: |
| this->metalFormat = MTLPixelFormatRG16Float; |
| this->actualFormatId = angle::FormatID::R16G16_FLOAT; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatR16Float; |
| this->actualFormatId = angle::FormatID::R16_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16_FLOAT: |
| this->metalFormat = MTLPixelFormatR16Float; |
| this->actualFormatId = angle::FormatID::R16_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16_UNORM: |
| this->metalFormat = MTLPixelFormatR16Unorm; |
| this->actualFormatId = angle::FormatID::R16_UNORM; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32G32B32A32_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32G32B32A32_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32G32_FLOAT: |
| this->metalFormat = MTLPixelFormatRG32Float; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatR32Float; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32_FLOAT: |
| this->metalFormat = MTLPixelFormatR32Float; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R8G8B8A8_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_UNORM_SRGB: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm_sRGB; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM_SRGB; |
| break; |
| |
| case angle::FormatID::R8G8_UNORM: |
| this->metalFormat = MTLPixelFormatRG8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8_UNORM; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R8_UNORM: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatR8Unorm; |
| this->actualFormatId = angle::FormatID::R8_UNORM; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R8_UNORM: |
| this->metalFormat = MTLPixelFormatR8Unorm; |
| this->actualFormatId = angle::FormatID::R8_UNORM; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::S8_UINT: |
| this->metalFormat = MTLPixelFormatStencil8; |
| this->actualFormatId = angle::FormatID::S8_UINT; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::A16_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::A16_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::A32_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::A32_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::D24_UNORM_X8_UINT: |
| this->metalFormat = MTLPixelFormatDepth32Float; |
| this->actualFormatId = angle::FormatID::D32_FLOAT; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L16A16_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L16A16_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L16_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L16_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L32A32_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L32A32_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L32_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L32_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::L8A8_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| case angle::FormatID::L8_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16G16B16_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R16G16B16_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA16Float; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32G32B32_FLOAT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| break; |
| |
| #else // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R32G32B32_FLOAT: |
| this->metalFormat = MTLPixelFormatRGBA32Float; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::R8G8B8_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| case angle::FormatID::R8G8B8_UNORM_SRGB: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm_sRGB; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM_SRGB; |
| break; |
| |
| #if TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::BC1_RGBA_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatBC1_RGBA; |
| this->actualFormatId = angle::FormatID::BC1_RGBA_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::BC1_RGBA_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatBC1_RGBA_sRGB; |
| this->actualFormatId = angle::FormatID::BC1_RGBA_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::BC1_RGB_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatBC1_RGBA; |
| this->actualFormatId = angle::FormatID::BC1_RGB_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::BC1_RGB_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatBC1_RGBA_sRGB; |
| this->actualFormatId = angle::FormatID::BC1_RGB_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::BC2_RGBA_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatBC2_RGBA; |
| this->actualFormatId = angle::FormatID::BC2_RGBA_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::BC2_RGBA_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatBC2_RGBA_sRGB; |
| this->actualFormatId = angle::FormatID::BC2_RGBA_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::BC3_RGBA_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatBC3_RGBA; |
| this->actualFormatId = angle::FormatID::BC3_RGBA_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::BC3_RGBA_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatBC3_RGBA_sRGB; |
| this->actualFormatId = angle::FormatID::BC3_RGBA_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::D16_UNORM: |
| this->metalFormat = MTLPixelFormatDepth16Unorm; |
| this->actualFormatId = angle::FormatID::D16_UNORM; |
| break; |
| |
| case angle::FormatID::D24_UNORM_S8_UINT: |
| if (metalDevice.depth24Stencil8PixelFormatSupported) |
| { |
| this->metalFormat = MTLPixelFormatDepth24Unorm_Stencil8; |
| this->actualFormatId = angle::FormatID::D24_UNORM_S8_UINT; |
| } |
| else |
| { |
| this->metalFormat = MTLPixelFormatDepth32Float_Stencil8; |
| this->actualFormatId = angle::FormatID::D32_FLOAT_S8X24_UINT; |
| } |
| break; |
| |
| case angle::FormatID::R4G4B4A4_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| case angle::FormatID::R5G5B5A1_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| case angle::FormatID::R5G6B5_UNORM: |
| this->metalFormat = MTLPixelFormatRGBA8Unorm; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| break; |
| |
| #elif TARGET_OS_IOS // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| case angle::FormatID::EAC_R11G11_SNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatEAC_RG11Snorm; |
| this->actualFormatId = angle::FormatID::EAC_R11G11_SNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::EAC_R11G11_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatEAC_R11Unorm; |
| this->actualFormatId = angle::FormatID::EAC_R11G11_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::EAC_R11_SNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatEAC_R11Snorm; |
| this->actualFormatId = angle::FormatID::EAC_R11_SNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::EAC_R11_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatEAC_R11Unorm; |
| this->actualFormatId = angle::FormatID::EAC_R11_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatETC2_RGB8; |
| this->actualFormatId = angle::FormatID::ETC1_R8G8B8_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC2_R8G8B8A1_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatETC2_RGB8A1_sRGB; |
| this->actualFormatId = angle::FormatID::ETC2_R8G8B8A1_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC2_R8G8B8A1_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatETC2_RGB8A1; |
| this->actualFormatId = angle::FormatID::ETC2_R8G8B8A1_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC2_R8G8B8A8_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatEAC_RGBA8_sRGB; |
| this->actualFormatId = angle::FormatID::ETC2_R8G8B8A8_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC2_R8G8B8A8_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatEAC_RGBA8; |
| this->actualFormatId = angle::FormatID::ETC2_R8G8B8A8_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC2_R8G8B8_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatETC2_RGB8_sRGB; |
| this->actualFormatId = angle::FormatID::ETC2_R8G8B8_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatETC2_RGB8; |
| this->actualFormatId = angle::FormatID::ETC2_R8G8B8_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGBA_2BPP; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGBA_2BPP_sRGB; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGBA_2BPP_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGBA_4BPP; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGBA_4BPP_sRGB; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGBA_4BPP_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGB_2BPP_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGB_2BPP; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGB_2BPP_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGB_2BPP_sRGB; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGB_2BPP_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGB_4BPP_UNORM_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGB_4BPP; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGB_4BPP_UNORM_BLOCK; |
| break; |
| |
| case angle::FormatID::PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK: |
| this->metalFormat = MTLPixelFormatPVRTC_RGB_4BPP_sRGB; |
| this->actualFormatId = angle::FormatID::PVRTC1_RGB_4BPP_UNORM_SRGB_BLOCK; |
| break; |
| |
| case angle::FormatID::R4G4B4A4_UNORM: |
| this->metalFormat = MTLPixelFormatABGR4Unorm; |
| this->actualFormatId = angle::FormatID::R4G4B4A4_UNORM; |
| break; |
| |
| case angle::FormatID::R5G5B5A1_UNORM: |
| this->metalFormat = MTLPixelFormatBGR5A1Unorm; |
| this->actualFormatId = angle::FormatID::R5G5B5A1_UNORM; |
| break; |
| |
| case angle::FormatID::R5G6B5_UNORM: |
| this->metalFormat = MTLPixelFormatB5G6R5Unorm; |
| this->actualFormatId = angle::FormatID::R5G6B5_UNORM; |
| break; |
| |
| case angle::FormatID::D16_UNORM: |
| this->metalFormat = MTLPixelFormatDepth32Float; |
| this->actualFormatId = angle::FormatID::D32_FLOAT; |
| break; |
| |
| case angle::FormatID::D24_UNORM_S8_UINT: |
| this->metalFormat = MTLPixelFormatDepth32Float_Stencil8; |
| this->actualFormatId = angle::FormatID::D32_FLOAT_S8X24_UINT; |
| break; |
| |
| #endif // TARGET_OS_OSX || TARGET_OS_MACCATALYST |
| default: |
| this->metalFormat = MTLPixelFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| } |
| } |
| |
| void VertexFormat::init(angle::FormatID angleFormatId, bool tightlyPacked) |
| { |
| this->intendedFormatId = angleFormatId; |
| |
| // Actual conversion |
| switch (this->intendedFormatId) |
| { |
| case angle::FormatID::NONE: |
| this->metalFormat = MTLVertexFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| this->vertexLoadFunction = nullptr; |
| break; |
| |
| case angle::FormatID::R16G16B16A16_SINT: |
| this->metalFormat = MTLVertexFormatShort4; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R16G16B16A16_SNORM: |
| this->metalFormat = MTLVertexFormatShort4Normalized; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R16G16B16A16_SSCALED: |
| this->metalFormat = MTLVertexFormatShort4; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R16G16B16A16_UINT: |
| this->metalFormat = MTLVertexFormatUShort4; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R16G16B16A16_UNORM: |
| this->metalFormat = MTLVertexFormatUShort4Normalized; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R16G16B16A16_USCALED: |
| this->metalFormat = MTLVertexFormatUShort4; |
| this->actualFormatId = angle::FormatID::R16G16B16A16_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R16G16B16_SINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLshort, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatShort3; |
| this->actualFormatId = angle::FormatID::R16G16B16_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16G16B16_SNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLshort, 3, 3, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatShort3Normalized; |
| this->actualFormatId = angle::FormatID::R16G16B16_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16G16B16_SSCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLshort, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatShort3; |
| this->actualFormatId = angle::FormatID::R16G16B16_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16G16B16_UINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLushort, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUShort3; |
| this->actualFormatId = angle::FormatID::R16G16B16_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16G16B16_UNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLushort, 3, 3, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUShort3Normalized; |
| this->actualFormatId = angle::FormatID::R16G16B16_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16G16B16_USCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLushort, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUShort3; |
| this->actualFormatId = angle::FormatID::R16G16B16_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16G16_SINT: |
| this->metalFormat = MTLVertexFormatShort2; |
| this->actualFormatId = angle::FormatID::R16G16_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R16G16_SNORM: |
| this->metalFormat = MTLVertexFormatShort2Normalized; |
| this->actualFormatId = angle::FormatID::R16G16_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R16G16_SSCALED: |
| this->metalFormat = MTLVertexFormatShort2; |
| this->actualFormatId = angle::FormatID::R16G16_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R16G16_UINT: |
| this->metalFormat = MTLVertexFormatUShort2; |
| this->actualFormatId = angle::FormatID::R16G16_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R16G16_UNORM: |
| this->metalFormat = MTLVertexFormatUShort2Normalized; |
| this->actualFormatId = angle::FormatID::R16G16_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R16G16_USCALED: |
| this->metalFormat = MTLVertexFormatUShort2; |
| this->actualFormatId = angle::FormatID::R16G16_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R16_SINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLshort, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatShort; |
| this->actualFormatId = angle::FormatID::R16_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16_SNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLshort, 1, 1, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatShortNormalized; |
| this->actualFormatId = angle::FormatID::R16_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16_SSCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLshort, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatShort; |
| this->actualFormatId = angle::FormatID::R16_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLshort, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16_UINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLushort, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUShort; |
| this->actualFormatId = angle::FormatID::R16_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16_UNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLushort, 1, 1, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUShortNormalized; |
| this->actualFormatId = angle::FormatID::R16_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R16_USCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLushort, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUShort; |
| this->actualFormatId = angle::FormatID::R16_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLushort, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R32G32B32A32_FLOAT: |
| this->metalFormat = MTLVertexFormatFloat4; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLfloat, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R32G32B32_FLOAT: |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLfloat, 3, 3, 0>; |
| break; |
| |
| case angle::FormatID::R32G32_FLOAT: |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLfloat, 2, 2, 0>; |
| break; |
| |
| case angle::FormatID::R32_FLOAT: |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLfloat, 1, 1, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_SINT: |
| this->metalFormat = MTLVertexFormatChar4; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_SNORM: |
| this->metalFormat = MTLVertexFormatChar4Normalized; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_SSCALED: |
| this->metalFormat = MTLVertexFormatChar4; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_UINT: |
| this->metalFormat = MTLVertexFormatUChar4; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_UNORM: |
| this->metalFormat = MTLVertexFormatUChar4Normalized; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8A8_USCALED: |
| this->metalFormat = MTLVertexFormatUChar4; |
| this->actualFormatId = angle::FormatID::R8G8B8A8_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 4, 4, 0>; |
| break; |
| |
| case angle::FormatID::R8G8B8_SINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar3; |
| this->actualFormatId = angle::FormatID::R8G8B8_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8B8_SNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 3, 3, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar3Normalized; |
| this->actualFormatId = angle::FormatID::R8G8B8_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8B8_SSCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar3; |
| this->actualFormatId = angle::FormatID::R8G8B8_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8B8_UINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar3; |
| this->actualFormatId = angle::FormatID::R8G8B8_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8B8_UNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 3, 3, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar3Normalized; |
| this->actualFormatId = angle::FormatID::R8G8B8_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8B8_USCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 3, 3, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar3; |
| this->actualFormatId = angle::FormatID::R8G8B8_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 3, 3, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8_SINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 2, 2, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar2; |
| this->actualFormatId = angle::FormatID::R8G8_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 2, 2, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8_SNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 2, 2, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar2Normalized; |
| this->actualFormatId = angle::FormatID::R8G8_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 2, 2, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8_SSCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 2, 2, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar2; |
| this->actualFormatId = angle::FormatID::R8G8_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 2, 2, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8_UINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 2, 2, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar2; |
| this->actualFormatId = angle::FormatID::R8G8_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 2, 2, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8_UNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 2, 2, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar2Normalized; |
| this->actualFormatId = angle::FormatID::R8G8_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 2, 2, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8G8_USCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 2, 2, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar2; |
| this->actualFormatId = angle::FormatID::R8G8_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 2, 2, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8_SINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar; |
| this->actualFormatId = angle::FormatID::R8_SINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8_SNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 1, 1, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatCharNormalized; |
| this->actualFormatId = angle::FormatID::R8_SNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8_SSCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLbyte, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatChar; |
| this->actualFormatId = angle::FormatID::R8_SSCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLbyte, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8_UINT: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar; |
| this->actualFormatId = angle::FormatID::R8_UINT; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8_UNORM: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 1, 1, true>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUCharNormalized; |
| this->actualFormatId = angle::FormatID::R8_UNORM; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R8_USCALED: |
| if (tightlyPacked) |
| { |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = CopyTo32FVertexData<GLubyte, 1, 1, false>; |
| } |
| else |
| { |
| this->metalFormat = MTLVertexFormatUChar; |
| this->actualFormatId = angle::FormatID::R8_USCALED; |
| this->vertexLoadFunction = CopyNativeVertexData<GLubyte, 1, 1, 0>; |
| } |
| break; |
| |
| case angle::FormatID::R32G32B32A32_FIXED: |
| this->metalFormat = MTLVertexFormatFloat4; |
| this->actualFormatId = angle::FormatID::R32G32B32A32_FLOAT; |
| this->vertexLoadFunction = Copy32FixedTo32FVertexData<4, 4>; |
| break; |
| |
| case angle::FormatID::R32G32B32_FIXED: |
| this->metalFormat = MTLVertexFormatFloat3; |
| this->actualFormatId = angle::FormatID::R32G32B32_FLOAT; |
| this->vertexLoadFunction = Copy32FixedTo32FVertexData<3, 3>; |
| break; |
| |
| case angle::FormatID::R32G32_FIXED: |
| this->metalFormat = MTLVertexFormatFloat2; |
| this->actualFormatId = angle::FormatID::R32G32_FLOAT; |
| this->vertexLoadFunction = Copy32FixedTo32FVertexData<2, 2>; |
| break; |
| |
| case angle::FormatID::R32_FIXED: |
| this->metalFormat = MTLVertexFormatFloat; |
| this->actualFormatId = angle::FormatID::R32_FLOAT; |
| this->vertexLoadFunction = Copy32FixedTo32FVertexData<1, 1>; |
| break; |
| |
| default: |
| this->metalFormat = MTLVertexFormatInvalid; |
| this->actualFormatId = angle::FormatID::NONE; |
| this->vertexLoadFunction = nullptr; |
| } |
| } |
| |
| } // namespace mtl |
| } // namespace rx |