early-access version 4005

This commit is contained in:
pineappleEA
2023-12-04 03:26:49 +01:00
parent ad11d18846
commit 989787a69a
19 changed files with 234 additions and 147 deletions

View File

@@ -72,7 +72,8 @@ Shader::OutputTopology MaxwellToOutputTopology(Maxwell::PrimitiveTopology topolo
Shader::RuntimeInfo MakeRuntimeInfo(const GraphicsPipelineKey& key,
const Shader::IR::Program& program,
const Shader::IR::Program* previous_program,
bool glasm_use_storage_buffers, bool use_assembly_shaders) {
bool glasm_use_storage_buffers, bool use_assembly_shaders,
u32 max_num_cbufs) {
Shader::RuntimeInfo info;
if (previous_program) {
info.previous_stage_stores = previous_program->info.stores;
@@ -152,6 +153,7 @@ Shader::RuntimeInfo MakeRuntimeInfo(const GraphicsPipelineKey& key,
break;
}
info.glasm_use_storage_buffers = glasm_use_storage_buffers;
info.max_num_cbufs = max_num_cbufs;
return info;
}
@@ -522,8 +524,9 @@ std::unique_ptr<GraphicsPipeline> ShaderCache::CreateGraphicsPipeline(
const size_t stage_index{index - 1};
infos[stage_index] = &program.info;
const auto runtime_info{
MakeRuntimeInfo(key, program, previous_program, glasm_use_storage_buffers, use_glasm)};
const u32 max_num_cbufs{device.GetMaxUniformBuffers(program.stage)};
const auto runtime_info{MakeRuntimeInfo(
key, program, previous_program, glasm_use_storage_buffers, use_glasm, max_num_cbufs)};
switch (device.GetShaderBackend()) {
case Settings::ShaderBackend::Glsl:
ConvertLegacyToGeneric(program, runtime_info);
@@ -580,20 +583,21 @@ std::unique_ptr<ComputePipeline> ShaderCache::CreateComputePipeline(
auto program{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)};
const u32 num_storage_buffers{Shader::NumDescriptors(program.info.storage_buffers_descriptors)};
Shader::RuntimeInfo info;
info.glasm_use_storage_buffers = num_storage_buffers <= device.GetMaxGLASMStorageBufferBlocks();
const Shader::RuntimeInfo info{
.glasm_use_storage_buffers = num_storage_buffers <= device.GetMaxGLASMStorageBufferBlocks(),
.max_num_cbufs = device.GetMaxUniformBuffers(program.stage),
};
std::string code{};
std::vector<u32> code_spirv;
switch (device.GetShaderBackend()) {
case Settings::ShaderBackend::Glsl:
code = EmitGLSL(profile, program);
code = EmitGLSL(profile, info, program);
break;
case Settings::ShaderBackend::Glasm:
code = EmitGLASM(profile, info, program);
break;
case Settings::ShaderBackend::SpirV:
code_spirv = EmitSPIRV(profile, program);
code_spirv = EmitSPIRV(profile, info, program);
break;
}