diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index fe2b740bce7..75e2d5248e6 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -277,6 +277,7 @@ _mesa_init_extensions(struct gl_extensions *extensions) extensions->ARB_internalformat_query = GL_TRUE; extensions->ARB_internalformat_query2 = GL_TRUE; extensions->ARB_map_buffer_range = GL_TRUE; + extensions->ARB_occlusion_query = GL_TRUE; extensions->ARB_sync = GL_TRUE; extensions->ARB_texture_env_crossbar = GL_TRUE; extensions->ARB_vertex_program = GL_TRUE; diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c index 4072fb198dd..e9d79a3f0ae 100644 --- a/src/mesa/main/queryobj.c +++ b/src/mesa/main/queryobj.c @@ -31,6 +31,8 @@ #include "queryobj.h" #include "mtypes.h" +#include "pipe/p_context.h" +#include "pipe/p_screen.h" #include "util/u_memory.h" #include "state_tracker/st_cb_queryobj.h" @@ -914,10 +916,16 @@ _mesa_GetQueryBufferObjectui64v(GLuint id, GLuint buffer, GLenum pname, void _mesa_init_queryobj(struct gl_context *ctx) { + struct pipe_screen *screen = ctx->pipe->screen; + ctx->Query.QueryObjects = _mesa_NewHashTable(); ctx->Query.CurrentOcclusionObject = NULL; - ctx->Const.QueryCounterBits.SamplesPassed = 64; + if (screen->get_param(screen, PIPE_CAP_OCCLUSION_QUERY)) + ctx->Const.QueryCounterBits.SamplesPassed = 64; + else + ctx->Const.QueryCounterBits.SamplesPassed = 0; + ctx->Const.QueryCounterBits.TimeElapsed = 64; ctx->Const.QueryCounterBits.Timestamp = 64; ctx->Const.QueryCounterBits.PrimitivesGenerated = 64; diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 0a113bbdca8..90288979fdb 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -933,12 +933,12 @@ st_create_context(gl_api api, struct pipe_context *pipe, return NULL; memset(ctx, 0, sizeof(*ctx)); + ctx->pipe = pipe; if (!_mesa_initialize_context(ctx, api, visual, shareCtx, &funcs)) { align_free(ctx); return NULL; } - ctx->pipe = pipe; st_debug_init(); if (pipe->screen->get_disk_shader_cache) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 7967213092e..c77378f4b15 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -798,7 +798,6 @@ void st_init_extensions(struct pipe_screen *screen, { o(ARB_gl_spirv), PIPE_CAP_GL_SPIRV }, { o(ARB_indirect_parameters), PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS }, { o(ARB_instanced_arrays), PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR }, - { o(ARB_occlusion_query), PIPE_CAP_OCCLUSION_QUERY }, { o(ARB_occlusion_query2), PIPE_CAP_OCCLUSION_QUERY }, { o(ARB_pipeline_statistics_query), PIPE_CAP_QUERY_PIPELINE_STATISTICS }, { o(ARB_pipeline_statistics_query), PIPE_CAP_QUERY_PIPELINE_STATISTICS_SINGLE },