// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include #if QT_CONFIG(opengl) #include #endif #include "commonutils_p.h" #include QT_BEGIN_NAMESPACE static qreal s_maxTextureSize = 0.; qreal CommonUtils::maxTextureSize() { // Query maximum texture size only once if (!s_maxTextureSize) { std::unique_ptr rhi; #if defined(Q_OS_WIN) QRhiD3D12InitParams params; rhi.reset(QRhi::create(QRhi::D3D12, ¶ms)); #elif defined(Q_OS_MACOS) || defined(Q_OS_IOS) QRhiMetalInitParams params; rhi.reset(QRhi::create(QRhi::Metal, ¶ms)); #elif QT_CONFIG(opengl) QRhiGles2InitParams params; params.fallbackSurface = QRhiGles2InitParams::newFallbackSurface(); rhi.reset(QRhi::create(QRhi::OpenGLES2, ¶ms)); #elif QT_CONFIG(vulkan) if (!qEnvironmentVariable("QSG_RHI_BACKEND").compare("vulkan")) { QVulkanInstance inst; inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions()); if (inst.create()) { QRhiVulkanInitParams params; params.inst = &inst; rhi.reset(QRhi::create(QRhi::Vulkan, ¶ms)); } else { qWarning("Failed to create Vulkan instance"); } } #endif if (rhi) s_maxTextureSize = qreal(rhi->resourceLimit(QRhi::TextureSizeMax)); else s_maxTextureSize = gradientTextureWidth; } return s_maxTextureSize; } QT_END_NAMESPACE