summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp22
-rw-r--r--src/video_core/renderer_vulkan/vk_renderpass_cache.h2
2 files changed, 19 insertions, 5 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 8f4de5665..4eafdc14d 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -1252,11 +1252,25 @@ std::size_t RasterizerVulkan::CalculateConstBufferSize(
1252 1252
1253RenderPassParams RasterizerVulkan::GetRenderPassParams(Texceptions texceptions) const { 1253RenderPassParams RasterizerVulkan::GetRenderPassParams(Texceptions texceptions) const {
1254 const auto& regs = system.GPU().Maxwell3D().regs; 1254 const auto& regs = system.GPU().Maxwell3D().regs;
1255 const std::size_t num_attachments = static_cast<std::size_t>(regs.rt_control.count);
1256
1255 RenderPassParams params; 1257 RenderPassParams params;
1256 params.num_color_attachments = static_cast<u8>(regs.rt_control.count); 1258 params.color_formats = {};
1257 std::transform(regs.rt.begin(), regs.rt.end(), params.color_formats.begin(), 1259 std::size_t color_texceptions = 0;
1258 [](const auto& rt) { return static_cast<u8>(rt.format); }); 1260
1259 params.texceptions = static_cast<u8>(texceptions.to_ullong()); 1261 std::size_t index = 0;
1262 for (std::size_t rt = 0; rt < num_attachments; ++rt) {
1263 const auto& rendertarget = regs.rt[rt];
1264 if (rendertarget.Address() == 0 || rendertarget.format == Tegra::RenderTargetFormat::NONE) {
1265 continue;
1266 }
1267 params.color_formats[index] = static_cast<u8>(rendertarget.format);
1268 color_texceptions |= (texceptions[rt] ? 1ULL : 0ULL) << index;
1269 ++index;
1270 }
1271 params.num_color_attachments = static_cast<u8>(index);
1272 params.texceptions = static_cast<u8>(color_texceptions);
1273
1260 params.zeta_format = regs.zeta_enable ? static_cast<u8>(regs.zeta.format) : 0; 1274 params.zeta_format = regs.zeta_enable ? static_cast<u8>(regs.zeta.format) : 0;
1261 params.zeta_texception = texceptions[ZETA_TEXCEPTION_INDEX]; 1275 params.zeta_texception = texceptions[ZETA_TEXCEPTION_INDEX];
1262 return params; 1276 return params;
diff --git a/src/video_core/renderer_vulkan/vk_renderpass_cache.h b/src/video_core/renderer_vulkan/vk_renderpass_cache.h
index 0e988b26b..8b0fec720 100644
--- a/src/video_core/renderer_vulkan/vk_renderpass_cache.h
+++ b/src/video_core/renderer_vulkan/vk_renderpass_cache.h
@@ -19,8 +19,8 @@ namespace Vulkan {
19class VKDevice; 19class VKDevice;
20 20
21struct RenderPassParams { 21struct RenderPassParams {
22 u8 num_color_attachments;
23 std::array<u8, Tegra::Engines::Maxwell3D::Regs::NumRenderTargets> color_formats; 22 std::array<u8, Tegra::Engines::Maxwell3D::Regs::NumRenderTargets> color_formats;
23 u8 num_color_attachments;
24 u8 texceptions; 24 u8 texceptions;
25 25
26 u8 zeta_format; 26 u8 zeta_format;