diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 2d78e2b60f..8d3d7bfdc0 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp @@ -245,13 +245,13 @@ Shader CachedShader::CreateStageFromMemory(const ShaderParameters& params, static_cast(code_size_b / sizeof(u64)), std::move(program_code), std::move(program_code_b))); - return std::make_shared(params, program_type, std::move(result)); + return std::shared_ptr(new CachedShader(params, program_type, std::move(result))); } Shader CachedShader::CreateStageFromCache(const ShaderParameters& params, Maxwell::ShaderProgram program_type, GLShader::ProgramResult result) { - return std::make_shared(params, program_type, std::move(result)); + return std::shared_ptr(new CachedShader(params, program_type, std::move(result))); } std::tuple CachedShader::GetProgramHandle(GLenum primitive_mode, diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h index 964f680bcf..01af9b28a2 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.h +++ b/src/video_core/renderer_opengl/gl_shader_cache.h @@ -52,9 +52,6 @@ struct ShaderParameters { class CachedShader final : public RasterizerCacheObject { public: - explicit CachedShader(const ShaderParameters& params, Maxwell::ShaderProgram program_type, - GLShader::ProgramResult result); - static Shader CreateStageFromMemory(const ShaderParameters& params, Maxwell::ShaderProgram program_type, ProgramCode&& program_code, ProgramCode&& program_code_b); @@ -81,6 +78,9 @@ public: BaseBindings base_bindings); private: + explicit CachedShader(const ShaderParameters& params, Maxwell::ShaderProgram program_type, + GLShader::ProgramResult result); + // Geometry programs. These are needed because GLSL needs an input topology but it's not // declared by the hardware. Workaround this issue by generating a different shader per input // topology class.