Edit

kc3-lang/angle/src/tests/compiler_tests/ConstructCompiler_test.cpp

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2016-11-22 15:42:37
    Hash : 28cb0368
    Message : Check for misconfiguration of shader built-ins Fail compiler initialization if the built-in resources are invalid. This avoids creating zero-sized arrays out of built-ins into the symbol table, which could later lead to asserts when these built-ins were indexed by constants. BUG=chromium:667468 TEST=angle_unittests Change-Id: I9553c7c91ea355abb35b9cc6088ee14b40b0922b Reviewed-on: https://chromium-review.googlesource.com/413037 Commit-Queue: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>

  • src/tests/compiler_tests/ConstructCompiler_test.cpp
  • //
    // Copyright (c) 2016 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.
    //
    // ConstructCompiler_test.cpp
    //   Test the sh::ConstructCompiler interface with different parameters.
    //
    
    #include "angle_gl.h"
    #include "gtest/gtest.h"
    #include "GLSLANG/ShaderLang.h"
    
    // Test default parameters.
    TEST(ConstructCompilerTest, DefaultParameters)
    {
        ShBuiltInResources resources;
        sh::InitBuiltInResources(&resources);
        ShHandle compiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
                                                  SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
        ASSERT_NE(nullptr, compiler);
    }
    
    // Test invalid MaxDrawBuffers zero.
    TEST(ConstructCompilerTest, InvalidMaxDrawBuffers)
    {
        ShBuiltInResources resources;
        sh::InitBuiltInResources(&resources);
        resources.MaxDrawBuffers = 0;
        ShHandle compiler        = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
                                                  SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
        ASSERT_EQ(nullptr, compiler);
    }
    
    // Test invalid MaxDualSourceDrawBuffers zero.
    TEST(ConstructCompilerTest, InvalidMaxDualSourceDrawBuffers)
    {
        ShBuiltInResources resources;
        sh::InitBuiltInResources(&resources);
        resources.EXT_blend_func_extended  = 1;
        resources.MaxDualSourceDrawBuffers = 0;
        ShHandle compiler                  = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC,
                                                  SH_GLSL_COMPATIBILITY_OUTPUT, &resources);
        ASSERT_EQ(nullptr, compiler);
    }