mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-27 21:36:54 +01:00
53 lines
2.5 KiB
C++
53 lines
2.5 KiB
C++
#ifndef EMULATOR_INCLUDE_EMULATOR_GRAPHICS_SHADER_RECOMPILER_SRTWALKER_H_
|
|
#define EMULATOR_INCLUDE_EMULATOR_GRAPHICS_SHADER_RECOMPILER_SRTWALKER_H_
|
|
|
|
#include "graphics/shader/recompiler/ir/ShaderIR.h"
|
|
|
|
#include <span>
|
|
|
|
namespace Libs::Graphics::ShaderRecompiler::IR {
|
|
|
|
class Value;
|
|
|
|
using SrtMemoryReader = bool (*)(void* userdata, uint64_t address, uint32_t* value);
|
|
|
|
struct SrtRuntime {
|
|
std::span<const uint32_t> user_data;
|
|
uint64_t shader_base = 0;
|
|
SrtMemoryReader read_memory = nullptr;
|
|
void* userdata = nullptr;
|
|
SrtMemoryReader read_specialization_memory = nullptr;
|
|
};
|
|
|
|
enum class RuntimeValueType { Any, Integer };
|
|
|
|
// Collects reachable ReadConst values. Immediate offsets receive compact flat-buffer slots;
|
|
// dynamic offsets remain explicit and are never assigned a fake slot.
|
|
void BuildSrtPlan(Program& program);
|
|
bool ValidateRuntimeValue(const ResourcePlan& program, Value value,
|
|
RuntimeValueType type = RuntimeValueType::Any);
|
|
bool EvaluateUniformValues(const ResourcePlan& program, std::span<const Value> values,
|
|
const SrtRuntime& runtime, std::span<uint32_t> results);
|
|
|
|
bool EvaluateDescriptorSource(const ResourcePlan& program, uint32_t source,
|
|
const SrtRuntime& runtime, DescriptorValue& result);
|
|
|
|
// Evaluates one runtime snapshot transactionally. Scalar values and ReadConst results shared by
|
|
// several descriptors are memoized once across the batch.
|
|
bool EvaluateDescriptorSources(const ResourcePlan& program, std::span<const uint32_t> sources,
|
|
const SrtRuntime& runtime, std::vector<DescriptorValue>& results);
|
|
|
|
// Evaluates potentially reachable descriptor sources and the flattened immediate SRT with one
|
|
// memoized scalar walk. Inactive descriptors are zero; on failure no destination is changed.
|
|
bool EvaluateRuntimeSources(const ResourcePlan& program, std::span<const uint32_t> sources,
|
|
const SrtRuntime& runtime, std::vector<DescriptorValue>& results,
|
|
std::vector<uint32_t>& flat, std::span<const uint8_t> clean_flat_slots,
|
|
std::vector<uint8_t>& active_sources);
|
|
|
|
bool WalkSrt(const ResourcePlan& program, const SrtRuntime& runtime,
|
|
std::vector<uint32_t>& flat);
|
|
|
|
} // namespace Libs::Graphics::ShaderRecompiler::IR
|
|
|
|
#endif /* EMULATOR_INCLUDE_EMULATOR_GRAPHICS_SHADER_RECOMPILER_SRTWALKER_H_ */
|