|
|
|
@ -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 |