Edit

kc3-lang/angle/src/tests/angle_unittest_main.cpp

Branch :

  • Show log

    Commit

  • Author : Shahbaz Youssefi
    Date : 2021-02-26 00:00:57
    Hash : 776c6015
    Message : Vulkan: Call glslang at compile time With this change, the ANGLE translator immediately compiles the generated GLSL into SPIR-V with glslang and discards the source. This is in preparation for generating SPIR-V directly, by making the frontend and backend already able to digest it. This change also allows the expensive glslang calls to be parallelized, improving the following perf test by about 20%: LinkProgramBenchmark.Run/vulkan_compile_and_link_multi_thread Previously, the test was run as such in the Vulkan backend: Main Thread 1 Thread 2 Compile1 ---> Compile2 ---------------------> Translator Translator <--- <--------------------- Link glslang for shader1 glslang for shader2 Done With this change, it is run as such: Main Thread 1 Thread 2 Compile1 ---> Compile2 ---------------------> Translator Translator glslang glslang <--- <--------------------- Link Done glslang_wrapper_utils no longer interacts with glslang! A rename will follow. Bug: angleproject:4889 Change-Id: If4303e8ba0ba43b1a2f47f8c0a9133d0bee1a19a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2721195 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/tests/angle_unittest_main.cpp
  • //
    // Copyright 2013 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #include "GLSLANG/ShaderLang.h"
    #include "gtest/gtest.h"
    #include "test_utils/runner/TestSuite.h"
    
    namespace
    {
    #if defined(ANGLE_ENABLE_VULKAN) || defined(ANGLE_ENABLE_METAL)
    static constexpr bool kCanUseGlslang = true;
    #else
    static constexpr bool kCanUseGlslang = false;
    #endif  // defined(ANGLE_ENABLE_VULKAN) || defined(ANGLE_ENABLE_METAL)
    }  // anonymous namespace
    
    class CompilerTestEnvironment : public testing::Environment
    {
      public:
        void SetUp() override
        {
            if (kCanUseGlslang)
            {
                sh::InitializeGlslang();
            }
            if (!sh::Initialize())
            {
                FAIL() << "Failed to initialize the compiler.";
            }
        }
    
        void TearDown() override
        {
            if (kCanUseGlslang)
            {
                sh::FinalizeGlslang();
            }
            if (!sh::Finalize())
            {
                FAIL() << "Failed to finalize the compiler.";
            }
        }
    };
    
    // This variable is also defined in test_utils_unittest_helper.
    bool gVerbose = false;
    
    int main(int argc, char **argv)
    {
        for (int argIndex = 1; argIndex < argc; ++argIndex)
        {
            if (strcmp(argv[argIndex], "-v") == 0 || strcmp(argv[argIndex], "--verbose") == 0)
            {
                gVerbose = true;
            }
        }
    
        angle::TestSuite testSuite(&argc, argv);
        testing::AddGlobalTestEnvironment(new CompilerTestEnvironment());
        return testSuite.run();
    }