From 98568f0ba1dbd0f0e81d3fe4aab115c711f45eb0 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 25 Jan 2010 19:51:31 +0100 Subject: [PATCH] wined3d: Add support for ARB_vertex_array_bgra. --- dlls/wined3d/buffer.c | 2 +- dlls/wined3d/device.c | 4 ++-- dlls/wined3d/directx.c | 6 ++++++ dlls/wined3d/drawprim.c | 2 +- dlls/wined3d/state.c | 4 ++-- dlls/wined3d/utils.c | 2 +- dlls/wined3d/wined3d_gl.h | 1 + 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index 20201b12eb3..024aab5d4f3 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -483,7 +483,7 @@ static BOOL buffer_find_decl(struct wined3d_buffer *This) * FLOAT16s if not supported. Also, we can't iterate over the array, so use macros to generate code for all * the attributes that our current fixed function pipeline implementation cares for. */ - BOOL support_d3dcolor = gl_info->supported[EXT_VERTEX_ARRAY_BGRA]; + BOOL support_d3dcolor = gl_info->supported[ARB_VERTEX_ARRAY_BGRA]; ret = buffer_check_attribute(This, si, WINED3D_FFP_POSITION, TRUE, TRUE, FALSE, &stride_this_run, &float16_used) || ret; ret = buffer_check_attribute(This, si, WINED3D_FFP_NORMAL, diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 4dbfeb10607..d66b46e2962 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -298,7 +298,7 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This, stream_info->elements[idx].stream_idx = element->input_slot; stream_info->elements[idx].buffer_object = buffer_object; - if (!This->adapter->gl_info.supported[EXT_VERTEX_ARRAY_BGRA] + if (!This->adapter->gl_info.supported[ARB_VERTEX_ARRAY_BGRA] && element->format_desc->format == WINED3DFMT_B8G8R8A8_UNORM) { stream_info->swizzle_map |= 1 << idx; @@ -361,7 +361,7 @@ void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info, { if (!stream_info->elements[i].format_desc) continue; - if (!gl_info->supported[EXT_VERTEX_ARRAY_BGRA] + if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] && stream_info->elements[i].format_desc->format == WINED3DFMT_B8G8R8A8_UNORM) { stream_info->swizzle_map |= 1 << i; diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 688b4995a1c..ba9fdb8db21 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -82,6 +82,7 @@ static const struct { {"GL_ARB_texture_non_power_of_two", ARB_TEXTURE_NON_POWER_OF_TWO, MAKEDWORD_VERSION(2, 0) }, {"GL_ARB_texture_rectangle", ARB_TEXTURE_RECTANGLE, 0 }, {"GL_ARB_texture_rg", ARB_TEXTURE_RG, 0 }, + {"GL_ARB_vertex_array_bgra", ARB_VERTEX_ARRAY_BGRA, 0 }, {"GL_ARB_vertex_blend", ARB_VERTEX_BLEND, 0 }, {"GL_ARB_vertex_buffer_object", ARB_VERTEX_BUFFER_OBJECT, 0 }, {"GL_ARB_vertex_program", ARB_VERTEX_PROGRAM, 0 }, @@ -1842,6 +1843,11 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str TRACE_(d3d_caps)(" IMPLIED: ARB_depth_clamp support (by NV_depth_clamp).\n"); gl_info->supported[ARB_DEPTH_CLAMP] = TRUE; } + if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] && gl_info->supported[EXT_VERTEX_ARRAY_BGRA]) + { + TRACE_(d3d_caps)(" IMPLIED: ARB_vertex_array_bgra support (by EXT_vertex_array_bgra).\n"); + gl_info->supported[ARB_VERTEX_ARRAY_BGRA] = TRUE; + } if (gl_info->supported[NV_TEXTURE_SHADER2]) { if (gl_info->supported[NV_REGISTER_COMBINERS]) diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index e8521bcfda6..8250e796449 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -334,7 +334,7 @@ static inline void send_attribute(IWineD3DDeviceImpl *This, WINED3DFORMAT format GL_EXTCALL(glVertexAttrib4ubvARB(index, ptr)); break; case WINED3DFMT_B8G8R8A8_UNORM: - if (gl_info->supported[EXT_VERTEX_ARRAY_BGRA]) + if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA]) { const DWORD *src = ptr; DWORD c = *src & 0xff00ff00; diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index adb426b904b..75cb837b04a 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -4167,7 +4167,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock, GL_EXTCALL(glVertexAttrib4NubvARB(i, ptr)); break; case WINED3DFMT_B8G8R8A8_UNORM: - if (gl_info->supported[EXT_VERTEX_ARRAY_BGRA]) + if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA]) { const DWORD *src = (const DWORD *)ptr; DWORD c = *src & 0xff00ff00; @@ -4544,7 +4544,7 @@ static void streamsrc(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wi else { WORD slow_mask = (1 << WINED3D_FFP_PSIZE); - slow_mask |= -!gl_info->supported[EXT_VERTEX_ARRAY_BGRA] + slow_mask |= -!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] & ((1 << WINED3D_FFP_DIFFUSE) | (1 << WINED3D_FFP_SPECULAR)); if (fixup || (!dataLocations->position_transformed diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index c1e921da976..7b3341ef4da 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -1098,7 +1098,7 @@ static void apply_format_fixups(struct wined3d_gl_info *gl_info) gl_info->gl_formats[idx].heightscale = 1.5f; gl_info->gl_formats[idx].color_fixup = create_yuv_fixup_desc(YUV_FIXUP_YV12); - if (gl_info->supported[EXT_VERTEX_ARRAY_BGRA]) + if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA]) { idx = getFmtIdx(WINED3DFMT_B8G8R8A8_UNORM); gl_info->gl_formats[idx].gl_vtx_format = GL_BGRA; diff --git a/dlls/wined3d/wined3d_gl.h b/dlls/wined3d/wined3d_gl.h index aeac47b4677..33e24c3b366 100644 --- a/dlls/wined3d/wined3d_gl.h +++ b/dlls/wined3d/wined3d_gl.h @@ -1764,6 +1764,7 @@ typedef enum wined3d_gl_extension ARB_TEXTURE_NON_POWER_OF_TWO, ARB_TEXTURE_RECTANGLE, ARB_TEXTURE_RG, + ARB_VERTEX_ARRAY_BGRA, ARB_VERTEX_BLEND, ARB_VERTEX_BUFFER_OBJECT, ARB_VERTEX_PROGRAM, -- 2.11.4.GIT