diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/PipelineFactory.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/PipelineFactory.cpp index 967e64aa..02056ad9 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/PipelineFactory.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/PipelineFactory.cpp @@ -13,6 +13,11 @@ namespace MobileGL::MG_Backend::DirectVulkan { m_device(device), m_config(config) { MOBILEGL_ASSERT(m_device != VK_NULL_HANDLE, "PipelineFactory: device is null"); + if (m_config.DisablePipelineCache) { + MGLOG_I("DirectVulkan: pipeline cache disabled"); + return; + } + VkPipelineCacheCreateInfo pipelineCacheInfo{VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO}; VK_VERIFY(vkCreatePipelineCache(m_device, &pipelineCacheInfo, nullptr, &m_pipelineCache), "vkCreatePipelineCache"); diff --git a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp index 81649b38..489780da 100644 --- a/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp +++ b/MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp @@ -26,6 +26,10 @@ #include namespace MobileGL::MG_Backend::DirectVulkan { + static Bool IsPowerVRDevice(const VkPhysicalDeviceProperties& properties) { + return std::strstr(properties.deviceName, "PowerVR") != nullptr; + } + static VkPipelineColorBlendAttachmentState MakeColorBlendAttachmentState( Bool blendEnable, VkBlendFactor srcColorBlendFactor, @@ -1762,6 +1766,11 @@ void main() { const Uint32 maxProgramBindings = ComputeMaxProgramBindings(m_physicalDevice.properties); MGLOG_I("DirectVulkan: using %u program descriptor bindings", maxProgramBindings); + if (IsPowerVRDevice(m_physicalDevice.properties)) { + m_config.DisablePipelineCache = true; + MGLOG_W("DirectVulkan: disabling pipeline cache on PowerVR device %s", + m_physicalDevice.properties.deviceName); + } RecreateSwapchain(); diff --git a/MobileGL/MG_Backend/DirectVulkan/VulkanRendererConfig.h b/MobileGL/MG_Backend/DirectVulkan/VulkanRendererConfig.h index e3678a7a..8353a9c5 100644 --- a/MobileGL/MG_Backend/DirectVulkan/VulkanRendererConfig.h +++ b/MobileGL/MG_Backend/DirectVulkan/VulkanRendererConfig.h @@ -17,6 +17,7 @@ namespace MobileGL::MG_Backend::DirectVulkan { Uint64 CacheVersion = MG_Config::CacheVersion; Uint32 SurfaceWidth = 1; Uint32 SurfaceHeight = 1; + Bool DisablePipelineCache = false; #if MOBILEGL_LOG_ACTIVE_LEVEL <= MOBILEGL_LOG_LEVEL_DEBUG Bool EnableValidationLayers = true; #else