Updated patch following review.
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index acdcc57..9b37458 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -854,6 +854,11 @@ static void quirk_broken_rgba16(struct wined3d_gl_info *gl_info) gl_info->quirks |= WINED3D_QUIRK_BROKEN_RGBA16; } +static void quirk_no_ARB_map_buffer_range(struct wined3d_gl_info *gl_info) +{ + gl_info->quirks |= WINED3D_QUIRK_BROKEN_MAP_BUFFER_RANGE; +} + static void quirk_infolog_spam(struct wined3d_gl_info *gl_info) { gl_info->quirks |= WINED3D_QUIRK_INFO_LOG_SPAM; @@ -967,6 +972,11 @@ static const struct driver_quirk quirk_table[] = quirk_r200_constants, "r200 vertex shader constants" }, + { + match_fglrx, + quirk_no_ARB_map_buffer_range, + "Slow on fglrx" + } }; /* Certain applications (Steam) complain if we report an outdated driver version. In general, diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 4b29ec8..65b1f27 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -1681,6 +1681,9 @@ static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_ gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE; } + if ((gl_info->quirks & WINED3D_QUIRK_BROKEN_MAP_BUFFER_RANGE) && gl_info->supported[ARB_MAP_BUFFER_RANGE]) + gl_info->supported[ARB_MAP_BUFFER_RANGE] = FALSE; + /* ATI instancing hack: Although ATI cards do not support Shader Model * 3.0, they support instancing. To query if the card supports instancing * CheckDeviceFormat() with the special format MAKEFOURCC('I','N','S','T') diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 45f6b29..37dd9a6 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -61,6 +61,7 @@ #define WINED3D_QUIRK_BROKEN_RGBA16 0x00000040 #define WINED3D_QUIRK_INFO_LOG_SPAM 0x00000080 #define WINED3D_QUIRK_LIMITED_TEX_FILTERING 0x00000100 +#define WINED3D_QUIRK_BROKEN_MAP_BUFFER_RANGE 0x00000200 /* Texture format fixups */