early-access version 4005
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user