shader_recompiler: Better handling of geometry shader scenario G (#3064)

This commit is contained in:
TheTurtle
2025-06-09 03:31:51 +03:00
committed by GitHub
parent ae2053c487
commit c20d02dd40
8 changed files with 33 additions and 4 deletions

View File

@@ -67,6 +67,9 @@ CopyShaderData ParseCopyShader(std::span<const u32> code) {
if (last_attr != IR::Attribute::Position0) {
data.num_attrs = static_cast<u32>(last_attr) - static_cast<u32>(IR::Attribute::Param0) + 1;
const auto it = data.attr_map.begin();
const u32 comp_stride = std::next(it)->first - it->first;
data.output_vertices = comp_stride / 64;
}
return data;

View File

@@ -3,8 +3,8 @@
#pragma once
#include <map>
#include <span>
#include <unordered_map>
#include "common/types.h"
#include "shader_recompiler/ir/attribute.h"
@@ -12,8 +12,9 @@
namespace Shader {
struct CopyShaderData {
std::unordered_map<u32, std::pair<Shader::IR::Attribute, u32>> attr_map;
std::map<u32, std::pair<Shader::IR::Attribute, u32>> attr_map;
u32 num_attrs{0};
u32 output_vertices{0};
};
CopyShaderData ParseCopyShader(std::span<const u32> code);

View File

@@ -4,6 +4,7 @@
#pragma once
#include <span>
#include <unordered_map>
#include "shader_recompiler/frontend/instruction.h"
#include "shader_recompiler/info.h"
#include "shader_recompiler/ir/basic_block.h"