Commit 8c5b31c2 by Geoff Lang Committed by Commit Bot

Make query extensions enableable.

BUG=angleproject:1523 Change-Id: If2da4bff180664de997c981165672858c19ebe78 Reviewed-on: https://chromium-review.googlesource.com/685649 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 05b35b21
...@@ -172,7 +172,6 @@ Extensions::Extensions() ...@@ -172,7 +172,6 @@ Extensions::Extensions()
maxTextureAnisotropy(0.0f), maxTextureAnisotropy(0.0f),
occlusionQueryBoolean(false), occlusionQueryBoolean(false),
fence(false), fence(false),
timerQuery(false),
disjointTimerQuery(false), disjointTimerQuery(false),
queryCounterBitsTimeElapsed(0), queryCounterBitsTimeElapsed(0),
queryCounterBitsTimestamp(0), queryCounterBitsTimestamp(0),
...@@ -647,10 +646,9 @@ const ExtensionInfoMap &GetExtensionInfoMap() ...@@ -647,10 +646,9 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_OES_texture_npot"] = enableableExtension(&Extensions::textureNPOT); map["GL_OES_texture_npot"] = enableableExtension(&Extensions::textureNPOT);
map["GL_EXT_draw_buffers"] = enableableExtension(&Extensions::drawBuffers); map["GL_EXT_draw_buffers"] = enableableExtension(&Extensions::drawBuffers);
map["GL_EXT_texture_filter_anisotropic"] = enableableExtension(&Extensions::textureFilterAnisotropic); map["GL_EXT_texture_filter_anisotropic"] = enableableExtension(&Extensions::textureFilterAnisotropic);
map["GL_EXT_occlusion_query_boolean"] = esOnlyExtension(&Extensions::occlusionQueryBoolean); map["GL_EXT_occlusion_query_boolean"] = enableableExtension(&Extensions::occlusionQueryBoolean);
map["GL_NV_fence"] = esOnlyExtension(&Extensions::fence); map["GL_NV_fence"] = esOnlyExtension(&Extensions::fence);
map["GL_ANGLE_timer_query"] = esOnlyExtension(&Extensions::timerQuery); map["GL_EXT_disjoint_timer_query"] = enableableExtension(&Extensions::disjointTimerQuery);
map["GL_EXT_disjoint_timer_query"] = esOnlyExtension(&Extensions::disjointTimerQuery);
map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness); map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness);
map["GL_KHR_robust_buffer_access_behavior"] = esOnlyExtension(&Extensions::robustBufferAccessBehavior); map["GL_KHR_robust_buffer_access_behavior"] = esOnlyExtension(&Extensions::robustBufferAccessBehavior);
map["GL_EXT_blend_minmax"] = enableableExtension(&Extensions::blendMinMax); map["GL_EXT_blend_minmax"] = enableableExtension(&Extensions::blendMinMax);
...@@ -683,7 +681,7 @@ const ExtensionInfoMap &GetExtensionInfoMap() ...@@ -683,7 +681,7 @@ const ExtensionInfoMap &GetExtensionInfoMap()
//map["GL_KHR_no_error"] = esOnlyExtension(&Extensions::noError); //map["GL_KHR_no_error"] = esOnlyExtension(&Extensions::noError);
map["GL_ANGLE_lossy_etc_decode"] = esOnlyExtension(&Extensions::lossyETCDecode); map["GL_ANGLE_lossy_etc_decode"] = esOnlyExtension(&Extensions::lossyETCDecode);
map["GL_CHROMIUM_bind_uniform_location"] = esOnlyExtension(&Extensions::bindUniformLocation); map["GL_CHROMIUM_bind_uniform_location"] = esOnlyExtension(&Extensions::bindUniformLocation);
map["GL_CHROMIUM_sync_query"] = esOnlyExtension(&Extensions::syncQuery); map["GL_CHROMIUM_sync_query"] = enableableExtension(&Extensions::syncQuery);
map["GL_CHROMIUM_copy_texture"] = esOnlyExtension(&Extensions::copyTexture); map["GL_CHROMIUM_copy_texture"] = esOnlyExtension(&Extensions::copyTexture);
map["GL_CHROMIUM_copy_compressed_texture"] = esOnlyExtension(&Extensions::copyCompressedTexture); map["GL_CHROMIUM_copy_compressed_texture"] = esOnlyExtension(&Extensions::copyCompressedTexture);
map["GL_ANGLE_webgl_compatibility"] = esOnlyExtension(&Extensions::webglCompatibility); map["GL_ANGLE_webgl_compatibility"] = esOnlyExtension(&Extensions::webglCompatibility);
......
...@@ -207,9 +207,6 @@ struct Extensions ...@@ -207,9 +207,6 @@ struct Extensions
// GL_NV_fence // GL_NV_fence
bool fence; bool fence;
// GL_ANGLE_timer_query
bool timerQuery;
// GL_EXT_disjoint_timer_query // GL_EXT_disjoint_timer_query
bool disjointTimerQuery; bool disjointTimerQuery;
GLuint queryCounterBitsTimeElapsed; GLuint queryCounterBitsTimeElapsed;
......
...@@ -1411,7 +1411,6 @@ void GenerateCaps(ID3D11Device *device, ID3D11DeviceContext *deviceContext, cons ...@@ -1411,7 +1411,6 @@ void GenerateCaps(ID3D11Device *device, ID3D11DeviceContext *deviceContext, cons
extensions->maxTextureAnisotropy = GetMaximumAnisotropy(featureLevel); extensions->maxTextureAnisotropy = GetMaximumAnisotropy(featureLevel);
extensions->occlusionQueryBoolean = GetOcclusionQuerySupport(featureLevel); extensions->occlusionQueryBoolean = GetOcclusionQuerySupport(featureLevel);
extensions->fence = GetEventQuerySupport(featureLevel); extensions->fence = GetEventQuerySupport(featureLevel);
extensions->timerQuery = false; // Unimplemented
extensions->disjointTimerQuery = true; extensions->disjointTimerQuery = true;
extensions->queryCounterBitsTimeElapsed = 64; extensions->queryCounterBitsTimeElapsed = 64;
extensions->queryCounterBitsTimestamp = extensions->queryCounterBitsTimestamp =
......
...@@ -576,7 +576,6 @@ void GenerateCaps(IDirect3D9 *d3d9, ...@@ -576,7 +576,6 @@ void GenerateCaps(IDirect3D9 *d3d9,
extensions->fence = SUCCEEDED(device->CreateQuery(D3DQUERYTYPE_EVENT, &eventQuery)) && eventQuery; extensions->fence = SUCCEEDED(device->CreateQuery(D3DQUERYTYPE_EVENT, &eventQuery)) && eventQuery;
SafeRelease(eventQuery); SafeRelease(eventQuery);
extensions->timerQuery = false; // Unimplemented
extensions->disjointTimerQuery = false; extensions->disjointTimerQuery = false;
extensions->robustness = true; extensions->robustness = true;
// It seems that only DirectX 10 and higher enforce the well-defined behavior of always // It seems that only DirectX 10 and higher enforce the well-defined behavior of always
......
...@@ -1064,7 +1064,8 @@ bool ValidQueryType(const Context *context, GLenum queryType) ...@@ -1064,7 +1064,8 @@ bool ValidQueryType(const Context *context, GLenum queryType)
{ {
case GL_ANY_SAMPLES_PASSED: case GL_ANY_SAMPLES_PASSED:
case GL_ANY_SAMPLES_PASSED_CONSERVATIVE: case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
return true; return context->getClientMajorVersion() >= 3 ||
context->getExtensions().occlusionQueryBoolean;
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
return (context->getClientMajorVersion() >= 3); return (context->getClientMajorVersion() >= 3);
case GL_TIME_ELAPSED_EXT: case GL_TIME_ELAPSED_EXT:
......
...@@ -438,16 +438,30 @@ class MultiviewOcclusionQueryTest : public MultiviewRenderTest ...@@ -438,16 +438,30 @@ class MultiviewOcclusionQueryTest : public MultiviewRenderTest
protected: protected:
MultiviewOcclusionQueryTest() {} MultiviewOcclusionQueryTest() {}
bool requestOcclusionQueryExtension()
{
if (extensionRequestable("GL_EXT_occlusion_query_boolean"))
{
glRequestExtensionANGLE("GL_EXT_occlusion_query_boolean");
}
if (!extensionEnabled("GL_EXT_occlusion_query_boolean"))
{
std::cout << "Test skipped due to missing GL_EXT_occlusion_query_boolean." << std::endl;
return false;
}
return true;
}
GLuint drawAndRetrieveOcclusionQueryResult(GLuint program) GLuint drawAndRetrieveOcclusionQueryResult(GLuint program)
{ {
GLuint query; GLQueryEXT query;
glGenQueries(1, &query); glBeginQueryEXT(GL_ANY_SAMPLES_PASSED, query);
glBeginQuery(GL_ANY_SAMPLES_PASSED, query);
drawQuad(program, "vPosition", 0.0f, 1.0f, true); drawQuad(program, "vPosition", 0.0f, 1.0f, true);
glEndQueryEXT(GL_ANY_SAMPLES_PASSED); glEndQueryEXT(GL_ANY_SAMPLES_PASSED);
GLuint result = GL_TRUE; GLuint result = GL_TRUE;
glGetQueryObjectuiv(query, GL_QUERY_RESULT, &result); glGetQueryObjectuivEXT(query, GL_QUERY_RESULT, &result);
return result; return result;
} }
}; };
...@@ -1192,10 +1206,8 @@ TEST_P(MultiviewRenderTest, DivisorOrderOfOperation) ...@@ -1192,10 +1206,8 @@ TEST_P(MultiviewRenderTest, DivisorOrderOfOperation)
// transforms geometry to be outside of the clip region. // transforms geometry to be outside of the clip region.
TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryNothingVisible) TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryNothingVisible)
{ {
if (!requestMultiviewExtension()) ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
{ ANGLE_SKIP_TEST_IF(!requestOcclusionQueryExtension());
return;
}
const std::string vsSource = const std::string vsSource =
"#version 300 es\n" "#version 300 es\n"
...@@ -1229,10 +1241,8 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryNothingVisible) ...@@ -1229,10 +1241,8 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryNothingVisible)
// output. // output.
TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyLeftVisible) TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyLeftVisible)
{ {
if (!requestMultiviewExtension()) ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
{ ANGLE_SKIP_TEST_IF(!requestOcclusionQueryExtension());
return;
}
const std::string vsSource = const std::string vsSource =
"#version 300 es\n" "#version 300 es\n"
...@@ -1266,10 +1276,8 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyLeftVisible) ...@@ -1266,10 +1276,8 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyLeftVisible)
// output. // output.
TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyRightVisible) TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyRightVisible)
{ {
if (!requestMultiviewExtension()) ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
{ ANGLE_SKIP_TEST_IF(!requestOcclusionQueryExtension());
return;
}
const std::string vsSource = const std::string vsSource =
"#version 300 es\n" "#version 300 es\n"
......
...@@ -577,6 +577,71 @@ TEST_P(WebGLCompatibilityTest, EnableBlendMinMaxExtension) ...@@ -577,6 +577,71 @@ TEST_P(WebGLCompatibilityTest, EnableBlendMinMaxExtension)
} }
} }
// Test enabling the query extensions
TEST_P(WebGLCompatibilityTest, EnableQueryExtensions)
{
EXPECT_FALSE(extensionEnabled("GL_EXT_occlusion_query_boolean"));
EXPECT_FALSE(extensionEnabled("GL_EXT_disjoint_timer_query"));
EXPECT_FALSE(extensionEnabled("GL_CHROMIUM_sync_query"));
// This extensions become core in in ES3/WebGL2.
ANGLE_SKIP_TEST_IF(getClientMajorVersion() >= 3);
GLQueryEXT badQuery;
glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, badQuery);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_CONSERVATIVE, badQuery);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
glBeginQueryEXT(GL_TIME_ELAPSED_EXT, badQuery);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
glQueryCounterEXT(GL_TIMESTAMP_EXT, badQuery);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
glBeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, badQuery);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
if (extensionRequestable("GL_EXT_occlusion_query_boolean"))
{
glRequestExtensionANGLE("GL_EXT_occlusion_query_boolean");
EXPECT_GL_NO_ERROR();
GLQueryEXT query;
glBeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, query);
glEndQueryEXT(GL_ANY_SAMPLES_PASSED_EXT);
EXPECT_GL_NO_ERROR();
}
if (extensionRequestable("GL_EXT_disjoint_timer_query"))
{
glRequestExtensionANGLE("GL_EXT_disjoint_timer_query");
EXPECT_GL_NO_ERROR();
GLQueryEXT query1;
glBeginQueryEXT(GL_TIME_ELAPSED_EXT, query1);
glEndQueryEXT(GL_TIME_ELAPSED_EXT);
EXPECT_GL_NO_ERROR();
GLQueryEXT query2;
glQueryCounterEXT(query2, GL_TIMESTAMP_EXT);
EXPECT_GL_NO_ERROR();
}
if (extensionRequestable("GL_CHROMIUM_sync_query"))
{
glRequestExtensionANGLE("GL_CHROMIUM_sync_query");
EXPECT_GL_NO_ERROR();
GLQueryEXT query;
glBeginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, query);
glEndQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
EXPECT_GL_NO_ERROR();
}
}
// Verify that the context generates the correct error when the framebuffer attachments are // Verify that the context generates the correct error when the framebuffer attachments are
// different sizes // different sizes
TEST_P(WebGLCompatibilityTest, FramebufferAttachmentSizeMissmatch) TEST_P(WebGLCompatibilityTest, FramebufferAttachmentSizeMissmatch)
......
...@@ -73,6 +73,7 @@ using GLRenderbuffer = GLWrapper<glGenRenderbuffers, glDeleteRenderbuffers> ...@@ -73,6 +73,7 @@ using GLRenderbuffer = GLWrapper<glGenRenderbuffers, glDeleteRenderbuffers>
using GLSampler = GLWrapper<glGenSamplers, glDeleteSamplers>; using GLSampler = GLWrapper<glGenSamplers, glDeleteSamplers>;
using GLTransformFeedback = GLWrapper<glGenTransformFeedbacks, glDeleteTransformFeedbacks>; using GLTransformFeedback = GLWrapper<glGenTransformFeedbacks, glDeleteTransformFeedbacks>;
using GLProgramPipeline = GLWrapper<glGenProgramPipelines, glDeleteProgramPipelines>; using GLProgramPipeline = GLWrapper<glGenProgramPipelines, glDeleteProgramPipelines>;
using GLQueryEXT = GLWrapper<glGenQueriesEXT, glDeleteQueriesEXT>;
// Don't use GLProgram directly, use ANGLE_GL_PROGRAM. // Don't use GLProgram directly, use ANGLE_GL_PROGRAM.
namespace priv namespace priv
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment