mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 14:56:40 +08:00 
			
		
		
		
	Merge pull request #1825 from ReinUsesLisp/shader-pipeline-cache
gl_shader_manager: Update pipeline when programs have changed
This commit is contained in:
		
						commit
						80aa124b1d
					
				| @ -60,6 +60,17 @@ public: | ||||
|     } | ||||
| 
 | ||||
|     void ApplyTo(OpenGLState& state) { | ||||
|         UpdatePipeline(); | ||||
|         state.draw.shader_program = 0; | ||||
|         state.draw.program_pipeline = pipeline.handle; | ||||
|         state.geometry_shaders.enabled = (gs != 0); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     void UpdatePipeline() { | ||||
|         // Avoid updating the pipeline when values have no changed
 | ||||
|         if (old_vs == vs && old_fs == fs && old_gs == gs) | ||||
|             return; | ||||
|         // Workaround for AMD bug
 | ||||
|         glUseProgramStages(pipeline.handle, | ||||
|                            GL_VERTEX_SHADER_BIT | GL_GEOMETRY_SHADER_BIT | GL_FRAGMENT_SHADER_BIT, | ||||
| @ -68,14 +79,16 @@ public: | ||||
|         glUseProgramStages(pipeline.handle, GL_VERTEX_SHADER_BIT, vs); | ||||
|         glUseProgramStages(pipeline.handle, GL_GEOMETRY_SHADER_BIT, gs); | ||||
|         glUseProgramStages(pipeline.handle, GL_FRAGMENT_SHADER_BIT, fs); | ||||
|         state.draw.shader_program = 0; | ||||
|         state.draw.program_pipeline = pipeline.handle; | ||||
|         state.geometry_shaders.enabled = (gs != 0); | ||||
| 
 | ||||
|         // Update the old values
 | ||||
|         old_vs = vs; | ||||
|         old_fs = fs; | ||||
|         old_gs = gs; | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     OGLPipeline pipeline; | ||||
|     GLuint vs{}, fs{}, gs{}; | ||||
|     GLuint old_vs{}, old_fs{}, old_gs{}; | ||||
| }; | ||||
| 
 | ||||
| } // namespace OpenGL::GLShader
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user