mirror of
https://github.com/yuzu-emu/yuzu-android.git
synced 2025-06-15 09:27:58 -05:00
OpenGL: Add Local Memory warmup shader
This commit is contained in:
@ -222,6 +222,7 @@ void RasterizerOpenGL::PrepareDraw(bool is_indexed, Func&& draw_func) {
|
||||
gpu.TickWork();
|
||||
|
||||
std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex};
|
||||
program_manager.LocalMemoryWarmup();
|
||||
pipeline->SetEngine(maxwell3d, gpu_memory);
|
||||
pipeline->Configure(is_indexed);
|
||||
|
||||
@ -371,6 +372,7 @@ void RasterizerOpenGL::DispatchCompute() {
|
||||
if (!pipeline) {
|
||||
return;
|
||||
}
|
||||
program_manager.LocalMemoryWarmup();
|
||||
pipeline->SetEngine(kepler_compute, gpu_memory);
|
||||
pipeline->Configure();
|
||||
const auto& qmd{kepler_compute->launch_description};
|
||||
|
@ -3,7 +3,9 @@
|
||||
|
||||
#include <glad/glad.h>
|
||||
|
||||
#include "video_core/host_shaders/opengl_lmem_warmup_comp.h"
|
||||
#include "video_core/renderer_opengl/gl_shader_manager.h"
|
||||
#include "video_core/renderer_opengl/gl_shader_util.h"
|
||||
|
||||
namespace OpenGL {
|
||||
|
||||
@ -12,7 +14,8 @@ static constexpr std::array ASSEMBLY_PROGRAM_ENUMS{
|
||||
GL_GEOMETRY_PROGRAM_NV, GL_FRAGMENT_PROGRAM_NV,
|
||||
};
|
||||
|
||||
ProgramManager::ProgramManager(const Device& device) {
|
||||
ProgramManager::ProgramManager(const Device& device)
|
||||
: lmem_warmup_program(CreateProgram(HostShaders::OPENGL_LMEM_WARMUP_COMP, GL_COMPUTE_SHADER)) {
|
||||
glCreateProgramPipelines(1, &pipeline.handle);
|
||||
if (device.UseAssemblyShaders()) {
|
||||
glEnable(GL_COMPUTE_PROGRAM_NV);
|
||||
@ -98,6 +101,11 @@ void ProgramManager::BindAssemblyPrograms(std::span<const OGLAssemblyProgram, NU
|
||||
|
||||
void ProgramManager::RestoreGuestCompute() {}
|
||||
|
||||
void ProgramManager::LocalMemoryWarmup() {
|
||||
BindComputeProgram(lmem_warmup_program.handle);
|
||||
glDispatchCompute(1, 1, 1);
|
||||
}
|
||||
|
||||
void ProgramManager::BindPipeline() {
|
||||
if (!is_pipeline_bound) {
|
||||
is_pipeline_bound = true;
|
||||
|
@ -30,6 +30,8 @@ public:
|
||||
|
||||
void RestoreGuestCompute();
|
||||
|
||||
void LocalMemoryWarmup();
|
||||
|
||||
private:
|
||||
void BindPipeline();
|
||||
|
||||
@ -44,6 +46,7 @@ private:
|
||||
u32 current_stage_mask = 0;
|
||||
std::array<GLuint, NUM_STAGES> current_programs{};
|
||||
GLuint current_assembly_compute_program = 0;
|
||||
OGLProgram lmem_warmup_program;
|
||||
};
|
||||
|
||||
} // namespace OpenGL
|
||||
|
Reference in New Issue
Block a user