wined3d: Fetch GL functions from the WGL driver table, including glFinish and glFlush.
This commit is contained in:
parent
72e873873e
commit
d7250e97ed
|
@ -7399,7 +7399,7 @@ HRESULT arbfp_blit_surface(struct wined3d_device *device, DWORD filter,
|
||||||
if (wined3d_settings.strict_draw_ordering
|
if (wined3d_settings.strict_draw_ordering
|
||||||
|| (dst_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
|| (dst_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
||||||
&& (dst_surface->container.u.swapchain->front_buffer == dst_surface)))
|
&& (dst_surface->container.u.swapchain->front_buffer == dst_surface)))
|
||||||
wglFlush(); /* Flush to ensure ordering across contexts. */
|
glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
|
|
|
@ -635,7 +635,7 @@ static void buffer_sync_apple(struct wined3d_buffer *This, DWORD flags, const st
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Since we don't know about old draws a glFinish is needed once */
|
/* Since we don't know about old draws a glFinish is needed once */
|
||||||
wglFinish();
|
glFinish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
TRACE("Synchronizing buffer %p\n", This);
|
TRACE("Synchronizing buffer %p\n", This);
|
||||||
|
@ -663,7 +663,7 @@ drop_query:
|
||||||
This->query = NULL;
|
This->query = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
wglFinish();
|
glFinish();
|
||||||
ENTER_GL();
|
ENTER_GL();
|
||||||
GL_EXTCALL(glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE));
|
GL_EXTCALL(glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE));
|
||||||
checkGLcall("glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)");
|
checkGLcall("glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)");
|
||||||
|
@ -1195,7 +1195,7 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer)
|
||||||
|
|
||||||
GL_EXTCALL(glUnmapBufferARB(buffer->buffer_type_hint));
|
GL_EXTCALL(glUnmapBufferARB(buffer->buffer_type_hint));
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
if (wined3d_settings.strict_draw_ordering) wglFlush(); /* Flush to ensure ordering across contexts. */
|
if (wined3d_settings.strict_draw_ordering) glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
buffer->resource.allocatedMemory = NULL;
|
buffer->resource.allocatedMemory = NULL;
|
||||||
|
|
|
@ -819,7 +819,7 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
|
||||||
if (wined3d_settings.strict_draw_ordering || (flags & WINED3DCLEAR_TARGET
|
if (wined3d_settings.strict_draw_ordering || (flags & WINED3DCLEAR_TARGET
|
||||||
&& target->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
&& target->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
||||||
&& target->container.u.swapchain->front_buffer == target))
|
&& target->container.u.swapchain->front_buffer == target))
|
||||||
wglFlush(); /* Flush to ensure ordering across contexts. */
|
glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
}
|
}
|
||||||
|
@ -3811,7 +3811,7 @@ HRESULT CDECL wined3d_device_end_scene(struct wined3d_device *device)
|
||||||
|
|
||||||
context = context_acquire(device, NULL);
|
context = context_acquire(device, NULL);
|
||||||
/* We only have to do this if we need to read the, swapbuffers performs a flush for us */
|
/* We only have to do this if we need to read the, swapbuffers performs a flush for us */
|
||||||
wglFlush();
|
glFlush();
|
||||||
/* No checkGLcall here to avoid locking the lock just for checking a call that hardly ever
|
/* No checkGLcall here to avoid locking the lock just for checking a call that hardly ever
|
||||||
* fails. */
|
* fails. */
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
|
@ -556,7 +556,7 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
|
||||||
GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
|
GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
|
|
||||||
wglFinish(); /* just to be sure */
|
glFinish(); /* just to be sure */
|
||||||
|
|
||||||
memset(check, 0, sizeof(check));
|
memset(check, 0, sizeof(check));
|
||||||
ENTER_GL();
|
ENTER_GL();
|
||||||
|
@ -5408,11 +5408,14 @@ static BOOL InitAdapters(struct wined3d *wined3d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Dynamically load all GL core functions */
|
||||||
#ifdef USE_WIN32_OPENGL
|
#ifdef USE_WIN32_OPENGL
|
||||||
pwglGetProcAddress = (void*)GetProcAddress(mod_gl, "wglGetProcAddress");
|
pwglGetProcAddress = (void*)GetProcAddress(mod_gl, "wglGetProcAddress");
|
||||||
#define USE_GL_FUNC(pfn) pfn = (void*)GetProcAddress(mod_gl, #pfn);
|
#define USE_GL_FUNC(pfn) pfn = (void*)GetProcAddress(mod_gl, #pfn);
|
||||||
|
GL_FUNCS_GEN;
|
||||||
|
#undef USE_GL_FUNC
|
||||||
#else
|
#else
|
||||||
/* To bypass the opengl32 thunks load wglGetProcAddress from gdi32 instead of opengl32 */
|
/* To bypass the opengl32 thunks retrieve functions from the WGL driver instead of opengl32 */
|
||||||
{
|
{
|
||||||
HDC hdc = GetDC( 0 );
|
HDC hdc = GetDC( 0 );
|
||||||
const struct opengl_funcs *wgl_driver = __wine_get_wgl_driver( hdc, WINE_WGL_DRIVER_VERSION );
|
const struct opengl_funcs *wgl_driver = __wine_get_wgl_driver( hdc, WINE_WGL_DRIVER_VERSION );
|
||||||
|
@ -5422,8 +5425,10 @@ static BOOL InitAdapters(struct wined3d *wined3d)
|
||||||
|
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC( 0, hdc );
|
||||||
if (!pwglGetProcAddress) goto nogl_adapter;
|
if (!pwglGetProcAddress) goto nogl_adapter;
|
||||||
|
#define USE_GL_FUNC(pfn) pfn = wgl_driver->gl.p_##pfn;
|
||||||
|
GL_FUNCS_GEN;
|
||||||
|
#undef USE_GL_FUNC
|
||||||
}
|
}
|
||||||
#define USE_GL_FUNC(pfn) pfn = (void*)pwglGetProcAddress(#pfn);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Load WGL core functions from opengl32.dll */
|
/* Load WGL core functions from opengl32.dll */
|
||||||
|
@ -5431,16 +5436,6 @@ static BOOL InitAdapters(struct wined3d *wined3d)
|
||||||
WGL_FUNCS_GEN;
|
WGL_FUNCS_GEN;
|
||||||
#undef USE_WGL_FUNC
|
#undef USE_WGL_FUNC
|
||||||
|
|
||||||
/* Dynamically load all GL core functions */
|
|
||||||
GL_FUNCS_GEN;
|
|
||||||
#undef USE_GL_FUNC
|
|
||||||
|
|
||||||
/* Load glFinish and glFlush from opengl32.dll even if we're not using WIN32 opengl
|
|
||||||
* otherwise because we have to use winex11.drv's override
|
|
||||||
*/
|
|
||||||
wglFinish = (void*)GetProcAddress(mod_gl, "glFinish");
|
|
||||||
wglFlush = (void*)GetProcAddress(mod_gl, "glFlush");
|
|
||||||
|
|
||||||
glEnableWINE = glEnable;
|
glEnableWINE = glEnable;
|
||||||
glDisableWINE = glDisable;
|
glDisableWINE = glDisable;
|
||||||
|
|
||||||
|
|
|
@ -767,7 +767,7 @@ void drawPrimitive(struct wined3d_device *device, UINT index_count, UINT StartId
|
||||||
wined3d_event_query_issue(device->buffer_queries[i], device);
|
wined3d_event_query_issue(device->buffer_queries[i], device);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wined3d_settings.strict_draw_ordering) wglFlush(); /* Flush to ensure ordering across contexts. */
|
if (wined3d_settings.strict_draw_ordering) glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
|
|
|
@ -1136,7 +1136,7 @@ static void wined3d_surface_depth_blt_fbo(const struct wined3d_device *device, s
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
|
|
||||||
if (wined3d_settings.strict_draw_ordering)
|
if (wined3d_settings.strict_draw_ordering)
|
||||||
wglFlush(); /* Flush to ensure ordering across contexts. */
|
glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
}
|
}
|
||||||
|
@ -1259,7 +1259,7 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te
|
||||||
if (wined3d_settings.strict_draw_ordering
|
if (wined3d_settings.strict_draw_ordering
|
||||||
|| (dst_location == SFLAG_INDRAWABLE
|
|| (dst_location == SFLAG_INDRAWABLE
|
||||||
&& dst_surface->container.u.swapchain->front_buffer == dst_surface))
|
&& dst_surface->container.u.swapchain->front_buffer == dst_surface))
|
||||||
wglFlush();
|
glFlush();
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
}
|
}
|
||||||
|
@ -2378,7 +2378,7 @@ static void surface_upload_data(struct wined3d_surface *surface, const struct wi
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
|
|
||||||
if (wined3d_settings.strict_draw_ordering)
|
if (wined3d_settings.strict_draw_ordering)
|
||||||
wglFlush();
|
glFlush();
|
||||||
|
|
||||||
if (gl_info->quirks & WINED3D_QUIRK_FBO_TEX_UPDATE)
|
if (gl_info->quirks & WINED3D_QUIRK_FBO_TEX_UPDATE)
|
||||||
{
|
{
|
||||||
|
@ -4575,7 +4575,7 @@ static void flush_to_framebuffer_drawpixels(struct wined3d_surface *surface,
|
||||||
if (wined3d_settings.strict_draw_ordering
|
if (wined3d_settings.strict_draw_ordering
|
||||||
|| (surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
|| (surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
||||||
&& surface->container.u.swapchain->front_buffer == surface))
|
&& surface->container.u.swapchain->front_buffer == surface))
|
||||||
wglFlush();
|
glFlush();
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
}
|
}
|
||||||
|
@ -5260,7 +5260,7 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
|
||||||
|
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
|
|
||||||
if (wined3d_settings.strict_draw_ordering) wglFlush(); /* Flush to ensure ordering across contexts. */
|
if (wined3d_settings.strict_draw_ordering) glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
|
|
||||||
|
@ -5363,7 +5363,7 @@ static void surface_blt_to_drawable(const struct wined3d_device *device,
|
||||||
if (wined3d_settings.strict_draw_ordering
|
if (wined3d_settings.strict_draw_ordering
|
||||||
|| (dst_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
|| (dst_surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
|
||||||
&& (dst_surface->container.u.swapchain->front_buffer == dst_surface)))
|
&& (dst_surface->container.u.swapchain->front_buffer == dst_surface)))
|
||||||
wglFlush(); /* Flush to ensure ordering across contexts. */
|
glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
|
|
||||||
context_release(context);
|
context_release(context);
|
||||||
}
|
}
|
||||||
|
@ -5794,7 +5794,7 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
|
||||||
|
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
|
|
||||||
if (wined3d_settings.strict_draw_ordering) wglFlush(); /* Flush to ensure ordering across contexts. */
|
if (wined3d_settings.strict_draw_ordering) glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
}
|
}
|
||||||
else if (location == SFLAG_INDRAWABLE)
|
else if (location == SFLAG_INDRAWABLE)
|
||||||
{
|
{
|
||||||
|
@ -5812,7 +5812,7 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
|
||||||
|
|
||||||
LEAVE_GL();
|
LEAVE_GL();
|
||||||
|
|
||||||
if (wined3d_settings.strict_draw_ordering) wglFlush(); /* Flush to ensure ordering across contexts. */
|
if (wined3d_settings.strict_draw_ordering) glFlush(); /* Flush to ensure ordering across contexts. */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -564,7 +564,7 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
|
||||||
}
|
}
|
||||||
|
|
||||||
if (swapchain->num_contexts > 1)
|
if (swapchain->num_contexts > 1)
|
||||||
wglFinish();
|
glFinish();
|
||||||
SwapBuffers(context->hdc); /* TODO: cycle through the swapchain buffers */
|
SwapBuffers(context->hdc); /* TODO: cycle through the swapchain buffers */
|
||||||
|
|
||||||
TRACE("SwapBuffers called, Starting new frame\n");
|
TRACE("SwapBuffers called, Starting new frame\n");
|
||||||
|
|
|
@ -1095,6 +1095,8 @@ void (WINE_GLAPI *glEvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint
|
||||||
void (WINE_GLAPI *glEvalPoint1)(GLint i) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glEvalPoint1)(GLint i) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glEvalPoint2)(GLint i, GLint j) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glEvalPoint2)(GLint i, GLint j) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glFeedbackBuffer)(GLsizei size, GLenum type, GLfloat *buffer) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glFeedbackBuffer)(GLsizei size, GLenum type, GLfloat *buffer) DECLSPEC_HIDDEN;
|
||||||
|
void (WINE_GLAPI *glFinish)(void) DECLSPEC_HIDDEN;
|
||||||
|
void (WINE_GLAPI *glFlush)(void) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glFogf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glFogf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glFogfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glFogfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glFogi)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glFogi)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
|
||||||
|
@ -1353,15 +1355,6 @@ void (WINE_GLAPI *glVertex4sv)(const GLshort *v) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
|
||||||
void (WINE_GLAPI *glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
|
void (WINE_GLAPI *glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* glFinish and glFlush are always loaded from opengl32.dll, thus they always have
|
|
||||||
* __stdcall calling convention.
|
|
||||||
*
|
|
||||||
* They are wgl functions and must not be called inside the gl lock, give them a
|
|
||||||
* name that makes this clear
|
|
||||||
*/
|
|
||||||
void (__stdcall *wglFinish)(void) DECLSPEC_HIDDEN;
|
|
||||||
void (__stdcall *wglFlush)(void) DECLSPEC_HIDDEN;
|
|
||||||
|
|
||||||
/* WGL functions */
|
/* WGL functions */
|
||||||
HGLRC (WINAPI *pwglCreateContext)(HDC) DECLSPEC_HIDDEN;
|
HGLRC (WINAPI *pwglCreateContext)(HDC) DECLSPEC_HIDDEN;
|
||||||
BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN;
|
BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN;
|
||||||
|
@ -1461,6 +1454,8 @@ BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN;
|
||||||
USE_GL_FUNC(glEvalPoint1) \
|
USE_GL_FUNC(glEvalPoint1) \
|
||||||
USE_GL_FUNC(glEvalPoint2) \
|
USE_GL_FUNC(glEvalPoint2) \
|
||||||
USE_GL_FUNC(glFeedbackBuffer) \
|
USE_GL_FUNC(glFeedbackBuffer) \
|
||||||
|
USE_GL_FUNC(glFinish) \
|
||||||
|
USE_GL_FUNC(glFlush) \
|
||||||
USE_GL_FUNC(glFogf) \
|
USE_GL_FUNC(glFogf) \
|
||||||
USE_GL_FUNC(glFogfv) \
|
USE_GL_FUNC(glFogfv) \
|
||||||
USE_GL_FUNC(glFogi) \
|
USE_GL_FUNC(glFogi) \
|
||||||
|
|
Loading…
Reference in New Issue