diff options
author | ullysses.a.eoff <ullysses.a.eoff@intel.com> | 2014-09-30 18:07:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-01 01:08:15 +0000 |
commit | ffbb37ebec861db6e93471a5837727ea8d974f91 (patch) | |
tree | 8e1198ad97f236888e3eaa2d9711c7d263cc7882 /gpu/khronos_glcts_support | |
parent | 272faab02156ff5ecc05e93029fc0466b2491053 (diff) | |
download | chromium_src-ffbb37ebec861db6e93471a5837727ea8d974f91.zip chromium_src-ffbb37ebec861db6e93471a5837727ea8d974f91.tar.gz chromium_src-ffbb37ebec861db6e93471a5837727ea8d974f91.tar.bz2 |
Implements a windowless chrome gpu command buffer platform for
the gles2 conformance tests in the khronos GL-CTS test
suite using its new drawElements APIs.
Requires the khronos GL-CTS source to be available in
src/third_party/khronos_glcts. This support targets the
Khronos 3.X branch of ogles/conform at rev 26950.
Define the build option internal_khronos_glcts_tests=1
to build the tests.
Initial support is for Chromium on ChromiumOS. Other targets
may need to be ported for build support as well.
v2: Fix AUTHORS. Change naming convention from khronos_conform
to khronos_glcts. (piman, kbr)
v3: Ran git cl format on egl_native_windowless.cc so it matches
the chromium style. (piman)
v4: Use AppendArg instead of AppendSwitch to hopefully
circumvent a repeat of chromium:408251. (kbr)
v5: Handle FilePath's correctly for Windows compatibility.
v6: Rebase; Remove -fno-exceptions from cflags_cc
BUG=chromium:412865
R=piman@chromium.org, kbr@chromium.org, darin, brettw, cpu
TEST=Build and run the khronos_glcts_test binary
Review URL: https://codereview.chromium.org/556333003
Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
Review URL: https://codereview.chromium.org/556333003
Cr-Commit-Position: refs/heads/master@{#297567}
Diffstat (limited to 'gpu/khronos_glcts_support')
-rw-r--r-- | gpu/khronos_glcts_support/DEPS | 3 | ||||
-rwxr-xr-x | gpu/khronos_glcts_support/generate_khronos_glcts_tests.py | 98 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts.gypi | 512 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_cts.gyp | 92 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_framework.gyp | 215 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_gtf.gyp | 34 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_test.cc | 104 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_test.gyp | 101 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_test.h | 11 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/khronos_glcts_test_expectations.txt | 32 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/native/egl_native_windowless.cc | 67 | ||||
-rw-r--r-- | gpu/khronos_glcts_support/native/main.cc | 52 |
12 files changed, 1321 insertions, 0 deletions
diff --git a/gpu/khronos_glcts_support/DEPS b/gpu/khronos_glcts_support/DEPS new file mode 100644 index 0000000..9d9bc74 --- /dev/null +++ b/gpu/khronos_glcts_support/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+third_party/khronos_glcts", +] diff --git a/gpu/khronos_glcts_support/generate_khronos_glcts_tests.py b/gpu/khronos_glcts_support/generate_khronos_glcts_tests.py new file mode 100755 index 0000000..3147286 --- /dev/null +++ b/gpu/khronos_glcts_support/generate_khronos_glcts_tests.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Code generator for khronos_glcts tests.""" + +import os +import re +import sys +import argparse + +TEST_DEF_TEMPLATE = """ +TEST(KhronosGLCTSTest, %(gname)s) { + EXPECT_TRUE(RunKhronosGLCTSTest("%(cname)s")); +} +""" + +RUN_FILE_SUITE_PREFIX = { + "mustpass_es20.run" : "ES2-CTS.gtf", +} + +def ReadFileAsLines(filename): + """ + Reads a file, yielding each non-blank line + and lines that don't begin with # + """ + file = open(filename, "r") + lines = file.readlines() + file.close() + for line in lines: + line = line.strip() + if len(line) > 0 and not line.startswith("#"): + yield line + +def ReadRunFile(run_file): + """ + Find all .test tests in a .run file and return their paths. + If the .run file contains another .run file, then that is inspected + too. + """ + tests = list() + base_dir = os.path.dirname(run_file) + for line in ReadFileAsLines(run_file): + root, ext = os.path.splitext(line) + if ext == ".test": + tests.append(os.path.join(base_dir, line)) + elif ext == ".run": + tests += ReadRunFile(os.path.join(base_dir, line)) + else: + raise ValueError, "Unexpected line '%s' in '%s'" % (line, run_file) + return tests + +def GenerateTests(run_files, output): + """ + Generates code for khronos_glcts_test test-cases that are + listed in the run_files. + """ + output.write('#include "gpu/khronos_glcts_support/khronos_glcts_test.h"\n') + output.write('#include "testing/gtest/include/gtest/gtest.h"\n\n') + + for run_file in run_files: + run_file_name = os.path.basename(run_file) + run_file_dir = os.path.dirname(run_file) + suite_prefix = RUN_FILE_SUITE_PREFIX[run_file_name] + output.write("// " + run_file_name + "\n") + for test in ReadRunFile(run_file): + rel_path = os.path.relpath(test, run_file_dir) + root, ext = os.path.splitext(rel_path) + name = root.replace('.', '_') + name = "%s.%s" % (suite_prefix, name.replace(os.path.sep, '.')) + output.write(TEST_DEF_TEMPLATE + % { + "gname": re.sub(r'[^A-Za-z0-9]', '_', name), + "cname": name, + }) + output.write("\n"); + +def main(): + """This is the main function.""" + parser = argparse.ArgumentParser() + parser.add_argument("--outdir", default = ".") + parser.add_argument("run_files", nargs = "+") + + args = parser.parse_args() + + output = open( + os.path.join(args.outdir, "khronos_glcts_test_autogen.cc"), "wb") + + try: + GenerateTests(args.run_files, output) + finally: + output.close() + + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/gpu/khronos_glcts_support/khronos_glcts.gypi b/gpu/khronos_glcts_support/khronos_glcts.gypi new file mode 100644 index 0000000..cfb8bde --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts.gypi @@ -0,0 +1,512 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'target_defaults': { + 'defines': [ + 'DEQP_TARGET_NAME="chrome-gpu-command-buffer"', + 'DEQP_SUPPORT_GLES2=1', + 'DEQP_SUPPORT_EGL=1', + 'GTF_API=GTF_GLES20', + ], + 'conditions': [ + ['OS=="linux"', { + 'defines': [ + '_XOPEN_SOURCE=500', + ], + 'cflags!': [ + '-fno-exceptions', + ], + 'cflags_cc!': [ + '-fno-exceptions', + ], + 'target_conditions': [ + ['_type=="static_library"', { + 'cflags_cc!': [ + '-fno-rtti', + ], + }], + ], + }], + ], + }, + 'variables': { + 'glcts_data_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/data', + ], + 'glcts_gtf_data_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/GL', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/GL2ExtensionTests', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/GL2FixedTests', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/GL2Tests', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/GLCoverage', + ], + 'glcts_gtf_runfiles': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/mustpass_es20.run', + ], + 'gtf_core_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFArguments.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTest.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestDriver.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/MIMG.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFLog.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/XmlUtils.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFMemFile.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/eglu.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/eglut.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/gl2Native.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFgl.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFPort.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFModelData.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFStringUtils.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestElement.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFFileReader.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestUtil.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestCompareGL.c', + ], + 'gtf_gl_core_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFAttDataGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFDepthRangeParamGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFModelDataGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFPointParamGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFReadPixelsGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFShaderDataGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFShaderTextGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFStateDataGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFTexDataGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFTexParamGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFUniDataGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL/GTFTestTextureFloatBase.c', + ], + 'gtf_gles2_srcs': [ + # Base + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestGL2Test.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestAttributeGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestDetachGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestCreateObjectGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestUniformQueryGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestBindAllAttributes.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestFramebufferObjects.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetAttachedObjects.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetAttributeLocation.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetBIFD.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetExtensions.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetProgramInfoLog.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetProgramiv.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetShaderInfoLog.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetShaderiv.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetUniform.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestGetVertexAttrib.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestMaxVertexAttrib.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestMultipleShaders.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestRelinkProgram.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestUniform.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestVertexAttribPointer.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestVertexAttributes.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestVertexProgramPointSize.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2Tests/GTFGL2TestFixedDataType.c', + + # Build + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestBuildGL.c', + + # Shader load + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestShaderLoadGL.c', + + # Rasterization + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestRasterizationGL.c', + + # Complexity + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestComplexityGL.c', + + # Coverage + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFCoverageDict.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestCoverageGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFCoverageGL.c', + + # Fixed-function + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestFixedGL.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestBlend.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestBufferClear.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestBufferColor.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestBufferCorners.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestBufferObjects.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestClip.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestColorRamp.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestCopyTexture.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestDepthBufferClear.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestDepthBufferFunctions.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestDither.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestUserClipPlanes.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestDivideByZero.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestGets.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestMipmapsInterpolation.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestMipmapsSelection.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestPointRasterization.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestPointSprites.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestPolygonCull.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestScissor.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestStencilPlaneClear.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestStencilPlaneCorners.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestStencilPlaneFunction.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestStencilPlaneOperation.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestTextureEdgeClamp.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestTransformViewport.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestTriangleRasterization.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestTriangleTiling.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestVertexOrder.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedTestViewportClamp.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedUtilg.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2FixedTests/GTFFixedUtilr.c', + + # Extensions + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GTFTestExtension.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestFramebufferObject.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestStencil8.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestDataType1010102.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestDebug.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestDepth24.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestDepth32.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestDepthTexture.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestElementIndexUINT.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestFBORenderMipmap.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestFragmentPrecisionHigh.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestMapBuffer.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestPointSizeArray.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestPointSprite.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestTexture3D.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestTextureFloat.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestTextureFloatLinear.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestTextureNPOT.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestUtilp.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestOcclusionQuery.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestConditionalQuery.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestPackedDepthStencil.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestVertexArrayObject.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestTextureCompressionASTCLDR.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestDepthTextureCubeMap.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestStencil1.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestStencil4.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestVertexHalfFloat.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestReadFormat.c', + ], + 'gtf_gles2_es_only_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestCompressedPalettedTexture.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestCompressedETC1RGB8Texture.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestRGB8RGBA8.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestEGLImage.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestSurfacelessContext.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestEGLImageExternal.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestRequiredInternalformat.c', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source/GL2ExtensionTests/GTFExtensionTestEGLCreateContext.c', + ], + 'glcts_common_sources': [ + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcConfigList.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcConfigList.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcConfigListCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcConfigListCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcConfigPackage.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcConfigPackage.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcContext.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcContext.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcFragDepthTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcFragDepthTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcInfoTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcInfoTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderIndexingTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderIndexingTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderIntegerMixTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderIntegerMixTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderLibrary.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderLibrary.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderLibraryCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderLibraryCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderLoopTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderLoopTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderRenderCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderRenderCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderStructTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderStructTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderSwitchTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcShaderSwitchTests.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestCaseWrapper.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestCaseWrapper.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestPackage.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestPackage.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestSubcase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcTestSubcase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcUniformBlockCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcUniformBlockCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcUniformBlockTests.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/common/glcUniformBlockTests.hpp', + ], + 'glcts_es2_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gles2/es2cTestPackage.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gles2/es2cTestPackage.hpp', + ], + 'glcts_gtf_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfTestCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfTestCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfTestGroup.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfTestGroup.hpp', + ], + 'glcts_gtf_wrapper_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfTestContext.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfTestContext.hpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfWrapper.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/gtf/gtfWrapper.h', + ], + 'glcts_runner_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/runner/glcTestRunner.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/runner/glcTestRunner.hpp', + ], + 'qphelper_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpCommandLine.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpCommandLine.h', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpCrashHandler.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpCrashHandler.h', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpDebugOut.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpDebugOut.h', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpInfo.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpInfo.h', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpTestLog.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpTestLog.h', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpWatchDog.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpWatchDog.h', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpXmlWriter.c', + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper/qpXmlWriter.h', + ], + 'tcutil_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuApp.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuApp.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuCommandLine.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuCommandLine.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuCompressedTexture.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuCompressedTexture.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuDefs.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuDefs.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuFloat.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuFormatUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuFuzzyImageCompare.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuFuzzyImageCompare.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuImageCompare.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuImageCompare.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuImageIO.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuImageIO.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuMatrix.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuMatrixUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuPixelFormat.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuPlatform.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuPlatform.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuRandomValueIterator.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuRandomValueIterator.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuRenderTarget.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuRenderTarget.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuResource.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuResource.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuRGBA.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuRGBA.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuStringTemplate.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuStringTemplate.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuSurface.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuSurface.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestCase.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestCase.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestCaseWrapper.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestCaseWrapper.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestContext.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestContext.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestExecutor.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestExecutor.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestLog.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestLog.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestPackage.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTestPackage.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTexture.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTexture.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTextureUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuTextureUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuVector.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuVectorType.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/common/tcuVectorUtil.hpp', + # Not used by anything... + #'<(DEPTH)/third_party/khronos_glcts/framework/common/tcuZipResource.cpp', + #'<(DEPTH)/third_party/khronos_glcts/framework/common/tcuZipResource.hpp', + ], + 'glutil_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluCallLogWrapper.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluCallLogWrapper.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluContextInfo.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluContextInfo.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluDefs.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluDefs.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluDrawUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluDrawUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluFboRenderContext.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluFboRenderContext.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluPixelTransfer.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluPixelTransfer.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluPlatform.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluProgram.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluProgram.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluRenderContext.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluRenderContext.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluShaderUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluShaderUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluStateReset.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluStateReset.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluStrUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluStrUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluTexture.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluTexture.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluTextureUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluTextureUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluVarType.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluVarType.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluVarTypeUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/gluVarTypeUtil.hpp', + ], + 'glwrapper_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glw.h', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwDefs.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwDefs.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwEnums.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwFunctionLoader.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwFunctions.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwFunctions.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwInitES20Direct.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwInitES20Direct.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwInitFunctions.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwInitFunctions.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwWrapper.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper/glwWrapper.hpp', + ], + 'tcutil_egl_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEgl.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEgl.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglCallLogWrapper.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglCallLogWrapper.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglConfigFilter.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglConfigFilter.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglConfigInfo.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglConfigInfo.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglPlatform.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglPlatform.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglStrUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/egl/tcuEglStrUtil.hpp', + ], + 'debase_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deDefs.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deDefs.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deFloat16.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deFloat16.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deInt32.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deInt32.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deInt32Test.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deMath.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deMath.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deMemory.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deMemory.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deRandom.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deRandom.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deString.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase/deString.h', + ], + 'depool_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/deMemPool.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/deMemPool.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolArray.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolArray.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHashArray.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHashArray.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHash.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHash.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHashSet.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHashSet.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHeap.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolHeap.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolMultiSet.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolMultiSet.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolSet.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolSet.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolStringBuilder.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolStringBuilder.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolTest.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool/dePoolTest.h', + ], + 'dethread_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deAtomic.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deAtomic.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deMutex.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deSemaphore.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deThread.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deThreadLocal.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deThreadTest.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/deThreadTest.h', + ], + 'dethread_unix_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/unix/deMutexUnix.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/unix/deSemaphoreUnix.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/unix/deThreadLocalUnix.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread/unix/deThreadUnix.c', + ], + 'deutil_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deClock.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deClock.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deCommandLine.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deCommandLine.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deDynamicLibrary.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deDynamicLibrary.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deFile.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deFile.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deProcess.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deProcess.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deSocket.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deSocket.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deTimer.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deTimer.h', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deTimerTest.c', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil/deTimerTest.h', + ], + 'decpp_srcs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deBlockBuffer.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deBlockBuffer.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deDefs.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deDefs.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deDirectoryIterator.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deDirectoryIterator.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deDynamicLibrary.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deDynamicLibrary.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deFilePath.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deFilePath.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deMemPool.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deMemPool.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deMutex.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deMutex.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/dePoolArray.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/dePoolArray.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/dePoolString.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/dePoolString.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deRandom.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deRandom.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deRingBuffer.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deRingBuffer.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deSemaphore.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deSemaphore.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deSharedPtr.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deSharedPtr.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deSocket.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deSocket.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deStringUtil.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deStringUtil.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deThread.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deThread.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deThreadSafeRingBuffer.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deThreadSafeRingBuffer.hpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deUniquePtr.cpp', + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp/deUniquePtr.hpp', + ], + } +} diff --git a/gpu/khronos_glcts_support/khronos_glcts_cts.gyp b/gpu/khronos_glcts_support/khronos_glcts_cts.gyp new file mode 100644 index 0000000..6e00afc --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_cts.gyp @@ -0,0 +1,92 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'includes': [ + 'khronos_glcts.gypi', + ], + 'targets': [ + { + 'target_name': 'glcts_common', + 'type': 'static_library', + 'dependencies': [ + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:delibs', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:tcutil', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:glutil', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:tcutil_egl', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/common', + ], + }, + 'sources': [ + '<@(glcts_common_sources)', + ], + }, + { + 'target_name': 'glcts_gtf_wrapper', + 'type': 'static_library', + 'dependencies': [ + 'glcts_common', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:delibs', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:tcutil', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:glutil', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:tcutil_egl', + ], + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gtf', + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source' + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gtf', + ], + }, + 'sources': [ + '<@(glcts_gtf_wrapper_srcs)', + ], + }, + { + 'target_name': 'glcts_gtf', + 'type': 'static_library', + 'dependencies': [ + 'glcts_common', 'glcts_gtf_wrapper', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_gtf.gyp:gtf_es', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:delibs', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:tcutil', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:glutil', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gtf', + ], + }, + 'sources': [ + '<@(glcts_gtf_srcs)', + ], + }, + { + 'target_name': 'glcts_es2', + 'type': 'static_library', + 'dependencies': [ + 'glcts_common', 'glcts_gtf', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:delibs', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:tcutil', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:glutil', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/cts/gles2', + ], + }, + 'export_dependent_settings': [ + 'glcts_common', + ], + 'sources': [ + '<@(glcts_es2_srcs)', + ], + }, + ], +} diff --git a/gpu/khronos_glcts_support/khronos_glcts_framework.gyp b/gpu/khronos_glcts_support/khronos_glcts_framework.gyp new file mode 100644 index 0000000..27a3962 --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_framework.gyp @@ -0,0 +1,215 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'includes': [ + 'khronos_glcts.gypi', + ], + 'targets': [ + { + 'target_name': 'khronos_glcts_framework', + 'type': 'static_library', + 'dependencies': [ + 'delibs', 'qphelper', 'tcutil', 'glutil', 'tcutil_egl', + ], + 'export_dependent_settings': [ + 'delibs', 'qphelper', 'tcutil', 'glutil', 'tcutil_egl', + ], + }, + { + 'target_name': 'delibs', + 'type': 'static_library', + 'dependencies': [ + 'debase', 'depool', 'dethread', 'deutil', 'decpp', + ], + 'export_dependent_settings': [ + 'debase', 'depool', 'dethread', 'deutil', 'decpp', + ], + }, + { + 'target_name': 'debase', + 'type': 'static_library', + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/debase', + ], + }, + 'sources': [ + '<@(debase_srcs)', + ], + }, + { + 'target_name': 'depool', + 'type': 'static_library', + 'dependencies': [ + 'debase', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/depool', + ], + }, + 'sources': [ + '<@(depool_srcs)', + ], + }, + { + 'target_name': 'dethread', + 'type': 'static_library', + 'dependencies': [ + 'debase', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread', + ], + }, + 'sources': [ + '<@(dethread_srcs)', + ], + 'conditions': [ + ['OS=="linux"', { + 'sources': [ + '<@(dethread_unix_srcs)', + ], + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/dethread', + ], + }], + ] + }, + { + 'target_name': 'deutil', + 'type': 'static_library', + 'dependencies': [ + 'debase', 'depool', 'dethread', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/deutil', + ], + }, + 'sources': [ + '<@(deutil_srcs)', + ], + }, + { + 'target_name': 'decpp', + 'type': 'static_library', + 'dependencies': [ + 'debase', 'depool', 'dethread', 'deutil', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/decpp', + ], + }, + 'sources': [ + '<@(decpp_srcs)', + ], + }, + { + 'target_name': 'qphelper', + 'type': 'static_library', + 'defines': [ + 'QP_SUPPORT_PNG', + ], + 'dependencies': [ + 'debase', 'depool', 'dethread', 'deutil', + '<(DEPTH)/third_party/libpng/libpng.gyp:libpng', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/qphelper', + ], + }, + 'sources': [ + '<@(qphelper_srcs)', + ], + }, + { + 'target_name': 'tcutil', + 'type': 'static_library', + 'dependencies': [ + 'delibs', 'qphelper', + '<(DEPTH)/third_party/libpng/libpng.gyp:libpng', + ], + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/delibs/libpng', #png.hpp + ], + 'export_dependent_settings': [ + 'qphelper', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/common', + ], + }, + 'sources': [ + '<@(tcutil_srcs)', + ], + }, + { + 'target_name': 'glwrapper', + 'type': 'static_library', + 'dependencies': [ + 'delibs', + '<(DEPTH)/gpu/gpu.gyp:gles2_c_lib_nocheck', + '<(DEPTH)/gpu/gpu.gyp:command_buffer_service', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/opengl/wrapper', + ], + }, + 'sources': [ + '<@(glwrapper_srcs)', + ], + }, + { + 'target_name': 'glutil', + 'type': 'static_library', + 'dependencies': [ + 'glwrapper', 'delibs', 'tcutil', + ], + 'export_dependent_settings': [ + 'glwrapper', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/opengl', + ], + }, + 'sources': [ + '<@(glutil_srcs)', + ], + }, + { + 'target_name': 'tcutil_egl', + 'type': 'static_library', + 'dependencies': [ + 'delibs', 'tcutil', 'glwrapper', + # TODO: We may want to phase out the old gles2_conform support in preference + # of this implementation. So eventually we'll need to move the egl_native + # stuff here or to a shareable location/path. + '<(DEPTH)/gpu/gles2_conform_support/gles2_conform_support.gyp:egl_native', + '<(DEPTH)/third_party/khronos/khronos.gyp:khronos_headers', + ], + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/opengl', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/framework/egl', + ], + }, + 'export_dependent_settings': [ + '<(DEPTH)/third_party/khronos/khronos.gyp:khronos_headers', + ], + 'sources': [ + '<@(tcutil_egl_srcs)', + ], + }, + ], +} diff --git a/gpu/khronos_glcts_support/khronos_glcts_gtf.gyp b/gpu/khronos_glcts_support/khronos_glcts_gtf.gyp new file mode 100644 index 0000000..16e6694 --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_gtf.gyp @@ -0,0 +1,34 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'includes': [ + 'khronos_glcts.gypi', + ], + 'targets': [ + { + 'target_name': 'gtf_es', + 'type': 'static_library', + 'dependencies': [ + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:debase', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_cts.gyp:glcts_gtf_wrapper', + '<(DEPTH)/third_party/expat/expat.gyp:expat', + ], + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + '<(DEPTH)/third_party/khronos_glcts/GTF_ES/glsl/GTF/Source', + ], + }, + 'sources': [ + '<@(gtf_core_srcs)', + '<@(gtf_gl_core_srcs)', + '<@(gtf_gles2_srcs)', + '<@(gtf_gles2_es_only_srcs)', + ], + }, + ], +} diff --git a/gpu/khronos_glcts_support/khronos_glcts_test.cc b/gpu/khronos_glcts_support/khronos_glcts_test.cc new file mode 100644 index 0000000..b77bb8d --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_test.cc @@ -0,0 +1,104 @@ +// Copyright 2014 The Chromium 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 "gpu/khronos_glcts_support/khronos_glcts_test.h" + +#include <string> + +#include "base/at_exit.h" +#include "base/base_paths.h" +#include "base/command_line.h" +#include "base/file_util.h" +#include "base/files/file_path.h" +#include "base/logging.h" +#include "base/path_service.h" +#include "base/process/launch.h" +#include "base/strings/string_util.h" +#include "gpu/config/gpu_test_config.h" +#include "gpu/config/gpu_test_expectations_parser.h" +#include "testing/gtest/include/gtest/gtest.h" + +base::FilePath g_deqp_log_dir; + +bool RunKhronosGLCTSTest(const char* test_name) { + // Load test expectations, and return early if a test is marked as FAIL. + base::FilePath src_path; + PathService::Get(base::DIR_SOURCE_ROOT, &src_path); + base::FilePath test_expectations_path = + src_path.Append(FILE_PATH_LITERAL("gpu")). + Append(FILE_PATH_LITERAL("khronos_glcts_support")). + Append(FILE_PATH_LITERAL("khronos_glcts_test_expectations.txt")); + if (!base::PathExists(test_expectations_path)) { + LOG(ERROR) << "Fail to locate khronos_glcts_test_expectations.txt"; + return false; + } + gpu::GPUTestExpectationsParser test_expectations; + if (!test_expectations.LoadTestExpectations(test_expectations_path)) { + LOG(ERROR) << "Fail to load khronos_glcts_test_expectations.txt"; + return false; + } + gpu::GPUTestBotConfig bot_config; + if (!bot_config.LoadCurrentConfig(NULL)) { + LOG(ERROR) << "Fail to load bot configuration"; + return false; + } + if (!bot_config.IsValid()) { + LOG(ERROR) << "Invalid bot configuration"; + return false; + } + + const ::testing::TestInfo* const test_info = + ::testing::UnitTest::GetInstance()->current_test_info(); + int32 expectation = + test_expectations.GetTestExpectation(test_info->name(), bot_config); + if (expectation != gpu::GPUTestExpectationsParser::kGpuTestPass) { + LOG(WARNING) << "Test " << test_info->name() << " is bypassed"; + return true; + } + + base::FilePath test_path; + PathService::Get(base::DIR_EXE, &test_path); + base::FilePath archive(test_path.Append(FILE_PATH_LITERAL( + "khronos_glcts_data"))); + base::FilePath program(test_path.Append(FILE_PATH_LITERAL( + "khronos_glcts_test_windowless"))); + base::FilePath log = + g_deqp_log_dir.AppendASCII(test_info->name()). + AddExtension(FILE_PATH_LITERAL(".log")); + + CommandLine cmdline(program); + cmdline.AppendSwitchPath("--deqp-log-filename", log); + cmdline.AppendSwitchPath("--deqp-archive-dir", archive); + cmdline.AppendArg("--deqp-gl-config-id=-1"); + cmdline.AppendArg(std::string("--deqp-case=") + test_name); + + std::string output; + bool success = base::GetAppOutput(cmdline, &output); + if (success) { + size_t success_index = output.find("Pass (Pass)"); + size_t failed_index = output.find("Fail (Fail)"); + success = (success_index != std::string::npos) && + (failed_index == std::string::npos); + } + if (!success) { + LOG(ERROR) << output; + } + return success; +} + +int main(int argc, char *argv[]) { + base::AtExitManager at_exit; + + ::testing::InitGoogleTest(&argc, argv); + + if (argc == 2) { + g_deqp_log_dir = base::FilePath::FromUTF8Unsafe(argv[1]); + } + else { + base::GetTempDir(&g_deqp_log_dir); + } + + return RUN_ALL_TESTS(); +} + diff --git a/gpu/khronos_glcts_support/khronos_glcts_test.gyp b/gpu/khronos_glcts_support/khronos_glcts_test.gyp new file mode 100644 index 0000000..70b1932 --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_test.gyp @@ -0,0 +1,101 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'includes': [ + 'khronos_glcts.gypi', + ], + 'targets': [ + { + 'target_name': 'khronos_glcts_test', + 'type': 'executable', + 'dependencies': [ + '<(DEPTH)/base/base.gyp:base', + '<(DEPTH)/gpu/gpu.gyp:gpu', + '<(DEPTH)/testing/gtest.gyp:gtest', + ], + 'sources': [ + 'khronos_glcts_test.cc', + ], + 'conditions': [ + ['internal_khronos_glcts_tests', { + 'dependencies': [ + 'khronos_glcts_test_windowless', + ], + 'variables': { + 'khronos_glcts_test_output_dir': '<(SHARED_INTERMEDIATE_DIR)/gpu/khronos_glcts_test', + }, + 'sources': [ + '<(khronos_glcts_test_output_dir)/khronos_glcts_test_autogen.cc', + ], + 'actions': [ + { + 'action_name': 'generate_khronos_glcts_tests', + 'inputs': [ + 'generate_khronos_glcts_tests.py', + 'khronos_glcts_test.h', + '<@(glcts_gtf_runfiles)', + ], + 'outputs': [ + '<(khronos_glcts_test_output_dir)/khronos_glcts_test_autogen.cc', + ], + 'action': [ + 'python', + 'generate_khronos_glcts_tests.py', + '--outdir=<(khronos_glcts_test_output_dir)', + '<@(glcts_gtf_runfiles)', + ], + }, + ], + }], + ], + }, + ], + 'conditions': [ + ['internal_khronos_glcts_tests', { + 'targets': [ + { + 'target_name': 'tcutil_platform_windowless', + 'type': 'static_library', + 'dependencies': [ + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:khronos_glcts_framework', + ], + 'sources': [ + 'native/egl_native_windowless.cc', + ], + }, + { + 'target_name': 'khronos_glcts_test_windowless', + 'type': 'executable', + 'dependencies': [ + 'tcutil_platform_windowless', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_framework.gyp:khronos_glcts_framework', + '<(DEPTH)/gpu/khronos_glcts_support/khronos_glcts_cts.gyp:glcts_es2', + ], + 'copies': [ + { + 'destination': '<(PRODUCT_DIR)/khronos_glcts_data/gl_cts', + 'files': [ + '<@(glcts_data_dirs)', + ], + }, + { + 'destination': '<(PRODUCT_DIR)/khronos_glcts_data/gl_cts/GTF', + 'files': [ + '<@(glcts_gtf_data_dirs)', + '<@(glcts_gtf_runfiles)', + ], + }, + ], + 'sources': [ + '<(DEPTH)/third_party/khronos_glcts/cts/glcTestPackageEntry.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/glcTestPackageRegistry.cpp', + '<(DEPTH)/third_party/khronos_glcts/cts/glcTestPackageRegistry.hpp', + 'native/main.cc', + ], + }, + ], + }], + ], +} diff --git a/gpu/khronos_glcts_support/khronos_glcts_test.h b/gpu/khronos_glcts_support/khronos_glcts_test.h new file mode 100644 index 0000000..1f12129 --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_test.h @@ -0,0 +1,11 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_KHRONOS_GLCTS_SUPPORT_KHRONOS_GLCTS_TEST_H +#define GPU_KHRONOS_GLCTS_SUPPORT_KHRONOS_GLCTS_TEST_H + +bool RunKhronosGLCTSTest(const char* test_name); + +#endif // GPU_KHRONOS_GLCTS_SUPPORT_KHRONOS_GLCTS_TEST_H + diff --git a/gpu/khronos_glcts_support/khronos_glcts_test_expectations.txt b/gpu/khronos_glcts_support/khronos_glcts_test_expectations.txt new file mode 100644 index 0000000..54c2969 --- /dev/null +++ b/gpu/khronos_glcts_support/khronos_glcts_test_expectations.txt @@ -0,0 +1,32 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file contains a list of defective khronos_glcts conformance tests. The +// expected format is: +// {BUG#} {MODIFIERS} : {TEST_NAME} = {PASS,FAIL,FLAKY,TIMEOUT,SKIP} +// +// MODIFIERS can be a combination of the below list: +// WIN XP VISTA WIN7 MAC LEOPARD SNOWLEOPARD LION LINUX CHROMEOS MOUNTAINLION +// MAVERICKS +// NVIDIA AMD INTEL +// 0xabcd - GPU PCI device ID. Specifying a PCI id requires a vendor. +// DEBUG RELEASE +// +// TEST_NAME can be a specific test name, or have a '*' in the end, which +// indicates a prefix matching. +// +// Any tests whose expectations are not PASS will be skipped on the bots. +// +// Examples: +// 91530 MAC WIN LINUX : context_lost_restored = TIMEOUT +// 91533 WIN : gl_min_uniforms = FAIL +// 91531 MAC WIN LINUX : conformance_more_* = SKIP +// 91532 MAC NVIDIA 0x0640 : tex_image_and_sub_image_2d_with_video = PASS FAIL + + +//////////////////////////////////////////////////////////////////////////////// +// +// Temporary entries: they should be removed once the bugs are fixed. +// +//////////////////////////////////////////////////////////////////////////////// diff --git a/gpu/khronos_glcts_support/native/egl_native_windowless.cc b/gpu/khronos_glcts_support/native/egl_native_windowless.cc new file mode 100644 index 0000000..ac0e908 --- /dev/null +++ b/gpu/khronos_glcts_support/native/egl_native_windowless.cc @@ -0,0 +1,67 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Using egl_native from gles2_conform_support +// TODO: We may want to phase out the old gles2_conform support in preference +// of this implementation. So eventually we'll need to move the egl_native +// stuff here or to a shareable location/path. +#include "gpu/gles2_conform_support/egl/display.h" + +#include "third_party/khronos_glcts/framework/egl/tcuEglPlatform.hpp" + +namespace egl { +namespace native { +namespace windowless { + +class Window : public tcu::NativeWindow { + public: + Window(tcu::egl::Display& display, + EGLConfig config, + const EGLint* attribList, + int width, + int height) + : tcu::NativeWindow::NativeWindow(), + eglDisplay_(display), + eglSurface_(display, config, (EGLNativeWindowType)NULL, attribList) {} + + virtual ~Window() {} + + tcu::egl::Display& getEglDisplay() { return eglDisplay_; } + + tcu::egl::WindowSurface& getEglSurface() { return eglSurface_; } + + void processEvents() { return; } + + private: + tcu::egl::Display& eglDisplay_; + tcu::egl::WindowSurface eglSurface_; +}; + +class Platform : public tcu::EglPlatform { + public: + Platform() : tcu::EglPlatform::EglPlatform() {} + + virtual ~Platform() {} + + tcu::NativeWindow* createWindow(tcu::NativeDisplay& dpy, + EGLConfig config, + const EGLint* attribList, + int width, + int height, + qpVisibility visibility) { + tcu::egl::Display& eglDisplay = dpy.getEglDisplay(); + egl::Display* display = + static_cast<egl::Display*>(eglDisplay.getEGLDisplay()); + display->SetCreateOffscreen(width, height); + return new Window(eglDisplay, config, attribList, width, height); + } +}; + +} // namespace windowless +} // namespace native +} // namespace egl + +tcu::Platform* createPlatform(void) { + return new egl::native::windowless::Platform(); +} diff --git a/gpu/khronos_glcts_support/native/main.cc b/gpu/khronos_glcts_support/native/main.cc new file mode 100644 index 0000000..8ffde05 --- /dev/null +++ b/gpu/khronos_glcts_support/native/main.cc @@ -0,0 +1,52 @@ +// Copyright 2014 The Chromium 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 <cstdio> + +#include "base/at_exit.h" +#include "base/command_line.h" +#include "base/message_loop/message_loop.h" + +#include "third_party/khronos_glcts/framework/common/tcuApp.hpp" +#include "third_party/khronos_glcts/framework/common/tcuCommandLine.hpp" +#include "third_party/khronos_glcts/framework/common/tcuDefs.hpp" +#include "third_party/khronos_glcts/framework/common/tcuPlatform.hpp" +#include "third_party/khronos_glcts/framework/common/tcuResource.hpp" +#include "third_party/khronos_glcts/framework/common/tcuTestLog.hpp" +#include "third_party/khronos_glcts/framework/delibs/decpp/deUniquePtr.hpp" + +// implemented in the native platform +tcu::Platform* createPlatform (); + +void GTFMain(int argc, char* argv[]) { + setvbuf(stdout, DE_NULL, _IOLBF, 4*1024); + + try { + tcu::CommandLine cmdLine(argc, argv); + tcu::DirArchive archive(cmdLine.getArchiveDir()); + tcu::TestLog log(cmdLine.getLogFileName(), cmdLine.getLogFlags()); + de::UniquePtr<tcu::Platform> platform(createPlatform()); + de::UniquePtr<tcu::App> app( + new tcu::App(*platform, archive, log, cmdLine)); + + // Main loop. + for (;;) { + if (!app->iterate()) + break; + } + } + catch (const std::exception& e) { + tcu::die("%s", e.what()); + } +} + +int main(int argc, char *argv[]) { + base::AtExitManager at_exit; + CommandLine::Init(argc, argv); + base::MessageLoopForUI message_loop; + + GTFMain(argc, argv); + + return 0; +} |