diff options
author | yongsheng.zhu@intel.com <yongsheng.zhu@intel.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-26 03:50:23 +0000 |
---|---|---|
committer | yongsheng.zhu@intel.com <yongsheng.zhu@intel.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-26 03:50:23 +0000 |
commit | b5e3497fd9c61698b4529c2e5c66b89695f34b3b (patch) | |
tree | b7b37b82843ea3593df4f30733a19eddd1d87fde | |
parent | 3f9ab536e81f6ba3fb21123c71130781e0da0ca3 (diff) | |
download | chromium_src-b5e3497fd9c61698b4529c2e5c66b89695f34b3b.zip chromium_src-b5e3497fd9c61698b4529c2e5c66b89695f34b3b.tar.gz chromium_src-b5e3497fd9c61698b4529c2e5c66b89695f34b3b.tar.bz2 |
Enable webgl conformance tests under content/test/gpu in content_browsertests
It enables the webgl conformace test in content_browsertests basing on
chrome/test/gpu.
BUG=149892
TEST=
Review URL: https://chromiumcodereview.appspot.com/10916334
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158742 0039d316-1c4b-4281-b951-d872f2087c98
19 files changed, 1539 insertions, 81 deletions
diff --git a/build/android/pylib/single_test_runner.py b/build/android/pylib/single_test_runner.py index f95d9c3..a680c68 100644 --- a/build/android/pylib/single_test_runner.py +++ b/build/android/pylib/single_test_runner.py @@ -230,7 +230,7 @@ class SingleTestRunner(BaseTestRunner): ] elif self.test_package.test_suite_basename == 'content_unittests': return [ - 'chrome/test/gpu/webgl_conformance_test_expectations.txt', + 'content/test/data/gpu/webgl_conformance_test_expectations.txt', 'net/data/ssl/certificates/', 'webkit/data/dom_storage/webcore_test_database.localstorage', 'third_party/hyphen/hyph_en_US.dic', diff --git a/chrome/test/base/ui_test_utils.cc b/chrome/test/base/ui_test_utils.cc index 21d54b1..f2a08db 100644 --- a/chrome/test/base/ui_test_utils.cc +++ b/chrome/test/base/ui_test_utils.cc @@ -609,44 +609,6 @@ Browser* BrowserAddedObserver::WaitForSingleNewBrowser() { return GetBrowserNotInSet(original_browsers_); } -DOMMessageQueue::DOMMessageQueue() : waiting_for_message_(false) { - registrar_.Add(this, content::NOTIFICATION_DOM_OPERATION_RESPONSE, - content::NotificationService::AllSources()); -} - -DOMMessageQueue::~DOMMessageQueue() {} - -void DOMMessageQueue::Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - content::Details<DomOperationNotificationDetails> dom_op_details(details); - content::Source<RenderViewHost> sender(source); - message_queue_.push(dom_op_details->json); - if (waiting_for_message_) { - waiting_for_message_ = false; - message_loop_runner_->Quit(); - } -} - -void DOMMessageQueue::ClearQueue() { - message_queue_ = std::queue<std::string>(); -} - -bool DOMMessageQueue::WaitForMessage(std::string* message) { - if (message_queue_.empty()) { - waiting_for_message_ = true; - // This will be quit when a new message comes in. - message_loop_runner_ = new content::MessageLoopRunner; - message_loop_runner_->Run(); - } - // The queue should not be empty, unless we were quit because of a timeout. - if (message_queue_.empty()) - return false; - if (message) - *message = message_queue_.front(); - return true; -} - // Coordinates taking snapshots of a |RenderWidget|. class SnapshotTaker { public: diff --git a/chrome/test/base/ui_test_utils.h b/chrome/test/base/ui_test_utils.h index 8ab4043..b158e4c 100644 --- a/chrome/test/base/ui_test_utils.h +++ b/chrome/test/base/ui_test_utils.h @@ -361,37 +361,6 @@ void HideNativeWindow(gfx::NativeWindow window); // Show and focus a native window. Returns true on success. bool ShowAndFocusNativeWindow(gfx::NativeWindow window) WARN_UNUSED_RESULT; -// Watches for responses from the DOMAutomationController and keeps them in a -// queue. Useful for waiting for a message to be received. -class DOMMessageQueue : public content::NotificationObserver { - public: - // Constructs a DOMMessageQueue and begins listening for messages from the - // DOMAutomationController. Do not construct this until the browser has - // started. - DOMMessageQueue(); - virtual ~DOMMessageQueue(); - - // Removes all messages in the message queue. - void ClearQueue(); - - // Wait for the next message to arrive. |message| will be set to the next - // message, if not null. Returns true on success. - bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT; - - // Overridden content::NotificationObserver methods. - virtual void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) OVERRIDE; - - private: - content::NotificationRegistrar registrar_; - std::queue<std::string> message_queue_; - bool waiting_for_message_; - scoped_refptr<content::MessageLoopRunner> message_loop_runner_; - - DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue); -}; - // Takes a snapshot of the given render widget, rendered at |page_size|. The // snapshot is set to |bitmap|. Returns true on success. bool TakeRenderWidgetSnapshot(content::RenderWidgetHost* rwh, diff --git a/chrome/test/gpu/gpu_crash_browsertest.cc b/chrome/test/gpu/gpu_crash_browsertest.cc index 941d73b..1b3e445 100644 --- a/chrome/test/gpu/gpu_crash_browsertest.cc +++ b/chrome/test/gpu/gpu_crash_browsertest.cc @@ -47,7 +47,7 @@ class GPUCrashTest : public InProcessBrowserTest { // Currently Kill times out on GPU bots: http://crbug.com/101513 IN_PROC_BROWSER_TEST_F(GPUCrashTest, DISABLED_Kill) { - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; ui_test_utils::NavigateToURL( browser(), @@ -62,7 +62,7 @@ IN_PROC_BROWSER_TEST_F(GPUCrashTest, DISABLED_Kill) { IN_PROC_BROWSER_TEST_F(GPUCrashTest, WebkitLoseContext) { - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; ui_test_utils::NavigateToURL( browser(), diff --git a/chrome/test/gpu/gpu_feature_browsertest.cc b/chrome/test/gpu/gpu_feature_browsertest.cc index 78da1a258..6fba303 100644 --- a/chrome/test/gpu/gpu_feature_browsertest.cc +++ b/chrome/test/gpu/gpu_feature_browsertest.cc @@ -20,6 +20,7 @@ #include "content/public/browser/gpu_data_manager.h" #include "content/public/common/content_switches.h" #include "content/public/common/gpu_info.h" +#include "content/public/test/browser_test_utils.h" #include "content/test/gpu/gpu_test_config.h" #include "content/test/gpu/test_switches.h" #include "net/base/net_util.h" @@ -93,7 +94,7 @@ class GpuFeatureTest : public InProcessBrowserTest { ASSERT_TRUE(file_util::PathExists(test_path)) << "Missing test file: " << test_path.value(); - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; if (new_tab) { ui_test_utils::NavigateToURLWithDisposition( browser(), net::FilePathToFileURL(test_path), diff --git a/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc b/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc index 7ae07c3..7438090 100644 --- a/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc +++ b/chrome/test/gpu/gpu_mapsgl_endurance_browsertest.cc @@ -77,7 +77,7 @@ class MapsGLEnduranceTest : public InProcessBrowserTest { gfx::Rect new_bounds = GetNewTabContainerBounds(tab_container_size); browser()->window()->SetBounds(new_bounds); - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; ui_test_utils::NavigateToURL(browser(), GURL(url)); // Wait for notification that the test completed. diff --git a/chrome/test/gpu/gpu_pixel_browsertest.cc b/chrome/test/gpu/gpu_pixel_browsertest.cc index f21974c..9cf3563 100644 --- a/chrome/test/gpu/gpu_pixel_browsertest.cc +++ b/chrome/test/gpu/gpu_pixel_browsertest.cc @@ -169,7 +169,7 @@ class GpuPixelBrowserTest : public InProcessBrowserTest { ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(url)); // Wait for notification that page is loaded. diff --git a/chrome/test/gpu/webgl_conformance_tests.cc b/chrome/test/gpu/webgl_conformance_tests.cc index 7e23795..70d334f 100644 --- a/chrome/test/gpu/webgl_conformance_tests.cc +++ b/chrome/test/gpu/webgl_conformance_tests.cc @@ -10,6 +10,7 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/common/content_switches.h" +#include "content/public/test/browser_test_utils.h" #include "content/test/gpu/gpu_test_config.h" #include "content/test/gpu/gpu_test_expectations_parser.h" #include "net/base/net_util.h" @@ -58,7 +59,7 @@ class WebGLConformanceTests : public InProcessBrowserTest { return; } - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_path_)); ui_test_utils::NavigateToURL( browser(), GURL("javascript:start('" + url + "');")); diff --git a/chrome/test/perf/rendering/latency_tests.cc b/chrome/test/perf/rendering/latency_tests.cc index 323830e..9ac511d 100644 --- a/chrome/test/perf/rendering/latency_tests.cc +++ b/chrome/test/perf/rendering/latency_tests.cc @@ -25,6 +25,7 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" +#include "content/public/test/browser_test_utils.h" #include "content/test/gpu/gpu_test_config.h" #include "net/base/net_util.h" #include "testing/gtest/include/gtest/gtest.h" @@ -432,7 +433,7 @@ void LatencyTest::RunTestInternal(const std::string& test_url, } // Wait for message indicating the test has finished running. - ui_test_utils::DOMMessageQueue message_queue; + content::DOMMessageQueue message_queue; ASSERT_TRUE(message_queue.WaitForMessage(NULL)); timer_.Stop(); diff --git a/content/browser/gpu/generate_webgl_conformance_test_list.py b/content/browser/gpu/generate_webgl_conformance_test_list.py new file mode 100755 index 0000000..9dff85b --- /dev/null +++ b/content/browser/gpu/generate_webgl_conformance_test_list.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# Copyright (c) 2012 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. + +"""Auto-generates the WebGL conformance test list header file. + +Parses the WebGL conformance test *.txt file, which contains a list of URLs +for individual conformance tests (each on a new line). It recursively parses +*.txt files. For each test URL, the matching gtest call is created and +sent to the C++ header file. +""" + +import getopt +import os +import re +import sys + +COPYRIGHT = """\ +// Copyright (c) 2012 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. + +""" +WARNING = """\ +// DO NOT EDIT! This file is auto-generated by +// generate_webgl_conformance_test_list.py +// It is included by webgl_conformance_tests.cc + +""" +HEADER_GUARD = """\ +#ifndef CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_ +#define CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_ + +""" +HEADER_GUARD_END = """ +#endif // CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_ + +""" + +# Assume this script is run from the src/content/test/gpu directory. +INPUT_DIR = "../../../third_party/webgl_conformance" +INPUT_FILE = "00_test_list.txt" +OUTPUT_FILE = "webgl_conformance_test_list_autogen.h" + +def main(argv): + """Main function for the WebGL conformance test list generator. + """ + if not os.path.exists(os.path.join(INPUT_DIR, INPUT_FILE)): + print >> sys.stderr, "ERROR: WebGL conformance tests do not exist." + print >> sys.stderr, "Run the script from the directory containing it." + return 1 + + output = open(OUTPUT_FILE, "w") + output.write(COPYRIGHT) + output.write(WARNING) + output.write(HEADER_GUARD) + + test_prefix = {} + + unparsed_files = [INPUT_FILE] + while unparsed_files: + filename = unparsed_files.pop(0) + try: + input = open(os.path.join(INPUT_DIR, filename)) + except IOError: + print >> sys.stderr, "WARNING: %s does not exist (skipped)." % filename + continue + + for url in input: + url = re.sub("//.*", "", url) + url = re.sub("#.*", "", url) + url = url.strip() + # Some filename has options before them, for example, + # --min-version 1.0.2 testname.html + pos = url.rfind(" ") + if pos != -1: + url = url[pos+1:] + + if not url: + continue + + # Cannot use os.path.join() because Windows with use "\\" but this path + # is sent through javascript. + if os.path.dirname(filename): + url = "%s/%s" % (os.path.dirname(filename), url) + + # Queue all text files for parsing, because test list URLs are nested + # through .txt files. + if re.match(".+\.txt\s*$", url): + unparsed_files.append(url) + + # Convert the filename to a valid test name and output the gtest code. + else: + name = os.path.splitext(url)[0] + name = re.sub("\W+", "_", name) + if os.path.exists(os.path.join(INPUT_DIR, url)): + output.write('CONFORMANCE_TEST(%s,\n "%s");\n' % (name, url)) + else: + print >> sys.stderr, "WARNING: %s does not exist (skipped)." % url + input.close() + + output.write(HEADER_GUARD_END) + output.close() + return 0 + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/content/browser/gpu/test_support_gpu.gypi b/content/browser/gpu/test_support_gpu.gypi new file mode 100644 index 0000000..13ea57c --- /dev/null +++ b/content/browser/gpu/test_support_gpu.gypi @@ -0,0 +1,71 @@ +# Copyright (c) 2012 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 is meant to be included into targets which run gpu tests. +{ + 'variables': { + 'test_list_out_dir': '<(SHARED_INTERMEDIATE_DIR)/content/test/gpu', + 'src_dir': '../../..', + }, + 'defines': [ + 'HAS_OUT_OF_PROC_TEST_RUNNER', + ], + 'include_dirs': [ + '<(src_dir)', + '<(test_list_out_dir)', + ], + # hard_dependency is necessary for this target because it has actions + # that generate a header file included by dependent targets. The header + # file must be generated before the dependents are compiled. The usual + # semantics are to allow the two targets to build concurrently. + 'hard_dependency': 1, + 'conditions': [ + ['OS=="win"', { + 'include_dirs': [ + '<(DEPTH)/third_party/wtl/include', + ], + 'sources': [ + '<(SHARED_INTERMEDIATE_DIR)/content/content_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/net/net_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_chromium_resources.rc', + '<(SHARED_INTERMEDIATE_DIR)/webkit/webkit_resources.rc', + ], + 'conditions': [ + ['win_use_allocator_shim==1', { + 'dependencies': [ + '../base/allocator/allocator.gyp:allocator', + ], + }], + ], + 'configurations': { + 'Debug': { + 'msvs_settings': { + 'VCLinkerTool': { + 'LinkIncremental': '<(msvs_large_module_debug_link_mode)', + }, + }, + }, + }, + }], + ['OS=="mac"', { + # See comments about "xcode_settings" elsewhere in this file. + 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-ObjC']}, + }], + ['toolkit_uses_gtk == 1', { + 'dependencies': [ + '<(src_dir)/build/linux/system.gyp:gtk', + ], + }], + ['toolkit_uses_gtk == 1 or chromeos==1 or (OS=="linux" and use_aura==1)', { + 'dependencies': [ + '<(src_dir)/build/linux/system.gyp:ssl', + ], + }], + ['toolkit_views==1', { + 'dependencies': [ + '<(src_dir)/ui/views/views.gyp:views', + ], + }], + ], +} diff --git a/content/browser/gpu/webgl_conformance_test_list_autogen.h b/content/browser/gpu/webgl_conformance_test_list_autogen.h new file mode 100644 index 0000000..9f5b5a0 --- /dev/null +++ b/content/browser/gpu/webgl_conformance_test_list_autogen.h @@ -0,0 +1,1080 @@ +// Copyright (c) 2012 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. + +// DO NOT EDIT! This file is auto-generated by +// generate_webgl_conformance_test_list.py +// It is included by webgl_conformance_tests.cc + +#ifndef CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_ +#define CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_ + +CONFORMANCE_TEST(conformance_more_conformance_constants, + "conformance/more/conformance/constants.html"); +CONFORMANCE_TEST(conformance_more_conformance_getContext, + "conformance/more/conformance/getContext.html"); +CONFORMANCE_TEST(conformance_more_conformance_methods, + "conformance/more/conformance/methods.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_A, + "conformance/more/conformance/quickCheckAPI-A.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B1, + "conformance/more/conformance/quickCheckAPI-B1.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B2, + "conformance/more/conformance/quickCheckAPI-B2.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B3, + "conformance/more/conformance/quickCheckAPI-B3.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_B4, + "conformance/more/conformance/quickCheckAPI-B4.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_C, + "conformance/more/conformance/quickCheckAPI-C.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_D_G, + "conformance/more/conformance/quickCheckAPI-D_G.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_G_I, + "conformance/more/conformance/quickCheckAPI-G_I.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_L_S, + "conformance/more/conformance/quickCheckAPI-L_S.html"); +CONFORMANCE_TEST(conformance_more_conformance_quickCheckAPI_S_V, + "conformance/more/conformance/quickCheckAPI-S_V.html"); +CONFORMANCE_TEST(conformance_more_conformance_webGLArrays, + "conformance/more/conformance/webGLArrays.html"); +CONFORMANCE_TEST(conformance_more_functions_bindBuffer, + "conformance/more/functions/bindBuffer.html"); +CONFORMANCE_TEST(conformance_more_functions_bindBufferBadArgs, + "conformance/more/functions/bindBufferBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_bindFramebufferLeaveNonZero, + "conformance/more/functions/bindFramebufferLeaveNonZero.html"); +CONFORMANCE_TEST(conformance_more_functions_bufferData, + "conformance/more/functions/bufferData.html"); +CONFORMANCE_TEST(conformance_more_functions_bufferDataBadArgs, + "conformance/more/functions/bufferDataBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_bufferSubData, + "conformance/more/functions/bufferSubData.html"); +CONFORMANCE_TEST(conformance_more_functions_bufferSubDataBadArgs, + "conformance/more/functions/bufferSubDataBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_copyTexImage2D, + "conformance/more/functions/copyTexImage2D.html"); +CONFORMANCE_TEST(conformance_more_functions_copyTexImage2DBadArgs, + "conformance/more/functions/copyTexImage2DBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_copyTexSubImage2D, + "conformance/more/functions/copyTexSubImage2D.html"); +CONFORMANCE_TEST(conformance_more_functions_copyTexSubImage2DBadArgs, + "conformance/more/functions/copyTexSubImage2DBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_deleteBufferBadArgs, + "conformance/more/functions/deleteBufferBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_drawArrays, + "conformance/more/functions/drawArrays.html"); +CONFORMANCE_TEST(conformance_more_functions_drawArraysOutOfBounds, + "conformance/more/functions/drawArraysOutOfBounds.html"); +CONFORMANCE_TEST(conformance_more_functions_drawElements, + "conformance/more/functions/drawElements.html"); +CONFORMANCE_TEST(conformance_more_functions_drawElementsBadArgs, + "conformance/more/functions/drawElementsBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_isTests, + "conformance/more/functions/isTests.html"); +CONFORMANCE_TEST(conformance_more_functions_isTestsBadArgs, + "conformance/more/functions/isTestsBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_readPixels, + "conformance/more/functions/readPixels.html"); +CONFORMANCE_TEST(conformance_more_functions_readPixelsBadArgs, + "conformance/more/functions/readPixelsBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_texImage2D, + "conformance/more/functions/texImage2D.html"); +CONFORMANCE_TEST(conformance_more_functions_texImage2DBadArgs, + "conformance/more/functions/texImage2DBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_texImage2DHTML, + "conformance/more/functions/texImage2DHTML.html"); +CONFORMANCE_TEST(conformance_more_functions_texImage2DHTMLBadArgs, + "conformance/more/functions/texImage2DHTMLBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_texSubImage2D, + "conformance/more/functions/texSubImage2D.html"); +CONFORMANCE_TEST(conformance_more_functions_texSubImage2DBadArgs, + "conformance/more/functions/texSubImage2DBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_texSubImage2DHTML, + "conformance/more/functions/texSubImage2DHTML.html"); +CONFORMANCE_TEST(conformance_more_functions_texSubImage2DHTMLBadArgs, + "conformance/more/functions/texSubImage2DHTMLBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformf, + "conformance/more/functions/uniformf.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformfBadArgs, + "conformance/more/functions/uniformfBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformfArrayLen1, + "conformance/more/functions/uniformfArrayLen1.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformi, + "conformance/more/functions/uniformi.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformiBadArgs, + "conformance/more/functions/uniformiBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformMatrix, + "conformance/more/functions/uniformMatrix.html"); +CONFORMANCE_TEST(conformance_more_functions_uniformMatrixBadArgs, + "conformance/more/functions/uniformMatrixBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_vertexAttrib, + "conformance/more/functions/vertexAttrib.html"); +CONFORMANCE_TEST(conformance_more_functions_vertexAttribBadArgs, + "conformance/more/functions/vertexAttribBadArgs.html"); +CONFORMANCE_TEST(conformance_more_functions_vertexAttribPointer, + "conformance/more/functions/vertexAttribPointer.html"); +CONFORMANCE_TEST(conformance_more_functions_vertexAttribPointerBadArgs, + "conformance/more/functions/vertexAttribPointerBadArgs.html"); +CONFORMANCE_TEST(conformance_more_glsl_arrayOutOfBounds, + "conformance/more/glsl/arrayOutOfBounds.html"); +CONFORMANCE_TEST(conformance_more_glsl_uniformOutOfBounds, + "conformance/more/glsl/uniformOutOfBounds.html"); +CONFORMANCE_TEST(conformance_attribs_gl_enable_vertex_attrib, + "conformance/attribs/gl-enable-vertex-attrib.html"); +CONFORMANCE_TEST(conformance_attribs_gl_vertex_attrib_render, + "conformance/attribs/gl-vertex-attrib-render.html"); +CONFORMANCE_TEST(conformance_attribs_gl_disabled_vertex_attrib, + "conformance/attribs/gl-disabled-vertex-attrib.html"); +CONFORMANCE_TEST(conformance_attribs_gl_vertex_attrib_zero_issues, + "conformance/attribs/gl-vertex-attrib-zero-issues.html"); +CONFORMANCE_TEST(conformance_attribs_gl_vertex_attrib, + "conformance/attribs/gl-vertex-attrib.html"); +CONFORMANCE_TEST(conformance_attribs_gl_vertexattribpointer_offsets, + "conformance/attribs/gl-vertexattribpointer-offsets.html"); +CONFORMANCE_TEST(conformance_attribs_gl_vertexattribpointer, + "conformance/attribs/gl-vertexattribpointer.html"); +CONFORMANCE_TEST(conformance_buffers_buffer_bind_test, + "conformance/buffers/buffer-bind-test.html"); +CONFORMANCE_TEST(conformance_buffers_buffer_data_array_buffer, + "conformance/buffers/buffer-data-array-buffer.html"); +CONFORMANCE_TEST(conformance_buffers_index_validation_copies_indices, + "conformance/buffers/index-validation-copies-indices.html"); +CONFORMANCE_TEST(conformance_buffers_index_validation_crash_with_buffer_sub_data, + "conformance/buffers/index-validation-crash-with-buffer-sub-data.html"); +CONFORMANCE_TEST(conformance_buffers_index_validation_verifies_too_many_indices, + "conformance/buffers/index-validation-verifies-too-many-indices.html"); +CONFORMANCE_TEST(conformance_buffers_index_validation_with_resized_buffer, + "conformance/buffers/index-validation-with-resized-buffer.html"); +CONFORMANCE_TEST(conformance_buffers_index_validation, + "conformance/buffers/index-validation.html"); +CONFORMANCE_TEST(conformance_canvas_buffer_offscreen_test, + "conformance/canvas/buffer-offscreen-test.html"); +CONFORMANCE_TEST(conformance_canvas_buffer_preserve_test, + "conformance/canvas/buffer-preserve-test.html"); +CONFORMANCE_TEST(conformance_canvas_canvas_test, + "conformance/canvas/canvas-test.html"); +CONFORMANCE_TEST(conformance_canvas_canvas_zero_size, + "conformance/canvas/canvas-zero-size.html"); +CONFORMANCE_TEST(conformance_canvas_drawingbuffer_static_canvas_test, + "conformance/canvas/drawingbuffer-static-canvas-test.html"); +CONFORMANCE_TEST(conformance_canvas_drawingbuffer_test, + "conformance/canvas/drawingbuffer-test.html"); +CONFORMANCE_TEST(conformance_canvas_framebuffer_bindings_unaffected_on_resize, + "conformance/canvas/framebuffer-bindings-unaffected-on-resize.html"); +CONFORMANCE_TEST(conformance_canvas_texture_bindings_unaffected_on_resize, + "conformance/canvas/texture-bindings-unaffected-on-resize.html"); +CONFORMANCE_TEST(conformance_canvas_viewport_unchanged_upon_resize, + "conformance/canvas/viewport-unchanged-upon-resize.html"); +CONFORMANCE_TEST(conformance_context_constants, + "conformance/context/constants.html"); +CONFORMANCE_TEST(conformance_context_context_attribute_preserve_drawing_buffer, + "conformance/context/context-attribute-preserve-drawing-buffer.html"); +CONFORMANCE_TEST(conformance_context_context_attributes_alpha_depth_stencil_antialias, + "conformance/context/context-attributes-alpha-depth-stencil-antialias.html"); +CONFORMANCE_TEST(conformance_context_context_creation_and_destruction, + "conformance/context/context-creation-and-destruction.html"); +CONFORMANCE_TEST(conformance_context_context_lost_restored, + "conformance/context/context-lost-restored.html"); +CONFORMANCE_TEST(conformance_context_context_lost, + "conformance/context/context-lost.html"); +CONFORMANCE_TEST(conformance_context_context_type_test, + "conformance/context/context-type-test.html"); +CONFORMANCE_TEST(conformance_context_incorrect_context_object_behaviour, + "conformance/context/incorrect-context-object-behaviour.html"); +CONFORMANCE_TEST(conformance_context_methods, + "conformance/context/methods.html"); +CONFORMANCE_TEST(conformance_context_premultiplyalpha_test, + "conformance/context/premultiplyalpha-test.html"); +CONFORMANCE_TEST(conformance_context_resource_sharing_test, + "conformance/context/resource-sharing-test.html"); +CONFORMANCE_TEST(conformance_extensions_get_extension, + "conformance/extensions/get-extension.html"); +CONFORMANCE_TEST(conformance_extensions_oes_standard_derivatives, + "conformance/extensions/oes-standard-derivatives.html"); +CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_canvas, + "conformance/extensions/oes-texture-float-with-canvas.html"); +CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_image_data, + "conformance/extensions/oes-texture-float-with-image-data.html"); +CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_image, + "conformance/extensions/oes-texture-float-with-image.html"); +CONFORMANCE_TEST(conformance_extensions_oes_texture_float_with_video, + "conformance/extensions/oes-texture-float-with-video.html"); +CONFORMANCE_TEST(conformance_extensions_oes_texture_float, + "conformance/extensions/oes-texture-float.html"); +CONFORMANCE_TEST(conformance_extensions_oes_vertex_array_object, + "conformance/extensions/oes-vertex-array-object.html"); +CONFORMANCE_TEST(conformance_extensions_webgl_debug_renderer_info, + "conformance/extensions/webgl-debug-renderer-info.html"); +CONFORMANCE_TEST(conformance_extensions_webgl_debug_shaders, + "conformance/extensions/webgl-debug-shaders.html"); +CONFORMANCE_TEST(conformance_extensions_webgl_compressed_texture_s3tc, + "conformance/extensions/webgl-compressed-texture-s3tc.html"); +CONFORMANCE_TEST(conformance_extensions_ext_texture_filter_anisotropic, + "conformance/extensions/ext-texture-filter-anisotropic.html"); +CONFORMANCE_TEST(conformance_limits_gl_min_attribs, + "conformance/limits/gl-min-attribs.html"); +CONFORMANCE_TEST(conformance_limits_gl_max_texture_dimensions, + "conformance/limits/gl-max-texture-dimensions.html"); +CONFORMANCE_TEST(conformance_limits_gl_min_textures, + "conformance/limits/gl-min-textures.html"); +CONFORMANCE_TEST(conformance_limits_gl_min_uniforms, + "conformance/limits/gl-min-uniforms.html"); +CONFORMANCE_TEST(conformance_misc_bad_arguments_test, + "conformance/misc/bad-arguments-test.html"); +CONFORMANCE_TEST(conformance_misc_delayed_drawing, + "conformance/misc/delayed-drawing.html"); +CONFORMANCE_TEST(conformance_misc_error_reporting, + "conformance/misc/error-reporting.html"); +CONFORMANCE_TEST(conformance_misc_instanceof_test, + "conformance/misc/instanceof-test.html"); +CONFORMANCE_TEST(conformance_misc_invalid_passed_params, + "conformance/misc/invalid-passed-params.html"); +CONFORMANCE_TEST(conformance_misc_is_object, + "conformance/misc/is-object.html"); +CONFORMANCE_TEST(conformance_misc_null_object_behaviour, + "conformance/misc/null-object-behaviour.html"); +CONFORMANCE_TEST(conformance_misc_functions_returning_strings, + "conformance/misc/functions-returning-strings.html"); +CONFORMANCE_TEST(conformance_misc_object_deletion_behaviour, + "conformance/misc/object-deletion-behaviour.html"); +CONFORMANCE_TEST(conformance_misc_shader_precision_format, + "conformance/misc/shader-precision-format.html"); +CONFORMANCE_TEST(conformance_misc_type_conversion_test, + "conformance/misc/type-conversion-test.html"); +CONFORMANCE_TEST(conformance_misc_uninitialized_test, + "conformance/misc/uninitialized-test.html"); +CONFORMANCE_TEST(conformance_misc_webgl_specific, + "conformance/misc/webgl-specific.html"); +CONFORMANCE_TEST(conformance_programs_get_active_test, + "conformance/programs/get-active-test.html"); +CONFORMANCE_TEST(conformance_programs_gl_bind_attrib_location_test, + "conformance/programs/gl-bind-attrib-location-test.html"); +CONFORMANCE_TEST(conformance_programs_gl_bind_attrib_location_long_names_test, + "conformance/programs/gl-bind-attrib-location-long-names-test.html"); +CONFORMANCE_TEST(conformance_programs_gl_get_active_attribute, + "conformance/programs/gl-get-active-attribute.html"); +CONFORMANCE_TEST(conformance_programs_gl_get_active_uniform, + "conformance/programs/gl-get-active-uniform.html"); +CONFORMANCE_TEST(conformance_programs_gl_getshadersource, + "conformance/programs/gl-getshadersource.html"); +CONFORMANCE_TEST(conformance_programs_gl_shader_test, + "conformance/programs/gl-shader-test.html"); +CONFORMANCE_TEST(conformance_programs_invalid_UTF_16, + "conformance/programs/invalid-UTF-16.html"); +CONFORMANCE_TEST(conformance_programs_program_test, + "conformance/programs/program-test.html"); +CONFORMANCE_TEST(conformance_programs_use_program_crash_with_discard_in_fragment_shader, + "conformance/programs/use-program-crash-with-discard-in-fragment-shader.html"); +CONFORMANCE_TEST(conformance_reading_read_pixels_pack_alignment, + "conformance/reading/read-pixels-pack-alignment.html"); +CONFORMANCE_TEST(conformance_reading_read_pixels_test, + "conformance/reading/read-pixels-test.html"); +CONFORMANCE_TEST(conformance_renderbuffers_framebuffer_object_attachment, + "conformance/renderbuffers/framebuffer-object-attachment.html"); +CONFORMANCE_TEST(conformance_renderbuffers_framebuffer_state_restoration, + "conformance/renderbuffers/framebuffer-state-restoration.html"); +CONFORMANCE_TEST(conformance_renderbuffers_framebuffer_test, + "conformance/renderbuffers/framebuffer-test.html"); +CONFORMANCE_TEST(conformance_renderbuffers_renderbuffer_initialization, + "conformance/renderbuffers/renderbuffer-initialization.html"); +CONFORMANCE_TEST(conformance_rendering_culling, + "conformance/rendering/culling.html"); +CONFORMANCE_TEST(conformance_rendering_draw_arrays_out_of_bounds, + "conformance/rendering/draw-arrays-out-of-bounds.html"); +CONFORMANCE_TEST(conformance_rendering_draw_elements_out_of_bounds, + "conformance/rendering/draw-elements-out-of-bounds.html"); +CONFORMANCE_TEST(conformance_rendering_gl_clear, + "conformance/rendering/gl-clear.html"); +CONFORMANCE_TEST(conformance_rendering_gl_drawelements, + "conformance/rendering/gl-drawelements.html"); +CONFORMANCE_TEST(conformance_rendering_gl_scissor_test, + "conformance/rendering/gl-scissor-test.html"); +CONFORMANCE_TEST(conformance_rendering_more_than_65536_indices, + "conformance/rendering/more-than-65536-indices.html"); +CONFORMANCE_TEST(conformance_rendering_point_size, + "conformance/rendering/point-size.html"); +CONFORMANCE_TEST(conformance_rendering_triangle, + "conformance/rendering/triangle.html"); +CONFORMANCE_TEST(conformance_rendering_line_loop_tri_fan, + "conformance/rendering/line-loop-tri-fan.html"); +CONFORMANCE_TEST(conformance_state_gl_enable_enum_test, + "conformance/state/gl-enable-enum-test.html"); +CONFORMANCE_TEST(conformance_state_gl_enum_tests, + "conformance/state/gl-enum-tests.html"); +CONFORMANCE_TEST(conformance_state_gl_get_calls, + "conformance/state/gl-get-calls.html"); +CONFORMANCE_TEST(conformance_state_gl_geterror, + "conformance/state/gl-geterror.html"); +CONFORMANCE_TEST(conformance_state_gl_getstring, + "conformance/state/gl-getstring.html"); +CONFORMANCE_TEST(conformance_state_gl_object_get_calls, + "conformance/state/gl-object-get-calls.html"); +CONFORMANCE_TEST(conformance_textures_compressed_tex_image, + "conformance/textures/compressed-tex-image.html"); +CONFORMANCE_TEST(conformance_textures_copy_tex_image_and_sub_image_2d, + "conformance/textures/copy-tex-image-and-sub-image-2d.html"); +CONFORMANCE_TEST(conformance_textures_gl_pixelstorei, + "conformance/textures/gl-pixelstorei.html"); +CONFORMANCE_TEST(conformance_textures_gl_teximage, + "conformance/textures/gl-teximage.html"); +CONFORMANCE_TEST(conformance_textures_origin_clean_conformance, + "conformance/textures/origin-clean-conformance.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_array_buffer_view, + "conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas, + "conformance/textures/tex-image-and-sub-image-2d-with-canvas.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas_rgb565, + "conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas_rgba4444, + "conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_canvas_rgba5551, + "conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data, + "conformance/textures/tex-image-and-sub-image-2d-with-image-data.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data_rgb565, + "conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data_rgba4444, + "conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgba4444.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_data_rgba5551, + "conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgba5551.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image, + "conformance/textures/tex-image-and-sub-image-2d-with-image.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_rgb565, + "conformance/textures/tex-image-and-sub-image-2d-with-image-rgb565.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_rgba4444, + "conformance/textures/tex-image-and-sub-image-2d-with-image-rgba4444.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_image_rgba5551, + "conformance/textures/tex-image-and-sub-image-2d-with-image-rgba5551.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video, + "conformance/textures/tex-image-and-sub-image-2d-with-video.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video_rgb565, + "conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video_rgba4444, + "conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_sub_image_2d_with_video_rgba5551, + "conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_and_uniform_binding_bugs, + "conformance/textures/tex-image-and-uniform-binding-bugs.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_with_format_and_type, + "conformance/textures/tex-image-with-format-and-type.html"); +CONFORMANCE_TEST(conformance_textures_tex_image_with_invalid_data, + "conformance/textures/tex-image-with-invalid-data.html"); +CONFORMANCE_TEST(conformance_textures_tex_input_validation, + "conformance/textures/tex-input-validation.html"); +CONFORMANCE_TEST(conformance_textures_tex_sub_image_2d_bad_args, + "conformance/textures/tex-sub-image-2d-bad-args.html"); +CONFORMANCE_TEST(conformance_textures_tex_sub_image_2d, + "conformance/textures/tex-sub-image-2d.html"); +CONFORMANCE_TEST(conformance_textures_texparameter_test, + "conformance/textures/texparameter-test.html"); +CONFORMANCE_TEST(conformance_textures_texture_active_bind_2, + "conformance/textures/texture-active-bind-2.html"); +CONFORMANCE_TEST(conformance_textures_texture_active_bind, + "conformance/textures/texture-active-bind.html"); +CONFORMANCE_TEST(conformance_textures_texture_attachment_formats, + "conformance/textures/texture-attachment-formats.html"); +CONFORMANCE_TEST(conformance_textures_texture_clear, + "conformance/textures/texture-clear.html"); +CONFORMANCE_TEST(conformance_textures_texture_complete, + "conformance/textures/texture-complete.html"); +CONFORMANCE_TEST(conformance_textures_texture_formats_test, + "conformance/textures/texture-formats-test.html"); +CONFORMANCE_TEST(conformance_textures_texture_mips, + "conformance/textures/texture-mips.html"); +CONFORMANCE_TEST(conformance_textures_texture_npot_video, + "conformance/textures/texture-npot-video.html"); +CONFORMANCE_TEST(conformance_textures_texture_npot, + "conformance/textures/texture-npot.html"); +CONFORMANCE_TEST(conformance_textures_texture_size, + "conformance/textures/texture-size.html"); +CONFORMANCE_TEST(conformance_textures_texture_size_cube_maps, + "conformance/textures/texture-size-cube-maps.html"); +CONFORMANCE_TEST(conformance_textures_texture_transparent_pixels_initialized, + "conformance/textures/texture-transparent-pixels-initialized.html"); +CONFORMANCE_TEST(conformance_textures_texture_upload_cube_maps, + "conformance/textures/texture-upload-cube-maps.html"); +CONFORMANCE_TEST(conformance_typedarrays_array_buffer_crash, + "conformance/typedarrays/array-buffer-crash.html"); +CONFORMANCE_TEST(conformance_typedarrays_array_buffer_view_crash, + "conformance/typedarrays/array-buffer-view-crash.html"); +CONFORMANCE_TEST(conformance_typedarrays_array_unit_tests, + "conformance/typedarrays/array-unit-tests.html"); +CONFORMANCE_TEST(conformance_typedarrays_data_view_crash, + "conformance/typedarrays/data-view-crash.html"); +CONFORMANCE_TEST(conformance_typedarrays_data_view_test, + "conformance/typedarrays/data-view-test.html"); +CONFORMANCE_TEST(conformance_uniforms_gl_uniform_arrays, + "conformance/uniforms/gl-uniform-arrays.html"); +CONFORMANCE_TEST(conformance_uniforms_gl_uniform_bool, + "conformance/uniforms/gl-uniform-bool.html"); +CONFORMANCE_TEST(conformance_uniforms_gl_uniformmatrix4fv, + "conformance/uniforms/gl-uniformmatrix4fv.html"); +CONFORMANCE_TEST(conformance_uniforms_gl_unknown_uniform, + "conformance/uniforms/gl-unknown-uniform.html"); +CONFORMANCE_TEST(conformance_uniforms_null_uniform_location, + "conformance/uniforms/null-uniform-location.html"); +CONFORMANCE_TEST(conformance_uniforms_uniform_default_values, + "conformance/uniforms/uniform-default-values.html"); +CONFORMANCE_TEST(conformance_uniforms_uniform_location, + "conformance/uniforms/uniform-location.html"); +CONFORMANCE_TEST(conformance_uniforms_uniform_samplers_test, + "conformance/uniforms/uniform-samplers-test.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function, + "conformance/glsl/functions/glsl-function.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_abs, + "conformance/glsl/functions/glsl-function-abs.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_acos, + "conformance/glsl/functions/glsl-function-acos.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_asin, + "conformance/glsl/functions/glsl-function-asin.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_atan, + "conformance/glsl/functions/glsl-function-atan.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_atan_xy, + "conformance/glsl/functions/glsl-function-atan-xy.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_ceil, + "conformance/glsl/functions/glsl-function-ceil.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_clamp_float, + "conformance/glsl/functions/glsl-function-clamp-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_clamp_gentype, + "conformance/glsl/functions/glsl-function-clamp-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_cos, + "conformance/glsl/functions/glsl-function-cos.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_cross, + "conformance/glsl/functions/glsl-function-cross.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_distance, + "conformance/glsl/functions/glsl-function-distance.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_dot, + "conformance/glsl/functions/glsl-function-dot.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_faceforward, + "conformance/glsl/functions/glsl-function-faceforward.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_floor, + "conformance/glsl/functions/glsl-function-floor.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_fract, + "conformance/glsl/functions/glsl-function-fract.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_length, + "conformance/glsl/functions/glsl-function-length.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_max_float, + "conformance/glsl/functions/glsl-function-max-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_max_gentype, + "conformance/glsl/functions/glsl-function-max-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_min_float, + "conformance/glsl/functions/glsl-function-min-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_min_gentype, + "conformance/glsl/functions/glsl-function-min-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mix_float, + "conformance/glsl/functions/glsl-function-mix-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mix_gentype, + "conformance/glsl/functions/glsl-function-mix-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mod_float, + "conformance/glsl/functions/glsl-function-mod-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_mod_gentype, + "conformance/glsl/functions/glsl-function-mod-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_normalize, + "conformance/glsl/functions/glsl-function-normalize.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_reflect, + "conformance/glsl/functions/glsl-function-reflect.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_sign, + "conformance/glsl/functions/glsl-function-sign.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_sin, + "conformance/glsl/functions/glsl-function-sin.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_step_float, + "conformance/glsl/functions/glsl-function-step-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_step_gentype, + "conformance/glsl/functions/glsl-function-step-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_smoothstep_float, + "conformance/glsl/functions/glsl-function-smoothstep-float.html"); +CONFORMANCE_TEST(conformance_glsl_functions_glsl_function_smoothstep_gentype, + "conformance/glsl/functions/glsl-function-smoothstep-gentype.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_float_vert, + "conformance/glsl/implicit/add_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_mat2_vert, + "conformance/glsl/implicit/add_int_mat2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_mat3_vert, + "conformance/glsl/implicit/add_int_mat3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_mat4_vert, + "conformance/glsl/implicit/add_int_mat4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_vec2_vert, + "conformance/glsl/implicit/add_int_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_vec3_vert, + "conformance/glsl/implicit/add_int_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_int_vec4_vert, + "conformance/glsl/implicit/add_int_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_ivec2_vec2_vert, + "conformance/glsl/implicit/add_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_ivec3_vec3_vert, + "conformance/glsl/implicit/add_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_add_ivec4_vec4_vert, + "conformance/glsl/implicit/add_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_assign_int_to_float_vert, + "conformance/glsl/implicit/assign_int_to_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_assign_ivec2_to_vec2_vert, + "conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_assign_ivec3_to_vec3_vert, + "conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_assign_ivec4_to_vec4_vert, + "conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_construct_struct_vert, + "conformance/glsl/implicit/construct_struct.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_float_vert, + "conformance/glsl/implicit/divide_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_mat2_vert, + "conformance/glsl/implicit/divide_int_mat2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_mat3_vert, + "conformance/glsl/implicit/divide_int_mat3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_mat4_vert, + "conformance/glsl/implicit/divide_int_mat4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_vec2_vert, + "conformance/glsl/implicit/divide_int_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_vec3_vert, + "conformance/glsl/implicit/divide_int_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_int_vec4_vert, + "conformance/glsl/implicit/divide_int_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_ivec2_vec2_vert, + "conformance/glsl/implicit/divide_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_ivec3_vec3_vert, + "conformance/glsl/implicit/divide_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_divide_ivec4_vec4_vert, + "conformance/glsl/implicit/divide_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_equal_int_float_vert, + "conformance/glsl/implicit/equal_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_equal_ivec2_vec2_vert, + "conformance/glsl/implicit/equal_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_equal_ivec3_vec3_vert, + "conformance/glsl/implicit/equal_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_equal_ivec4_vec4_vert, + "conformance/glsl/implicit/equal_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_function_int_float_vert, + "conformance/glsl/implicit/function_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_function_ivec2_vec2_vert, + "conformance/glsl/implicit/function_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_function_ivec3_vec3_vert, + "conformance/glsl/implicit/function_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_function_ivec4_vec4_vert, + "conformance/glsl/implicit/function_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_greater_than_vert, + "conformance/glsl/implicit/greater_than.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_greater_than_equal_vert, + "conformance/glsl/implicit/greater_than_equal.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_less_than_vert, + "conformance/glsl/implicit/less_than.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_less_than_equal_vert, + "conformance/glsl/implicit/less_than_equal.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_float_vert, + "conformance/glsl/implicit/multiply_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_mat2_vert, + "conformance/glsl/implicit/multiply_int_mat2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_mat3_vert, + "conformance/glsl/implicit/multiply_int_mat3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_mat4_vert, + "conformance/glsl/implicit/multiply_int_mat4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_vec2_vert, + "conformance/glsl/implicit/multiply_int_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_vec3_vert, + "conformance/glsl/implicit/multiply_int_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_int_vec4_vert, + "conformance/glsl/implicit/multiply_int_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_ivec2_vec2_vert, + "conformance/glsl/implicit/multiply_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_ivec3_vec3_vert, + "conformance/glsl/implicit/multiply_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_multiply_ivec4_vec4_vert, + "conformance/glsl/implicit/multiply_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_int_float_vert, + "conformance/glsl/implicit/not_equal_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_ivec2_vec2_vert, + "conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_ivec3_vec3_vert, + "conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_not_equal_ivec4_vec4_vert, + "conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_float_vert, + "conformance/glsl/implicit/subtract_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_mat2_vert, + "conformance/glsl/implicit/subtract_int_mat2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_mat3_vert, + "conformance/glsl/implicit/subtract_int_mat3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_mat4_vert, + "conformance/glsl/implicit/subtract_int_mat4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_vec2_vert, + "conformance/glsl/implicit/subtract_int_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_vec3_vert, + "conformance/glsl/implicit/subtract_int_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_int_vec4_vert, + "conformance/glsl/implicit/subtract_int_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_ivec2_vec2_vert, + "conformance/glsl/implicit/subtract_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_ivec3_vec3_vert, + "conformance/glsl/implicit/subtract_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_subtract_ivec4_vec4_vert, + "conformance/glsl/implicit/subtract_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_ternary_int_float_vert, + "conformance/glsl/implicit/ternary_int_float.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_ternary_ivec2_vec2_vert, + "conformance/glsl/implicit/ternary_ivec2_vec2.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_ternary_ivec3_vec3_vert, + "conformance/glsl/implicit/ternary_ivec3_vec3.vert.html"); +CONFORMANCE_TEST(conformance_glsl_implicit_ternary_ivec4_vec4_vert, + "conformance/glsl/implicit/ternary_ivec4_vec4.vert.html"); +CONFORMANCE_TEST(conformance_glsl_matrices_glsl_mat4_to_mat3, + "conformance/glsl/matrices/glsl-mat4-to-mat3.html"); +CONFORMANCE_TEST(conformance_glsl_misc_attrib_location_length_limits, + "conformance/glsl/misc/attrib-location-length-limits.html"); +CONFORMANCE_TEST(conformance_glsl_misc_embedded_struct_definitions_forbidden, + "conformance/glsl/misc/embedded-struct-definitions-forbidden.html"); +CONFORMANCE_TEST(conformance_glsl_misc_glsl_function_nodes, + "conformance/glsl/misc/glsl-function-nodes.html"); +CONFORMANCE_TEST(conformance_glsl_misc_glsl_vertex_branch, + "conformance/glsl/misc/glsl-vertex-branch.html"); +CONFORMANCE_TEST(conformance_glsl_misc_glsl_long_variable_names, + "conformance/glsl/misc/glsl-long-variable-names.html"); +CONFORMANCE_TEST(conformance_glsl_misc_non_ascii_comments_vert, + "conformance/glsl/misc/non-ascii-comments.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_non_ascii_vert, + "conformance/glsl/misc/non-ascii.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_re_compile_re_link, + "conformance/glsl/misc/re-compile-re-link.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_256_character_define, + "conformance/glsl/misc/shader-with-256-character-define.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_256_character_identifier_frag, + "conformance/glsl/misc/shader-with-256-character-identifier.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_257_character_define, + "conformance/glsl/misc/shader-with-257-character-define.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_257_character_identifier_frag, + "conformance/glsl/misc/shader-with-257-character-identifier.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with__webgl_identifier_vert, + "conformance/glsl/misc/shader-with-_webgl-identifier.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_arbitrary_indexing_frag, + "conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_arbitrary_indexing_vert, + "conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_attrib_array_vert, + "conformance/glsl/misc/shader-with-attrib-array.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_attrib_struct_vert, + "conformance/glsl/misc/shader-with-attrib-struct.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_clipvertex_vert, + "conformance/glsl/misc/shader-with-clipvertex.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_conditional_scoping, + "conformance/glsl/misc/shader-with-conditional-scoping.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_conditional_scoping_negative, + "conformance/glsl/misc/shader-with-conditional-scoping-negative.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_default_precision_frag, + "conformance/glsl/misc/shader-with-default-precision.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_default_precision_vert, + "conformance/glsl/misc/shader-with-default-precision.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_define_line_continuation_frag, + "conformance/glsl/misc/shader-with-define-line-continuation.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_dfdx_no_ext_frag, + "conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_dfdx_frag, + "conformance/glsl/misc/shader-with-dfdx.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_do_loop, + "conformance/glsl/misc/shader-with-do-loop.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_error_directive, + "conformance/glsl/misc/shader-with-error-directive.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_explicit_int_cast_vert, + "conformance/glsl/misc/shader-with-explicit-int-cast.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_float_return_value_frag, + "conformance/glsl/misc/shader-with-float-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_for_scoping, + "conformance/glsl/misc/shader-with-for-scoping.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_for_loop, + "conformance/glsl/misc/shader-with-for-loop.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_frag_depth_frag, + "conformance/glsl/misc/shader-with-frag-depth.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_function_recursion_frag, + "conformance/glsl/misc/shader-with-function-recursion.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_function_scoped_struct, + "conformance/glsl/misc/shader-with-function-scoped-struct.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_functional_scoping, + "conformance/glsl/misc/shader-with-functional-scoping.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_comma_assignment, + "conformance/glsl/misc/shader-with-comma-assignment.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_comma_conditional_assignment, + "conformance/glsl/misc/shader-with-comma-conditional-assignment.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_glcolor_vert, + "conformance/glsl/misc/shader-with-glcolor.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_gles_1_frag, + "conformance/glsl/misc/shader-with-gles-1.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_gles_symbol_frag, + "conformance/glsl/misc/shader-with-gles-symbol.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_glprojectionmatrix_vert, + "conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_implicit_vec3_to_vec4_cast_vert, + "conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_include_vert, + "conformance/glsl/misc/shader-with-include.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_int_return_value_frag, + "conformance/glsl/misc/shader-with-int-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_invalid_identifier_frag, + "conformance/glsl/misc/shader-with-invalid-identifier.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_ivec2_return_value_frag, + "conformance/glsl/misc/shader-with-ivec2-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_ivec3_return_value_frag, + "conformance/glsl/misc/shader-with-ivec3-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_ivec4_return_value_frag, + "conformance/glsl/misc/shader-with-ivec4-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_limited_indexing_frag, + "conformance/glsl/misc/shader-with-limited-indexing.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_hex_int_constant_macro, + "conformance/glsl/misc/shader-with-hex-int-constant-macro.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_long_line, + "conformance/glsl/misc/shader-with-long-line.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_non_ascii_error_frag, + "conformance/glsl/misc/shader-with-non-ascii-error.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_non_reserved_words, + "conformance/glsl/misc/shader-with-non-reserved-words.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_precision_frag, + "conformance/glsl/misc/shader-with-precision.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_quoted_error_frag, + "conformance/glsl/misc/shader-with-quoted-error.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_reserved_words, + "conformance/glsl/misc/shader-with-reserved-words.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_undefined_preprocessor_symbol_frag, + "conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_uniform_in_loop_condition_vert, + "conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec2_return_value_frag, + "conformance/glsl/misc/shader-with-vec2-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec3_return_value_frag, + "conformance/glsl/misc/shader-with-vec3-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec4_return_value_frag, + "conformance/glsl/misc/shader-with-vec4-return-value.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_vec4_vec3_vec4_conditional, + "conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_100_frag, + "conformance/glsl/misc/shader-with-version-100.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_100_vert, + "conformance/glsl/misc/shader-with-version-100.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_120_vert, + "conformance/glsl/misc/shader-with-version-120.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_version_130_vert, + "conformance/glsl/misc/shader-with-version-130.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_webgl_identifier_vert, + "conformance/glsl/misc/shader-with-webgl-identifier.vert.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_while_loop, + "conformance/glsl/misc/shader-with-while-loop.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_without_precision_frag, + "conformance/glsl/misc/shader-without-precision.frag.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shared, + "conformance/glsl/misc/shared.html"); +CONFORMANCE_TEST(conformance_glsl_misc_struct_nesting_exceeds_maximum, + "conformance/glsl/misc/struct-nesting-exceeds-maximum.html"); +CONFORMANCE_TEST(conformance_glsl_misc_struct_nesting_under_maximum, + "conformance/glsl/misc/struct-nesting-under-maximum.html"); +CONFORMANCE_TEST(conformance_glsl_misc_uniform_location_length_limits, + "conformance/glsl/misc/uniform-location-length-limits.html"); +CONFORMANCE_TEST(conformance_glsl_misc_shader_with_short_circuiting_operators, + "conformance/glsl/misc/shader-with-short-circuiting-operators.html"); +CONFORMANCE_TEST(conformance_glsl_reserved__webgl_field_vert, + "conformance/glsl/reserved/_webgl_field.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved__webgl_function_vert, + "conformance/glsl/reserved/_webgl_function.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved__webgl_struct_vert, + "conformance/glsl/reserved/_webgl_struct.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved__webgl_variable_vert, + "conformance/glsl/reserved/_webgl_variable.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved_webgl_field_vert, + "conformance/glsl/reserved/webgl_field.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved_webgl_function_vert, + "conformance/glsl/reserved/webgl_function.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved_webgl_struct_vert, + "conformance/glsl/reserved/webgl_struct.vert.html"); +CONFORMANCE_TEST(conformance_glsl_reserved_webgl_variable_vert, + "conformance/glsl/reserved/webgl_variable.vert.html"); +CONFORMANCE_TEST(conformance_glsl_samplers_glsl_function_texture2d_bias, + "conformance/glsl/samplers/glsl-function-texture2d-bias.html"); +CONFORMANCE_TEST(conformance_glsl_samplers_glsl_function_texture2dlod, + "conformance/glsl/samplers/glsl-function-texture2dlod.html"); +CONFORMANCE_TEST(conformance_glsl_samplers_glsl_function_texture2dproj, + "conformance/glsl/samplers/glsl-function-texture2dproj.html"); +CONFORMANCE_TEST(conformance_glsl_variables_gl_fragcoord, + "conformance/glsl/variables/gl-fragcoord.html"); +CONFORMANCE_TEST(conformance_glsl_variables_gl_frontfacing, + "conformance/glsl/variables/gl-frontfacing.html"); +CONFORMANCE_TEST(conformance_glsl_variables_gl_pointcoord, + "conformance/glsl/variables/gl-pointcoord.html"); +CONFORMANCE_TEST(conformance_ogles_GL_abs_abs_001_to_006, + "conformance/ogles/GL/abs/abs_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_acos_acos_001_to_006, + "conformance/ogles/GL/acos/acos_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_all_all_001_to_004, + "conformance/ogles/GL/all/all_001_to_004.html"); +CONFORMANCE_TEST(conformance_ogles_GL_any_any_001_to_004, + "conformance/ogles/GL/any/any_001_to_004.html"); +CONFORMANCE_TEST(conformance_ogles_GL_array_array_001_to_006, + "conformance/ogles/GL/array/array_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_asin_asin_001_to_006, + "conformance/ogles/GL/asin/asin_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_atan_atan_001_to_008, + "conformance/ogles/GL/atan/atan_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_atan_atan_009_to_012, + "conformance/ogles/GL/atan/atan_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_biConstants_biConstants_001_to_008, + "conformance/ogles/GL/biConstants/biConstants_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_biConstants_biConstants_009_to_016, + "conformance/ogles/GL/biConstants/biConstants_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_biuDepthRange_biuDepthRange_001_to_002, + "conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_001_to_008, + "conformance/ogles/GL/build/build_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_009_to_016, + "conformance/ogles/GL/build/build_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_017_to_024, + "conformance/ogles/GL/build/build_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_025_to_032, + "conformance/ogles/GL/build/build_025_to_032.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_033_to_040, + "conformance/ogles/GL/build/build_033_to_040.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_041_to_048, + "conformance/ogles/GL/build/build_041_to_048.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_049_to_056, + "conformance/ogles/GL/build/build_049_to_056.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_057_to_064, + "conformance/ogles/GL/build/build_057_to_064.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_065_to_072, + "conformance/ogles/GL/build/build_065_to_072.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_073_to_080, + "conformance/ogles/GL/build/build_073_to_080.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_081_to_088, + "conformance/ogles/GL/build/build_081_to_088.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_089_to_096, + "conformance/ogles/GL/build/build_089_to_096.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_097_to_104, + "conformance/ogles/GL/build/build_097_to_104.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_105_to_112, + "conformance/ogles/GL/build/build_105_to_112.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_113_to_120, + "conformance/ogles/GL/build/build_113_to_120.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_121_to_128, + "conformance/ogles/GL/build/build_121_to_128.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_129_to_136, + "conformance/ogles/GL/build/build_129_to_136.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_137_to_144, + "conformance/ogles/GL/build/build_137_to_144.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_145_to_152, + "conformance/ogles/GL/build/build_145_to_152.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_153_to_160, + "conformance/ogles/GL/build/build_153_to_160.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_161_to_168, + "conformance/ogles/GL/build/build_161_to_168.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_169_to_176, + "conformance/ogles/GL/build/build_169_to_176.html"); +CONFORMANCE_TEST(conformance_ogles_GL_build_build_177_to_178, + "conformance/ogles/GL/build/build_177_to_178.html"); +CONFORMANCE_TEST(conformance_ogles_GL_built_in_varying_array_out_of_bounds_built_in_varying_array_out_of_bounds_001_to_001, + "conformance/ogles/GL/built_in_varying_array_out_of_bounds/built_in_varying_array_out_of_bounds_001_to_001.html"); +CONFORMANCE_TEST(conformance_ogles_GL_ceil_ceil_001_to_006, + "conformance/ogles/GL/ceil/ceil_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_clamp_clamp_001_to_006, + "conformance/ogles/GL/clamp/clamp_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_control_flow_control_flow_001_to_008, + "conformance/ogles/GL/control_flow/control_flow_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_control_flow_control_flow_009_to_010, + "conformance/ogles/GL/control_flow/control_flow_009_to_010.html"); +CONFORMANCE_TEST(conformance_ogles_GL_cos_cos_001_to_006, + "conformance/ogles/GL/cos/cos_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_cross_cross_001_to_002, + "conformance/ogles/GL/cross/cross_001_to_002.html"); +CONFORMANCE_TEST(conformance_ogles_GL_default_default_001_to_001, + "conformance/ogles/GL/default/default_001_to_001.html"); +CONFORMANCE_TEST(conformance_ogles_GL_degrees_degrees_001_to_006, + "conformance/ogles/GL/degrees/degrees_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_discard_discard_001_to_002, + "conformance/ogles/GL/discard/discard_001_to_002.html"); +CONFORMANCE_TEST(conformance_ogles_GL_distance_distance_001_to_006, + "conformance/ogles/GL/distance/distance_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_dot_dot_001_to_006, + "conformance/ogles/GL/dot/dot_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_equal_equal_001_to_008, + "conformance/ogles/GL/equal/equal_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_equal_equal_009_to_012, + "conformance/ogles/GL/equal/equal_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_exp_exp_001_to_008, + "conformance/ogles/GL/exp/exp_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_exp_exp_009_to_012, + "conformance/ogles/GL/exp/exp_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_exp2_exp2_001_to_008, + "conformance/ogles/GL/exp2/exp2_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_exp2_exp2_009_to_012, + "conformance/ogles/GL/exp2/exp2_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_faceforward_faceforward_001_to_006, + "conformance/ogles/GL/faceforward/faceforward_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_floor_floor_001_to_006, + "conformance/ogles/GL/floor/floor_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_fract_fract_001_to_006, + "conformance/ogles/GL/fract/fract_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_001_to_008, + "conformance/ogles/GL/functions/functions_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_009_to_016, + "conformance/ogles/GL/functions/functions_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_017_to_024, + "conformance/ogles/GL/functions/functions_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_025_to_032, + "conformance/ogles/GL/functions/functions_025_to_032.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_033_to_040, + "conformance/ogles/GL/functions/functions_033_to_040.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_041_to_048, + "conformance/ogles/GL/functions/functions_041_to_048.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_049_to_056, + "conformance/ogles/GL/functions/functions_049_to_056.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_057_to_064, + "conformance/ogles/GL/functions/functions_057_to_064.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_065_to_072, + "conformance/ogles/GL/functions/functions_065_to_072.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_073_to_080, + "conformance/ogles/GL/functions/functions_073_to_080.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_081_to_088, + "conformance/ogles/GL/functions/functions_081_to_088.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_089_to_096, + "conformance/ogles/GL/functions/functions_089_to_096.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_097_to_104, + "conformance/ogles/GL/functions/functions_097_to_104.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_105_to_112, + "conformance/ogles/GL/functions/functions_105_to_112.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_113_to_120, + "conformance/ogles/GL/functions/functions_113_to_120.html"); +CONFORMANCE_TEST(conformance_ogles_GL_functions_functions_121_to_126, + "conformance/ogles/GL/functions/functions_121_to_126.html"); +CONFORMANCE_TEST(conformance_ogles_GL_gl_FragCoord_gl_FragCoord_001_to_003, + "conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html"); +CONFORMANCE_TEST(conformance_ogles_GL_gl_FrontFacing_gl_FrontFacing_001_to_001, + "conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html"); +CONFORMANCE_TEST(conformance_ogles_GL_greaterThan_greaterThan_001_to_008, + "conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_greaterThanEqual_greaterThanEqual_001_to_008, + "conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_inversesqrt_inversesqrt_001_to_006, + "conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_length_length_001_to_006, + "conformance/ogles/GL/length/length_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_lessThan_lessThan_001_to_008, + "conformance/ogles/GL/lessThan/lessThan_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_lessThanEqual_lessThanEqual_001_to_008, + "conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_log_log_001_to_008, + "conformance/ogles/GL/log/log_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_log_log_009_to_012, + "conformance/ogles/GL/log/log_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_log2_log2_001_to_008, + "conformance/ogles/GL/log2/log2_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_log2_log2_009_to_012, + "conformance/ogles/GL/log2/log2_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_001_to_008, + "conformance/ogles/GL/mat/mat_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_009_to_016, + "conformance/ogles/GL/mat/mat_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_017_to_024, + "conformance/ogles/GL/mat/mat_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_025_to_032, + "conformance/ogles/GL/mat/mat_025_to_032.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_033_to_040, + "conformance/ogles/GL/mat/mat_033_to_040.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat_mat_041_to_046, + "conformance/ogles/GL/mat/mat_041_to_046.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mat3_mat3_001_to_006, + "conformance/ogles/GL/mat3/mat3_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_matrixCompMult_matrixCompMult_001_to_004, + "conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html"); +CONFORMANCE_TEST(conformance_ogles_GL_max_max_001_to_006, + "conformance/ogles/GL/max/max_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_min_min_001_to_006, + "conformance/ogles/GL/min/min_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mix_mix_001_to_006, + "conformance/ogles/GL/mix/mix_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_mod_mod_001_to_008, + "conformance/ogles/GL/mod/mod_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_normalize_normalize_001_to_006, + "conformance/ogles/GL/normalize/normalize_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_not_not_001_to_004, + "conformance/ogles/GL/not/not_001_to_004.html"); +CONFORMANCE_TEST(conformance_ogles_GL_notEqual_notEqual_001_to_008, + "conformance/ogles/GL/notEqual/notEqual_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_notEqual_notEqual_009_to_012, + "conformance/ogles/GL/notEqual/notEqual_009_to_012.html"); +CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_001_to_008, + "conformance/ogles/GL/operators/operators_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_009_to_016, + "conformance/ogles/GL/operators/operators_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_017_to_024, + "conformance/ogles/GL/operators/operators_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_operators_operators_025_to_026, + "conformance/ogles/GL/operators/operators_025_to_026.html"); +CONFORMANCE_TEST(conformance_ogles_GL_pow_pow_001_to_008, + "conformance/ogles/GL/pow/pow_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_pow_pow_009_to_016, + "conformance/ogles/GL/pow/pow_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_pow_pow_017_to_024, + "conformance/ogles/GL/pow/pow_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_radians_radians_001_to_006, + "conformance/ogles/GL/radians/radians_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_reflect_reflect_001_to_006, + "conformance/ogles/GL/reflect/reflect_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_refract_refract_001_to_006, + "conformance/ogles/GL/refract/refract_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_sign_sign_001_to_006, + "conformance/ogles/GL/sign/sign_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_sin_sin_001_to_006, + "conformance/ogles/GL/sin/sin_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_smoothstep_smoothstep_001_to_006, + "conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_sqrt_sqrt_001_to_006, + "conformance/ogles/GL/sqrt/sqrt_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_step_step_001_to_006, + "conformance/ogles/GL/step/step_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_001_to_008, + "conformance/ogles/GL/struct/struct_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_009_to_016, + "conformance/ogles/GL/struct/struct_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_017_to_024, + "conformance/ogles/GL/struct/struct_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_025_to_032, + "conformance/ogles/GL/struct/struct_025_to_032.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_033_to_040, + "conformance/ogles/GL/struct/struct_033_to_040.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_041_to_048, + "conformance/ogles/GL/struct/struct_041_to_048.html"); +CONFORMANCE_TEST(conformance_ogles_GL_struct_struct_049_to_056, + "conformance/ogles/GL/struct/struct_049_to_056.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_001_to_008, + "conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_009_to_016, + "conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_017_to_024, + "conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_025_to_032, + "conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_033_to_040, + "conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_041_to_048, + "conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_049_to_056, + "conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_057_to_064, + "conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_065_to_072, + "conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_073_to_080, + "conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_081_to_088, + "conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_089_to_096, + "conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_097_to_104, + "conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_105_to_112, + "conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html"); +CONFORMANCE_TEST(conformance_ogles_GL_swizzlers_swizzlers_113_to_120, + "conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html"); +CONFORMANCE_TEST(conformance_ogles_GL_tan_tan_001_to_006, + "conformance/ogles/GL/tan/tan_001_to_006.html"); +CONFORMANCE_TEST(conformance_ogles_GL_vec_vec_001_to_008, + "conformance/ogles/GL/vec/vec_001_to_008.html"); +CONFORMANCE_TEST(conformance_ogles_GL_vec_vec_009_to_016, + "conformance/ogles/GL/vec/vec_009_to_016.html"); +CONFORMANCE_TEST(conformance_ogles_GL_vec_vec_017_to_018, + "conformance/ogles/GL/vec/vec_017_to_018.html"); +CONFORMANCE_TEST(conformance_ogles_GL_vec3_vec3_001_to_008, + "conformance/ogles/GL/vec3/vec3_001_to_008.html"); + +#endif // CONTENT_TEST_GPU_WEBGL_CONFORMANCE_TEST_LIST_AUTOGEN_H_ + diff --git a/content/browser/gpu/webgl_conformance_tests.cc b/content/browser/gpu/webgl_conformance_tests.cc new file mode 100644 index 0000000..f9e1010 --- /dev/null +++ b/content/browser/gpu/webgl_conformance_tests.cc @@ -0,0 +1,90 @@ +// Copyright (c) 2012 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 "base/command_line.h" +#include "base/file_util.h" +#include "base/path_service.h" +#include "base/utf_string_conversions.h" +#include "content/public/browser/web_contents.h" +#include "content/public/common/content_paths.h" +#include "content/public/common/content_switches.h" +#include "content/public/test/browser_test_utils.h" +#include "content/shell/shell.h" +#include "content/test/content_browser_test.h" +#include "content/test/content_browser_test_utils.h" +#include "content/test/gpu/gpu_test_config.h" +#include "content/test/gpu/gpu_test_expectations_parser.h" +#include "net/base/net_util.h" + +namespace content { + +class WebGLConformanceTests : public ContentBrowserTest { + public: + WebGLConformanceTests() {} + + virtual void SetUpCommandLine(CommandLine* command_line) { + // Allow privileged WebGL extensions. + command_line->AppendSwitch(switches::kEnablePrivilegedWebGLExtensions); + } + + virtual void SetUpInProcessBrowserTestFixture() { + FilePath webgl_conformance_path; + PathService::Get(base::DIR_SOURCE_ROOT, &webgl_conformance_path); + webgl_conformance_path = webgl_conformance_path.Append( + FILE_PATH_LITERAL("third_party")); + webgl_conformance_path = webgl_conformance_path.Append( + FILE_PATH_LITERAL("webgl_conformance")); + ASSERT_TRUE(file_util::DirectoryExists(webgl_conformance_path)) + << "Missing conformance tests: " << webgl_conformance_path.value(); + + PathService::Get(DIR_TEST_DATA, &test_path_); + test_path_ = test_path_.Append(FILE_PATH_LITERAL("gpu")); + test_path_ = test_path_.Append(FILE_PATH_LITERAL("webgl_conformance.html")); + + ASSERT_TRUE(bot_config_.LoadCurrentConfig(NULL)) + << "Fail to load bot configuration"; + ASSERT_TRUE(bot_config_.IsValid()) + << "Invalid bot configuration"; + + ASSERT_TRUE(test_expectations_.LoadTestExpectations( + GPUTestExpectationsParser::kWebGLConformanceTest)); + } + + void RunTest(const std::string& url) { + std::string test_name = + testing::UnitTest::GetInstance()->current_test_info()->name(); + int32 expectation = + test_expectations_.GetTestExpectation(test_name, bot_config_); + if (expectation != GPUTestExpectationsParser::kGpuTestPass) { + LOG(WARNING) << "Test " << test_name << " is bypassed"; + return; + } + + DOMMessageQueue message_queue; + NavigateToURL(shell(), net::FilePathToFileURL(test_path_)); + + std::string message; + NavigateToURL(shell(), GURL("javascript:start('" + url + "');")); + ASSERT_TRUE(message_queue.WaitForMessage(&message)); + + EXPECT_STREQ("\"SUCCESS\"", message.c_str()) << message; + } + + private: + FilePath test_path_; + GPUTestBotConfig bot_config_; + GPUTestExpectationsParser test_expectations_; +}; + +#define CONFORMANCE_TEST(name, url) \ +IN_PROC_BROWSER_TEST_F(WebGLConformanceTests, MANUAL_##name) { \ + RunTest(url); \ +} + +// The test declarations are located in webgl_conformance_test_list_autogen.h, +// because the list is automatically generated by a script. +// See: generate_webgl_conformance_test_list.py +#include "webgl_conformance_test_list_autogen.h" + +} // namespace content diff --git a/content/content_tests.gypi b/content/content_tests.gypi index 9136d57..7539771 100644 --- a/content/content_tests.gypi +++ b/content/content_tests.gypi @@ -616,6 +616,7 @@ '../skia/skia.gyp:skia', '../testing/gmock.gyp:gmock', '../testing/gtest.gyp:gtest', + '../third_party/mesa/mesa.gyp:osmesa', '../ui/ui.gyp:ui', '../webkit/support/webkit_support.gyp:forms', '../webkit/support/webkit_support.gyp:glue', @@ -623,6 +624,9 @@ 'include_dirs': [ '..', ], + 'includes': [ + 'browser/gpu/test_support_gpu.gypi', + ], 'defines': [ 'HAS_OUT_OF_PROC_TEST_RUNNER', ], @@ -650,6 +654,8 @@ 'browser/download/save_package_browsertest.cc', 'browser/fileapi/blob_layout_browsertest.cc', 'browser/fileapi/file_system_browsertest.cc', + 'browser/gpu/webgl_conformance_tests.cc', + 'browser/gpu/webgl_conformance_test_list_autogen.h', 'browser/in_process_webkit/indexed_db_browsertest.cc', 'browser/in_process_webkit/indexed_db_layout_browsertest.cc', 'browser/media_browsertest.cc', diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc index f49ce92..f6b9361 100644 --- a/content/public/test/browser_test_utils.cc +++ b/content/public/test/browser_test_utils.cc @@ -17,6 +17,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/dom_operation_notification_details.h" #include "content/public/browser/notification_types.h" +#include "content/public/browser/notification_service.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" @@ -569,4 +570,42 @@ TestWebSocketServer::~TestWebSocketServer() { #endif } +DOMMessageQueue::DOMMessageQueue() : waiting_for_message_(false) { + registrar_.Add(this, NOTIFICATION_DOM_OPERATION_RESPONSE, + NotificationService::AllSources()); +} + +DOMMessageQueue::~DOMMessageQueue() {} + +void DOMMessageQueue::Observe(int type, + const NotificationSource& source, + const NotificationDetails& details) { + Details<DomOperationNotificationDetails> dom_op_details(details); + Source<RenderViewHost> sender(source); + message_queue_.push(dom_op_details->json); + if (waiting_for_message_) { + waiting_for_message_ = false; + message_loop_runner_->Quit(); + } +} + +void DOMMessageQueue::ClearQueue() { + message_queue_ = std::queue<std::string>(); +} + +bool DOMMessageQueue::WaitForMessage(std::string* message) { + if (message_queue_.empty()) { + waiting_for_message_ = true; + // This will be quit when a new message comes in. + message_loop_runner_ = new MessageLoopRunner; + message_loop_runner_->Run(); + } + // The queue should not be empty, unless we were quit because of a timeout. + if (message_queue_.empty()) + return false; + if (message) + *message = message_queue_.front(); + return true; +} + } // namespace content diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h index 83ea128..b807e31 100644 --- a/content/public/test/browser_test_utils.h +++ b/content/public/test/browser_test_utils.h @@ -5,6 +5,7 @@ #ifndef CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_ #define CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_ +#include <queue> #include <string> #include <vector> @@ -212,6 +213,37 @@ class TestWebSocketServer { DISALLOW_COPY_AND_ASSIGN(TestWebSocketServer); }; +// Watches for responses from the DOMAutomationController and keeps them in a +// queue. Useful for waiting for a message to be received. +class DOMMessageQueue : public NotificationObserver { + public: + // Constructs a DOMMessageQueue and begins listening for messages from the + // DOMAutomationController. Do not construct this until the browser has + // started. + DOMMessageQueue(); + virtual ~DOMMessageQueue(); + + // Removes all messages in the message queue. + void ClearQueue(); + + // Wait for the next message to arrive. |message| will be set to the next + // message, if not null. Returns true on success. + bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT; + + // Overridden NotificationObserver methods. + virtual void Observe(int type, + const NotificationSource& source, + const NotificationDetails& details) OVERRIDE; + + private: + NotificationRegistrar registrar_; + std::queue<std::string> message_queue_; + bool waiting_for_message_; + scoped_refptr<MessageLoopRunner> message_loop_runner_; + + DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue); +}; + } // namespace content #endif // CONTENT_PUBLIC_TEST_BROWSER_TEST_UTILS_H_ diff --git a/content/test/data/gpu/webgl_conformance.html b/content/test/data/gpu/webgl_conformance.html new file mode 100644 index 0000000..445a150 --- /dev/null +++ b/content/test/data/gpu/webgl_conformance.html @@ -0,0 +1,99 @@ +<html> +<head> +<script type="text/javascript" + src="../../../../third_party/webgl_conformance/resources/webgl-test-harness.js"> +</script> +<script> +// We parse the test list offline and run the harness multiple times with each +// test. Therefore, the version and options do not matter for the browsertests. +// However, we still need to pass in a valid options for the harness to run. +var CONFORMANCE_TEST_VERSION = "1.0.1 (beta)"; +var OPTIONS = { + version: CONFORMANCE_TEST_VERSION +}; + +var BASE_URL = "../../../../third_party/webgl_conformance/"; +var gl = null; +var messages = []; +var numFailures = 0; + +function start(start_url) { + // Report function called by each conformance test. + function report(type, msg, success) { + var reportType = WebGLTestHarnessModule.TestHarness.reportType; + switch (type) { + case reportType.START_PAGE: + // Accept every page loaded. + messages = []; + numFailures = 0; + return true; + case reportType.TEST_RESULT: + if (!success) { + ++numFailures; + messages.push("FAILURE: " + msg); + } + break; + case reportType.FINISH_PAGE: + if (success === undefined) { + ++numFailures; + messages.push("TIMEOUT: " + + window.webglTestHarness.timeoutDelay + " ms"); + } + case reportType.FINISHED_ALL_TESTS: + if (numFailures > 0) { + var ext = gl.getExtension("WEBGL_debug_renderer_info"); + if (ext) { + messages.push("GL_VENDOR: " + + gl.getParameter(ext.UNMASKED_VENDOR_WEBGL)); + messages.push("GL_RENDERER: " + + gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)); + } + } else { + messages.push("SUCCESS"); + } + domAutomationController.setAutomationId(1); + domAutomationController.send(messages.join("\n")); + break; + } + } + + function create3DContext() { + var canvas = document.createElement("canvas"); + var context = null; + try { + context = canvas.getContext("webgl"); + } catch(e) { + } + if (!context) { + try { + context = canvas.getContext("experimental-webgl"); + } catch(e) { + } + } + return context; + } + + // Assert the WebGL context exists. + gl = create3DContext(); + if (!gl) { + domAutomationController.setAutomationId(1); + domAutomationController.send("FAILURE: unable to fetch WebGL context"); + return; + } + + var iframe = document.getElementById("testframe"); + var testHarness = new WebGLTestHarnessModule.TestHarness( + iframe, + BASE_URL + start_url, + report, + OPTIONS); + + window.webglTestHarness = testHarness; + window.webglTestHarness.runTests(); +} +</script> +</head> +<body> +<iframe id="testframe" scrolling="yes" width="100%" height="100%"></iframe> +</body> +</html> diff --git a/chrome/test/gpu/webgl_conformance_test_expectations.txt b/content/test/data/gpu/webgl_conformance_test_expectations.txt index b16fe08..b16fe08 100644 --- a/chrome/test/gpu/webgl_conformance_test_expectations.txt +++ b/content/test/data/gpu/webgl_conformance_test_expectations.txt diff --git a/content/test/gpu/gpu_test_expectations_parser.cc b/content/test/gpu/gpu_test_expectations_parser.cc index 8caedc7..756239d 100644 --- a/content/test/gpu/gpu_test_expectations_parser.cc +++ b/content/test/gpu/gpu_test_expectations_parser.cc @@ -12,6 +12,7 @@ #include "base/string_split.h" #include "base/string_util.h" #include "base/stringprintf.h" +#include "content/public/common/content_paths.h" namespace { @@ -499,11 +500,9 @@ bool GPUTestExpectationsParser::GetExpectationsPath( bool rt = true; switch (profile) { case kWebGLConformanceTest: - rt = PathService::Get(base::DIR_SOURCE_ROOT, path); + rt = PathService::Get(content::DIR_TEST_DATA, path); if (rt) { - *path = path->Append(FILE_PATH_LITERAL("chrome")) - .Append(FILE_PATH_LITERAL("test")) - .Append(FILE_PATH_LITERAL("gpu")) + *path = path->Append(FILE_PATH_LITERAL("gpu")) .Append(FILE_PATH_LITERAL( "webgl_conformance_test_expectations.txt")); rt = file_util::PathExists(*path); |