summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_gen.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_gen.h')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_gen.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.h b/src/video_core/renderer_opengl/gl_shader_gen.h
new file mode 100644
index 000000000..5101e7d30
--- /dev/null
+++ b/src/video_core/renderer_opengl/gl_shader_gen.h
@@ -0,0 +1,66 @@
+// Copyright 2018 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <cstring>
+#include <string>
+#include <type_traits>
+#include "common/hash.h"
+
+namespace GLShader {
+
+enum Attributes {
+ ATTRIBUTE_POSITION,
+ ATTRIBUTE_COLOR,
+ ATTRIBUTE_TEXCOORD0,
+ ATTRIBUTE_TEXCOORD1,
+ ATTRIBUTE_TEXCOORD2,
+ ATTRIBUTE_TEXCOORD0_W,
+ ATTRIBUTE_NORMQUAT,
+ ATTRIBUTE_VIEW,
+};
+
+struct MaxwellShaderConfigCommon {
+ explicit MaxwellShaderConfigCommon(){};
+};
+
+struct MaxwellVSConfig : MaxwellShaderConfigCommon {
+ explicit MaxwellVSConfig() : MaxwellShaderConfigCommon() {}
+
+ bool operator==(const MaxwellVSConfig& o) const {
+ return std::memcmp(this, &o, sizeof(MaxwellVSConfig)) == 0;
+ };
+};
+
+struct MaxwellFSConfig : MaxwellShaderConfigCommon {
+ explicit MaxwellFSConfig() : MaxwellShaderConfigCommon() {}
+
+ bool operator==(const MaxwellFSConfig& o) const {
+ return std::memcmp(this, &o, sizeof(MaxwellFSConfig)) == 0;
+ };
+};
+
+std::string GenerateVertexShader(const MaxwellVSConfig& config);
+std::string GenerateFragmentShader(const MaxwellFSConfig& config);
+
+} // namespace GLShader
+
+namespace std {
+
+template <>
+struct hash<GLShader::MaxwellVSConfig> {
+ size_t operator()(const GLShader::MaxwellVSConfig& k) const {
+ return Common::ComputeHash64(&k, sizeof(GLShader::MaxwellVSConfig));
+ }
+};
+
+template <>
+struct hash<GLShader::MaxwellFSConfig> {
+ size_t operator()(const GLShader::MaxwellFSConfig& k) const {
+ return Common::ComputeHash64(&k, sizeof(GLShader::MaxwellFSConfig));
+ }
+};
+
+} // namespace std