From 01debb0da7869ee6907ba4beb31aee89f5037167 Mon Sep 17 00:00:00 2001 From: chrelliott978 Date: Wed, 7 Jan 2026 01:18:56 +0100 Subject: [PATCH] Update src/video_core/renderer_vulkan/vk_pipeline_cache.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converts key.state.color_formats[i] (Tegra GPU format) → PixelFormat → VkFormat (mac fix) --- .../renderer_vulkan/vk_pipeline_cache.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 8c4a430e63..3fee39480f 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -674,7 +674,24 @@ std::unique_ptr PipelineCache::CreateGraphicsPipeline( const size_t stage_index{index - 1}; infos[stage_index] = &program.info; - const auto runtime_info{MakeRuntimeInfo(programs, key, program, previous_stage)}; +auto runtime_info{MakeRuntimeInfo(programs, key, program, previous_stage)}; + +#ifdef __APPLE__ +// MoltenVK: Populate color attachment formats for integer RT handling +if (program.stage == Shader::Stage::Fragment) { + for (size_t i = 0; i < 8; ++i) { + if (key.state.color_formats[i] != 0) { + const auto rt_format = static_cast(key.state.color_formats[i]); + const auto pixel_format = VideoCore::Surface::PixelFormatFromRenderTargetFormat(rt_format); + if (pixel_format != VideoCore::Surface::PixelFormat::Invalid) { + const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, false, pixel_format); + runtime_info.color_formats[i] = format_info.format; + } + } + } +} +#endif + ConvertLegacyToGeneric(program, runtime_info); const std::vector code{EmitSPIRV(profile, runtime_info, program, binding, this->optimize_spirv_output)}; device.SaveShader(code);