Edit

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

Branch :

  • Show log

    Commit

  • Author : Shahbaz Youssefi
    Date : 2021-06-15 13:43:50
    Hash : c51c59c7
    Message : Test for missing index dirty bit bug Bug fixed in https://chromium-review.googlesource.com/c/angle/angle/+/2961690 triggers only in the following situation: - Context 1: draw indexed -> clears index dirty bit - Context 1: change state in such a way that closing the render pass is deferred to dirty bit handling (for example, change FBO) - Context 1: issue a non-indexed draw call. This closes the render pass and starts a new one -> bug was that the index dirty bit was not set - Context 2: flush the command buffer, which submits the previous render pass of context 1 (which contained vkCmdBindIndexBuffer). The primary command buffer is now reset. - Context 1: issue an indexed draw call. Since the index dirty bit was not set, this was missing the vkCmdBindIndexBuffer call. This change implements a regression test based on the above scenario. Bug: chromium:1183068 Bug: chromium:1190493 Change-Id: I729bd48cd6df2621ca763f6231023a52ac08b0fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2963836 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>

  • src/tests/angle_end2end_tests_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 "gtest/gtest.h"
    #include "test_utils/runner/TestSuite.h"
    #include "util/OSWindow.h"
    
    void ANGLEProcessTestArgs(int *argc, char *argv[]);
    
    // Register* functions handle setting up special tests that need complex parameterization.
    // GoogleTest relies heavily on static initialization to register test functions. This can
    // cause all sorts of issues if the right variables aren't initialized in the right order.
    // This register function needs to be called explicitly after static initialization and
    // before the test launcher starts. This is a safer and generally better way to initialize
    // tests. It's also more similar to how the dEQP Test harness works. In the future we should
    // likely specialize more register functions more like dEQP instead of relying on static init.
    void RegisterContextCompatibilityTests();
    
    // If we ever move to a text-based expectations format, we should move this list in that file.
    namespace
    {
    const char *kSlowTests[]               = {"GLSLTest.VerifyMaxVertexUniformVectors*",
                                "MultiThreadingTest.MultiContextDeleteDraw*"};
    constexpr char kTestExpectationsPath[] = "src/tests/angle_end2end_tests_expectations.txt";
    }  // namespace
    
    int main(int argc, char **argv)
    {
        angle::TestSuite testSuite(&argc, argv);
        ANGLEProcessTestArgs(&argc, argv);
        RegisterContextCompatibilityTests();
        testSuite.registerSlowTests(kSlowTests, ArraySize(kSlowTests));
    
        constexpr size_t kMaxPath = 512;
        std::array<char, kMaxPath> foundDataPath;
        if (!angle::FindTestDataPath(kTestExpectationsPath, foundDataPath.data(), foundDataPath.size()))
        {
            std::cerr << "Unable to find test expectations path (" << kTestExpectationsPath << ")\n";
            return EXIT_FAILURE;
        }
    
        // end2end test expectations only allow SKIP at the moment.
        testSuite.setTestExpectationsAllowMask(angle::GPUTestExpectationsParser::kGpuTestSkip);
    
        if (!testSuite.loadAllTestExpectationsFromFile(std::string(foundDataPath.data())))
        {
            return EXIT_FAILURE;
        }
    
        return testSuite.run();
    }