diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index b708b337b9f..7e9829283bc 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -63,6 +63,7 @@ static const struct { {"GL_ARB_half_float_pixel", ARB_HALF_FLOAT_PIXEL, 0 }, {"GL_ARB_half_float_vertex", ARB_HALF_FLOAT_VERTEX, 0 }, {"GL_ARB_imaging", ARB_IMAGING, 0 }, + {"GL_ARB_map_buffer_range", ARB_MAP_BUFFER_RANGE, 0 }, {"GL_ARB_multisample", ARB_MULTISAMPLE, 0 }, /* needs GLX_ARB_MULTISAMPLE as well */ {"GL_ARB_multitexture", ARB_MULTITEXTURE, 0 }, {"GL_ARB_occlusion_query", ARB_OCCLUSION_QUERY, 0 }, @@ -1837,6 +1838,12 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str gl_info->supported[ARB_HALF_FLOAT_PIXEL] = TRUE; } } + if (gl_info->supported[ARB_MAP_BUFFER_RANGE]) + { + /* GL_ARB_map_buffer_range and GL_APPLE_flush_buffer_range provide the same + * functionality. Prefer the ARB extension */ + gl_info->supported[APPLE_FLUSH_BUFFER_RANGE] = FALSE; + } if (gl_info->supported[ARB_TEXTURE_CUBE_MAP]) { TRACE_(d3d_caps)(" IMPLIED: NVIDIA (NV) Texture Gen Reflection support.\n"); diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h index f0367ce8d69..07ce7af5259 100644 --- a/dlls/wined3d/wined3d_gl.h +++ b/dlls/wined3d/wined3d_gl.h @@ -1743,6 +1743,7 @@ typedef enum wined3d_gl_extension ARB_HALF_FLOAT_PIXEL, ARB_HALF_FLOAT_VERTEX, ARB_IMAGING, + ARB_MAP_BUFFER_RANGE, ARB_MULTISAMPLE, ARB_MULTITEXTURE, ARB_OCCLUSION_QUERY, @@ -2225,6 +2226,19 @@ typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLe typedef void (WINE_GLAPI *PGLFNBLENDCOLORPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONPROC)(GLenum mode); +/* GL_ARB_map_buffer_range */ +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#endif +typedef GLvoid *(WINE_GLAPI *PGLFNMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); + /* GL_ARB_multisample */ #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 @@ -3934,6 +3948,11 @@ typedef BOOL (WINAPI *WINED3D_PFNWGLSETPIXELFORMATWINE)(HDC hdc, int iPixelForma glBlendColorEXT, EXT_BLEND_COLOR, NULL) \ USE_GL_FUNC(PGLFNBLENDEQUATIONPROC, \ glBlendEquationEXT, EXT_BLEND_MINMAX, NULL) \ + /* GL_ARB_map_buffer_range */ \ + USE_GL_FUNC(PGLFNMAPBUFFERRANGEPROC, \ + glMapBufferRange, ARB_MAP_BUFFER_RANGE, NULL) \ + USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEPROC, \ + glFlushMappedBufferRange, ARB_MAP_BUFFER_RANGE, NULL) \ /* GL_ARB_multisample */ \ USE_GL_FUNC(WINED3D_PFNGLSAMPLECOVERAGEARBPROC, \ glSampleCoverageARB, ARB_MULTISAMPLE, NULL) \