From a02c7ce7518b19d401ae854f18d2401a489f60db Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 21 Jul 2016 15:58:00 +0200 Subject: [PATCH] wined3d: Get rid of redundant ARB_occlusion_query checks. Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/wined3d/query.c | 105 ++++++++++++++++++++++----------------------------- 1 file changed, 45 insertions(+), 60 deletions(-) diff --git a/dlls/wined3d/query.c b/dlls/wined3d/query.c index 0683731a228..369951d65ed 100644 --- a/dlls/wined3d/query.c +++ b/dlls/wined3d/query.c @@ -337,14 +337,6 @@ static HRESULT wined3d_occlusion_query_ops_get_data(struct wined3d_query *query, return S_FALSE; } - if (!gl_info->supported[ARB_OCCLUSION_QUERY]) - { - WARN("%p Occlusion queries not supported. Returning 1.\n", query); - samples = 1; - fill_query_data(data, size, &samples, sizeof(samples)); - return S_OK; - } - if (oq->context->tid != GetCurrentThreadId()) { FIXME("%p Wrong thread, returning 1.\n", query); @@ -461,77 +453,70 @@ static HRESULT wined3d_event_query_ops_issue(struct wined3d_query *query, DWORD static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DWORD flags) { + struct wined3d_occlusion_query *oq = query->extendedData; struct wined3d_device *device = query->device; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; + struct wined3d_context *context; TRACE("query %p, flags %#x.\n", query, flags); - if (gl_info->supported[ARB_OCCLUSION_QUERY]) + /* This is allowed according to MSDN and our tests. Reset the query and + * restart. */ + if (flags & WINED3DISSUE_BEGIN) { - struct wined3d_occlusion_query *oq = query->extendedData; - struct wined3d_context *context; - - /* This is allowed according to msdn and our tests. Reset the query and restart */ - if (flags & WINED3DISSUE_BEGIN) + if (query->state == QUERY_BUILDING) { - if (query->state == QUERY_BUILDING) + if (oq->context->tid != GetCurrentThreadId()) { - if (oq->context->tid != GetCurrentThreadId()) - { - FIXME("Wrong thread, can't restart query.\n"); - - context_free_occlusion_query(oq); - context = context_acquire(query->device, NULL); - context_alloc_occlusion_query(context, oq); - } - else - { - context = context_acquire(device, context_get_rt_surface(oq->context)); - - GL_EXTCALL(glEndQuery(GL_SAMPLES_PASSED)); - checkGLcall("glEndQuery()"); - } + FIXME("Wrong thread, can't restart query.\n"); + + context_free_occlusion_query(oq); + context = context_acquire(query->device, NULL); + context_alloc_occlusion_query(context, oq); } else { - if (oq->context) context_free_occlusion_query(oq); - context = context_acquire(query->device, NULL); - context_alloc_occlusion_query(context, oq); + context = context_acquire(device, context_get_rt_surface(oq->context)); + + GL_EXTCALL(glEndQuery(GL_SAMPLES_PASSED)); + checkGLcall("glEndQuery()"); } + } + else + { + if (oq->context) + context_free_occlusion_query(oq); + context = context_acquire(query->device, NULL); + context_alloc_occlusion_query(context, oq); + } - GL_EXTCALL(glBeginQuery(GL_SAMPLES_PASSED, oq->id)); - checkGLcall("glBeginQuery()"); + GL_EXTCALL(glBeginQuery(GL_SAMPLES_PASSED, oq->id)); + checkGLcall("glBeginQuery()"); - context_release(context); - } - if (flags & WINED3DISSUE_END) + context_release(context); + } + if (flags & WINED3DISSUE_END) + { + /* MSDN says END on a non-building occlusion query returns an error, + * but our tests show that it returns OK. But OpenGL doesn't like it, + * so avoid generating an error. */ + if (query->state == QUERY_BUILDING) { - /* Msdn says _END on a non-building occlusion query returns an error, but - * our tests show that it returns OK. But OpenGL doesn't like it, so avoid - * generating an error - */ - if (query->state == QUERY_BUILDING) + if (oq->context->tid != GetCurrentThreadId()) + { + FIXME("Wrong thread, can't end query.\n"); + } + else { - if (oq->context->tid != GetCurrentThreadId()) - { - FIXME("Wrong thread, can't end query.\n"); - } - else - { - context = context_acquire(device, context_get_rt_surface(oq->context)); - - GL_EXTCALL(glEndQuery(GL_SAMPLES_PASSED)); - checkGLcall("glEndQuery()"); - - context_release(context); - } + context = context_acquire(device, context_get_rt_surface(oq->context)); + + GL_EXTCALL(glEndQuery(GL_SAMPLES_PASSED)); + checkGLcall("glEndQuery()"); + + context_release(context); } } } - else - { - FIXME("%p Occlusion queries not supported.\n", query); - } if (flags & WINED3DISSUE_BEGIN) query->state = QUERY_BUILDING; -- 2.11.4.GIT