diff options
Diffstat (limited to 'src/quick/scenegraph/qsgrhisupport_mac.mm')
-rw-r--r-- | src/quick/scenegraph/qsgrhisupport_mac.mm | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgrhisupport_mac.mm b/src/quick/scenegraph/qsgrhisupport_mac.mm new file mode 100644 index 0000000000..1d882ab3e5 --- /dev/null +++ b/src/quick/scenegraph/qsgrhisupport_mac.mm @@ -0,0 +1,228 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#include "qsgrhisupport_p.h" + +#include <Metal/MTLPixelFormat.h> + +QT_BEGIN_NAMESPACE + +namespace QSGRhiSupportMac { + +QRhiTexture::Format toRhiTextureFormatFromMetal(uint format, QRhiTexture::Flags *flags) +{ + auto rhiFormat = QRhiTexture::UnknownFormat; + bool sRGB = false; + switch (format) { + case MTLPixelFormatRGBA8Unorm_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatRGBA8Unorm: + case MTLPixelFormatInvalid: + rhiFormat = QRhiTexture::RGBA8; + break; + case MTLPixelFormatBGRA8Unorm_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatBGRA8Unorm: + rhiFormat = QRhiTexture::BGRA8; + break; +#ifndef Q_OS_MACOS + case MTLPixelFormatR8Unorm_sRGB: + sRGB = true; + Q_FALLTHROUGH(); +#endif + case MTLPixelFormatR8Unorm: + rhiFormat = QRhiTexture::R8; + break; +#ifndef Q_OS_MACOS + case MTLPixelFormatRG8Unorm_sRGB: + sRGB = true; + Q_FALLTHROUGH(); +#endif + case MTLPixelFormatRG8Unorm: + rhiFormat = QRhiTexture::RG8; + break; + case MTLPixelFormatR16Unorm: + rhiFormat = QRhiTexture::R16; + break; + case MTLPixelFormatRG16Unorm: + rhiFormat = QRhiTexture::RG16; + break; + case MTLPixelFormatRGBA16Float: + rhiFormat = QRhiTexture::RGBA16F; + break; + case MTLPixelFormatRGBA32Float: + rhiFormat = QRhiTexture::RGBA32F; + break; + case MTLPixelFormatR16Float: + rhiFormat = QRhiTexture::R16F; + break; + case MTLPixelFormatR32Float: + rhiFormat = QRhiTexture::R32F; + break; + case MTLPixelFormatRGB10A2Unorm: + rhiFormat = QRhiTexture::RGB10A2; + break; +#ifdef Q_OS_MACOS + case MTLPixelFormatDepth16Unorm: + rhiFormat = QRhiTexture::D16; + break; + case MTLPixelFormatDepth24Unorm_Stencil8: + rhiFormat = QRhiTexture::D24S8; + break; +#endif + case MTLPixelFormatDepth32Float_Stencil8: + rhiFormat = QRhiTexture::D24S8; + break; + case MTLPixelFormatDepth32Float: + rhiFormat = QRhiTexture::D32F; + break; +#ifdef Q_OS_MACOS + case MTLPixelFormatBC1_RGBA_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatBC1_RGBA: + rhiFormat = QRhiTexture::BC1; + break; + case MTLPixelFormatBC2_RGBA_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatBC2_RGBA: + rhiFormat = QRhiTexture::BC2; + break; + case MTLPixelFormatBC3_RGBA_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatBC3_RGBA: + rhiFormat = QRhiTexture::BC3; + break; + case MTLPixelFormatBC4_RUnorm: + rhiFormat = QRhiTexture::BC4; + break; + case MTLPixelFormatBC6H_RGBUfloat: + rhiFormat = QRhiTexture::BC6H; + break; + case MTLPixelFormatBC7_RGBAUnorm_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatBC7_RGBAUnorm: + rhiFormat = QRhiTexture::BC7; + break; +#endif +#ifndef Q_OS_MACOS + case MTLPixelFormatETC2_RGB8_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatETC2_RGB8: + rhiFormat = QRhiTexture::ETC2_RGB8; + break; + case MTLPixelFormatETC2_RGB8A1_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatETC2_RGB8A1: + rhiFormat = QRhiTexture::ETC2_RGB8A1; + break; + case MTLPixelFormatEAC_RGBA8_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatEAC_RGBA8: + rhiFormat = QRhiTexture::ETC2_RGBA8; + break; + case MTLPixelFormatASTC_4x4_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_4x4_LDR: + rhiFormat = QRhiTexture::ASTC_4x4; + break; + case MTLPixelFormatASTC_5x4_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_5x4_LDR: + rhiFormat = QRhiTexture::ASTC_5x4; + break; + case MTLPixelFormatASTC_5x5_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_5x5_LDR: + rhiFormat = QRhiTexture::ASTC_5x5; + break; + case MTLPixelFormatASTC_6x5_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_6x5_LDR: + rhiFormat = QRhiTexture::ASTC_6x5; + break; + case MTLPixelFormatASTC_6x6_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_6x6_LDR: + rhiFormat = QRhiTexture::ASTC_6x6; + break; + case MTLPixelFormatASTC_8x5_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_8x5_LDR: + rhiFormat = QRhiTexture::ASTC_8x5; + break; + case MTLPixelFormatASTC_8x6_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_8x6_LDR: + rhiFormat = QRhiTexture::ASTC_8x6; + break; + case MTLPixelFormatASTC_8x8_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_8x8_LDR: + rhiFormat = QRhiTexture::ASTC_8x8; + break; + case MTLPixelFormatASTC_10x5_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_10x5_LDR: + rhiFormat = QRhiTexture::ASTC_10x5; + break; + case MTLPixelFormatASTC_10x6_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_10x6_LDR: + rhiFormat = QRhiTexture::ASTC_10x6; + break; + case MTLPixelFormatASTC_10x8_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_10x8_LDR: + rhiFormat = QRhiTexture::ASTC_10x8; + break; + case MTLPixelFormatASTC_10x10_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_10x10_LDR: + rhiFormat = QRhiTexture::ASTC_10x10; + break; + case MTLPixelFormatASTC_12x10_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_12x10_LDR: + rhiFormat = QRhiTexture::ASTC_12x10; + break; + case MTLPixelFormatASTC_12x12_sRGB: + sRGB = true; + Q_FALLTHROUGH(); + case MTLPixelFormatASTC_12x12_LDR: + rhiFormat = QRhiTexture::ASTC_12x12; + break; +#endif + default: + qWarning("MTLPixelFormat %d is not supported", format); + break; + } + if (sRGB) + (*flags) |=(QRhiTexture::sRGB); + return rhiFormat; +} + +} + +QT_END_NAMESPACE |