summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_gen.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-07-13 04:25:03 +0200
committerbunnei <bunneidev@gmail.com>2018-07-13 04:25:36 +0200
commitc4015cd93a314878b6fc24e9a7f711e4b485dc53 (patch)
tree34f36fd27621fb6cda7aa21624f314be79707f54 /src/video_core/renderer_opengl/gl_shader_gen.h
parentMerge pull request #656 from ogniK5377/audren-mem-init (diff)
downloadyuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.tar
yuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.tar.gz
yuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.tar.bz2
yuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.tar.lz
yuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.tar.xz
yuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.tar.zst
yuzu-c4015cd93a314878b6fc24e9a7f711e4b485dc53.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_gen.h33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.h b/src/video_core/renderer_opengl/gl_shader_gen.h
index ed890e0f9..4729ce0fc 100644
--- a/src/video_core/renderer_opengl/gl_shader_gen.h
+++ b/src/video_core/renderer_opengl/gl_shader_gen.h
@@ -115,21 +115,48 @@ struct ShaderEntries {
using ProgramResult = std::pair<std::string, ShaderEntries>;
struct ShaderSetup {
- ShaderSetup(ProgramCode&& program_code) : program_code(std::move(program_code)) {}
+ ShaderSetup(const ProgramCode& program_code) {
+ program.code = program_code;
+ }
+
+ struct {
+ ProgramCode code;
+ ProgramCode code_b; // Used for dual vertex shaders
+ } program;
- ProgramCode program_code;
bool program_code_hash_dirty = true;
u64 GetProgramCodeHash() {
if (program_code_hash_dirty) {
- program_code_hash = Common::ComputeHash64(&program_code, sizeof(program_code));
+ program_code_hash = GetNewHash();
program_code_hash_dirty = false;
}
return program_code_hash;
}
+ /// Used in scenarios where we have a dual vertex shaders
+ void SetProgramB(const ProgramCode& program_b) {
+ program.code_b = program_b;
+ has_program_b = true;
+ }
+
+ bool IsDualProgram() const {
+ return has_program_b;
+ }
+
private:
+ u64 GetNewHash() const {
+ if (has_program_b) {
+ // Compute hash over dual shader programs
+ return Common::ComputeHash64(&program, sizeof(program));
+ } else {
+ // Compute hash over a single shader program
+ return Common::ComputeHash64(&program.code, program.code.size());
+ }
+ }
+
u64 program_code_hash{};
+ bool has_program_b{};
};
struct MaxwellShaderConfigCommon {