|
|
|
@ -14,12 +14,15 @@ static constexpr std::array ASSEMBLY_PROGRAM_ENUMS{ |
|
|
|
GL_GEOMETRY_PROGRAM_NV, GL_FRAGMENT_PROGRAM_NV, |
|
|
|
}; |
|
|
|
|
|
|
|
ProgramManager::ProgramManager(const Device& device) |
|
|
|
: lmem_warmup_program(CreateProgram(HostShaders::OPENGL_LMEM_WARMUP_COMP, GL_COMPUTE_SHADER)) { |
|
|
|
ProgramManager::ProgramManager(const Device& device) { |
|
|
|
glCreateProgramPipelines(1, &pipeline.handle); |
|
|
|
if (device.UseAssemblyShaders()) { |
|
|
|
glEnable(GL_COMPUTE_PROGRAM_NV); |
|
|
|
} |
|
|
|
if (device.HasLmemPerfBug()) { |
|
|
|
lmem_warmup_program = |
|
|
|
CreateProgram(HostShaders::OPENGL_LMEM_WARMUP_COMP, GL_COMPUTE_SHADER); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void ProgramManager::BindComputeProgram(GLuint program) { |
|
|
|
@ -102,8 +105,10 @@ void ProgramManager::BindAssemblyPrograms(std::span<const OGLAssemblyProgram, NU |
|
|
|
void ProgramManager::RestoreGuestCompute() {} |
|
|
|
|
|
|
|
void ProgramManager::LocalMemoryWarmup() { |
|
|
|
if (lmem_warmup_program.handle != 0) { |
|
|
|
BindComputeProgram(lmem_warmup_program.handle); |
|
|
|
glDispatchCompute(1, 1, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void ProgramManager::BindPipeline() { |
|
|
|
|