Browse Source

gl_shader_decompiler: Make GetSwizzle constexpr

pull/15/merge
ReinUsesLisp 7 years ago
parent
commit
ada79fa8ad
  1. 14
      src/video_core/renderer_opengl/gl_shader_decompiler.cpp

14
src/video_core/renderer_opengl/gl_shader_decompiler.cpp

@ -31,6 +31,8 @@ using Tegra::Shader::IpaInterpMode;
using Tegra::Shader::IpaMode; using Tegra::Shader::IpaMode;
using Tegra::Shader::IpaSampleMode; using Tegra::Shader::IpaSampleMode;
using Tegra::Shader::Register; using Tegra::Shader::Register;
using namespace std::string_literals;
using namespace VideoCommon::Shader; using namespace VideoCommon::Shader;
using Maxwell = Tegra::Engines::Maxwell3D::Regs; using Maxwell = Tegra::Engines::Maxwell3D::Regs;
@ -96,11 +98,9 @@ private:
}; };
/// Generates code to use for a swizzle operation. /// Generates code to use for a swizzle operation.
std::string GetSwizzle(u32 elem) {
ASSERT(elem <= 3);
std::string swizzle = ".";
swizzle += "xyzw"[elem];
return swizzle;
constexpr const char* GetSwizzle(u32 element) {
constexpr std::array<const char*, 4> swizzle = {".x", ".y", ".z", ".w"};
return swizzle.at(element);
} }
/// Translate topology /// Translate topology
@ -622,7 +622,7 @@ private:
if (stage != ShaderStage::Fragment) { if (stage != ShaderStage::Fragment) {
return GeometryPass("position") + GetSwizzle(element); return GeometryPass("position") + GetSwizzle(element);
} else { } else {
return element == 3 ? "1.0f" : "gl_FragCoord" + GetSwizzle(element);
return element == 3 ? "1.0f" : ("gl_FragCoord"s + GetSwizzle(element));
} }
case Attribute::Index::PointCoord: case Attribute::Index::PointCoord:
switch (element) { switch (element) {
@ -909,7 +909,7 @@ private:
target = [&]() -> std::string { target = [&]() -> std::string {
switch (const auto attribute = abuf->GetIndex(); abuf->GetIndex()) { switch (const auto attribute = abuf->GetIndex(); abuf->GetIndex()) {
case Attribute::Index::Position: case Attribute::Index::Position:
return "position" + GetSwizzle(abuf->GetElement());
return "position"s + GetSwizzle(abuf->GetElement());
case Attribute::Index::PointSize: case Attribute::Index::PointSize:
return "gl_PointSize"; return "gl_PointSize";
case Attribute::Index::ClipDistances0123: case Attribute::Index::ClipDistances0123:

Loading…
Cancel
Save