Henri Verbeet : wined3d: Get rid of redundant ARB_occlusion_query checks.
Alexandre Julliard
julliard at winehq.org
Thu Jul 21 09:58:58 CDT 2016
Module: wine
Branch: master
Commit: a02c7ce7518b19d401ae854f18d2401a489f60db
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a02c7ce7518b19d401ae854f18d2401a489f60db
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Thu Jul 21 15:58:00 2016 +0200
wined3d: Get rid of redundant ARB_occlusion_query checks.
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 0683731..369951d 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;
More information about the wine-cvs
mailing list