// // Copyright 2016 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // SyncQueriesTest.cpp: Tests of the GL_CHROMIUM_sync_query extension #include "test_utils/ANGLETest.h" namespace angle { class SyncQueriesTest : public ANGLETest { protected: SyncQueriesTest() { setWindowWidth(128); setWindowHeight(128); setConfigRedBits(8); setConfigGreenBits(8); setConfigBlueBits(8); setConfigAlphaBits(8); setConfigDepthBits(24); } void TearDown() override { if (mQuery != 0) { glDeleteQueriesEXT(1, &mQuery); mQuery = 0; } ANGLETest::TearDown(); } GLuint mQuery = 0; }; // Test basic usage of sync queries TEST_P(SyncQueriesTest, Basic) { if (!extensionEnabled("GL_CHROMIUM_sync_query")) { std::cout << "Test skipped because GL_CHROMIUM_sync_query is not available." << std::endl; return; } glGenQueriesEXT(1, &mQuery); glBeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, mQuery); EXPECT_GL_NO_ERROR(); glClearColor(0.0, 0.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glEndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM); glFlush(); GLuint result = 0; glGetQueryObjectuivEXT(mQuery, GL_QUERY_RESULT_EXT, &result); EXPECT_EQ(static_cast(GL_TRUE), result); EXPECT_GL_NO_ERROR(); } // Test that the sync query enums are not accepted unless the extension is available TEST_P(SyncQueriesTest, Validation) { // Need the GL_EXT_occlusion_query_boolean extension for the entry points if (!extensionEnabled("GL_EXT_occlusion_query_boolean")) { std::cout << "Test skipped because GL_EXT_occlusion_query_boolean is not available." << std::endl; return; } bool extensionAvailable = extensionEnabled("GL_CHROMIUM_sync_query"); glGenQueriesEXT(1, &mQuery); glBeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, mQuery); if (extensionAvailable) { EXPECT_GL_NO_ERROR(); } else { EXPECT_GL_ERROR(GL_INVALID_ENUM); } glDeleteQueriesEXT(1, &mQuery); EXPECT_GL_NO_ERROR(); } // Use this to select which configurations (e.g. which renderer, which GLES major version) these // tests should be run against. ANGLE_INSTANTIATE_TEST(SyncQueriesTest, ES2_D3D9(), ES2_D3D11(), ES3_D3D11(), ES2_OPENGL(), ES3_OPENGL(), ES2_OPENGLES(), ES3_OPENGLES()); } // namespace angle