From 13c5ea29861578cb3c53aa27a719a9a7ffb3b071 Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 9 Apr 2022 19:03:12 +0200 Subject: [PATCH] Ignore shaders versions in technique files --- .../AssetLoaders/AssetLoaderTechniqueSet.cpp | 4 +-- .../Sequence/TechniquePassScopeSequences.cpp | 33 +++++++++---------- .../Techset/TechniqueDefinitionAcceptor.h | 4 +-- .../Techset/TechniqueFileReader.cpp | 2 +- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderTechniqueSet.cpp b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderTechniqueSet.cpp index 65a7664c..04fd134f 100644 --- a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderTechniqueSet.cpp +++ b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderTechniqueSet.cpp @@ -57,7 +57,7 @@ namespace IW4 // TODO: State maps currently are not used } - bool AcceptVertexShader(size_t shaderVersionMajor, size_t shaderVersionMinor, const std::string& vertexShaderName, std::string& errorMessage) override + bool AcceptVertexShader(const std::string& vertexShaderName, std::string& errorMessage) override { auto* vertexShaderDependency = m_manager->LoadDependency(ASSET_TYPE_VERTEXSHADER, vertexShaderName); if (vertexShaderDependency == nullptr) @@ -72,7 +72,7 @@ namespace IW4 return true; } - bool AcceptPixelShader(size_t shaderVersionMajor, size_t shaderVersionMinor, const std::string& pixelShaderName, std::string& errorMessage) override + bool AcceptPixelShader(const std::string& pixelShaderName, std::string& errorMessage) override { auto* pixelShaderDependency = m_manager->LoadDependency(ASSET_TYPE_PIXELSHADER, pixelShaderName); if (pixelShaderDependency == nullptr) diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp b/src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp index bd95f818..7adaaa65 100644 --- a/src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp +++ b/src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp @@ -58,9 +58,10 @@ namespace techset static constexpr auto TAG_PIXEL_SHADER = 2; static constexpr auto CAPTURE_START = 1; - static constexpr auto CAPTURE_VERSION_MAJOR = 2; - static constexpr auto CAPTURE_VERSION_MINOR = 3; - static constexpr auto CAPTURE_SHADER_NAME = 4; + static constexpr auto CAPTURE_VERSION = 2; + static constexpr auto CAPTURE_VERSION_MAJOR = 3; + static constexpr auto CAPTURE_VERSION_MINOR = 4; + static constexpr auto CAPTURE_SHADER_NAME = 5; public: SequenceShader() @@ -72,9 +73,15 @@ namespace techset create.Keyword("vertexShader").Tag(TAG_VERTEX_SHADER), create.Keyword("pixelShader").Tag(TAG_PIXEL_SHADER), }).Capture(CAPTURE_START), - create.Integer().Capture(CAPTURE_VERSION_MAJOR), - create.Char('.'), - create.Integer().Capture(CAPTURE_VERSION_MINOR), + create.Or({ + create.And({ + create.Integer().Capture(CAPTURE_VERSION_MAJOR), + create.Char('.'), + create.Integer().Capture(CAPTURE_VERSION_MINOR), + }), + create.FloatingPoint().Capture(CAPTURE_VERSION), // This is dumb but cod devs made the format so cannot change it + create.String().Capture(CAPTURE_VERSION) + }), create.String().Capture(CAPTURE_SHADER_NAME), create.Char('{') }); @@ -85,15 +92,7 @@ namespace techset { const auto& firstToken = result.NextCapture(CAPTURE_START); - const auto& versionMajorToken = result.NextCapture(CAPTURE_VERSION_MAJOR); - if (versionMajorToken.IntegerValue() < 0) - throw ParsingException(versionMajorToken.GetPos(), "Major version must be positive"); - const auto versionMajor = static_cast(versionMajorToken.IntegerValue()); - - const auto& versionMinorToken = result.NextCapture(CAPTURE_VERSION_MINOR); - if (versionMinorToken.IntegerValue() < 0) - throw ParsingException(versionMinorToken.GetPos(), "Minor version must be positive"); - const auto versionMinor = static_cast(versionMajorToken.IntegerValue()); + // Don't care about shader version since it's stated in the shader bin anyway const auto& shaderNameToken = result.NextCapture(CAPTURE_SHADER_NAME); @@ -103,12 +102,12 @@ namespace techset assert(shaderTag == TAG_VERTEX_SHADER || shaderTag == TAG_PIXEL_SHADER); if (shaderTag == TAG_VERTEX_SHADER) { - acceptorResult = state->m_acceptor->AcceptVertexShader(versionMajor, versionMinor, shaderNameToken.StringValue(), errorMessage); + acceptorResult = state->m_acceptor->AcceptVertexShader(shaderNameToken.StringValue(), errorMessage); state->m_current_shader = ShaderSelector::VERTEX_SHADER; } else { - acceptorResult = state->m_acceptor->AcceptPixelShader(versionMajor, versionMinor, shaderNameToken.StringValue(), errorMessage); + acceptorResult = state->m_acceptor->AcceptPixelShader(shaderNameToken.StringValue(), errorMessage); state->m_current_shader = ShaderSelector::PIXEL_SHADER; } diff --git a/src/ObjLoading/Techset/TechniqueDefinitionAcceptor.h b/src/ObjLoading/Techset/TechniqueDefinitionAcceptor.h index a92a04a5..55f4fbf5 100644 --- a/src/ObjLoading/Techset/TechniqueDefinitionAcceptor.h +++ b/src/ObjLoading/Techset/TechniqueDefinitionAcceptor.h @@ -75,8 +75,8 @@ namespace techset virtual void AcceptStateMap(const std::string& stateMapName) = 0; - virtual bool AcceptVertexShader(size_t shaderVersionMajor, size_t shaderVersionMinor, const std::string& vertexShaderName, std::string& errorMessage) = 0; - virtual bool AcceptPixelShader(size_t shaderVersionMajor, size_t shaderVersionMinor, const std::string& pixelShaderName, std::string& errorMessage) = 0; + virtual bool AcceptVertexShader(const std::string& vertexShaderName, std::string& errorMessage) = 0; + virtual bool AcceptPixelShader(const std::string& pixelShaderName, std::string& errorMessage) = 0; virtual bool AcceptShaderCodeArgument(ShaderSelector shader, ShaderArgument shaderArgument, ShaderArgumentCodeSource source, std::string& errorMessage) = 0; virtual bool AcceptShaderLiteralArgument(ShaderSelector shader, ShaderArgument shaderArgument, ShaderArgumentLiteralSource source, std::string& errorMessage) = 0; diff --git a/src/ObjLoading/Techset/TechniqueFileReader.cpp b/src/ObjLoading/Techset/TechniqueFileReader.cpp index 3f928174..959bcf21 100644 --- a/src/ObjLoading/Techset/TechniqueFileReader.cpp +++ b/src/ObjLoading/Techset/TechniqueFileReader.cpp @@ -23,7 +23,7 @@ bool TechniqueFileReader::ReadTechniqueDefinition() const lexerConfig.m_emit_new_line_tokens = false; lexerConfig.m_read_strings = true; lexerConfig.m_read_integer_numbers = true; - lexerConfig.m_read_floating_point_numbers = false; + lexerConfig.m_read_floating_point_numbers = true; const auto lexer = std::make_unique(m_comment_proxy.get(), std::move(lexerConfig)); const auto parser = std::make_unique(lexer.get(), m_acceptor);