Module: wine Branch: master Commit: da5041eb4b3fc4bab7f6aef2a4b091a58c39f36a URL: http://source.winehq.org/git/wine.git/?a=commit;h=da5041eb4b3fc4bab7f6aef2a4...
Author: Stefan Dösinger stefan@codeweavers.com Date: Fri Feb 6 10:46:48 2015 +0100
wined3d: Check the d3d buffer to find converted attributes.
This fixes some tests with ARB shaders that were broken since 1360af6adcbc5c77a7b3c5e32f3c886e450456f5. When buffer_internal_preload is called by context_update_stream_info, si->elements[i].data is not yet set.
---
dlls/wined3d/buffer.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c index 2fba83b..f2a22b0 100644 --- a/dlls/wined3d/buffer.c +++ b/dlls/wined3d/buffer.c @@ -266,7 +266,7 @@ static BOOL buffer_process_converted_attribute(struct wined3d_buffer *This, #define WINED3D_BUFFER_FIXUP_XYZRHW 0x02
static BOOL buffer_check_attribute(struct wined3d_buffer *This, const struct wined3d_stream_info *si, - UINT attrib_idx, DWORD fixup_flags, DWORD *stride_this_run) + const struct wined3d_state *state, UINT attrib_idx, DWORD fixup_flags, DWORD *stride_this_run) { const struct wined3d_stream_info_element *attrib = &si->elements[attrib_idx]; enum wined3d_format_id format; @@ -276,7 +276,7 @@ static BOOL buffer_check_attribute(struct wined3d_buffer *This, const struct win * there, on nonexistent attribs the vbo is 0. */ if (!(si->use_map & (1 << attrib_idx)) - || attrib->data.buffer_object != This->buffer_object) + || state->streams[attrib->stream_idx].buffer != This) return FALSE;
format = attrib->format->id; @@ -304,7 +304,7 @@ static BOOL buffer_check_attribute(struct wined3d_buffer *This, const struct win }
static BOOL buffer_find_decl(struct wined3d_buffer *This, const struct wined3d_stream_info *si, - DWORD fixup_flags) + const struct wined3d_state *state, DWORD fixup_flags) { UINT stride_this_run = 0; BOOL ret = FALSE; @@ -378,31 +378,31 @@ static BOOL buffer_find_decl(struct wined3d_buffer *This, const struct wined3d_s * texcoord needs no conversion while a FLOAT4 positiont needs one */
- ret = buffer_check_attribute(This, si, WINED3D_FFP_POSITION, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_POSITION, fixup_flags, &stride_this_run) || ret; fixup_flags &= ~WINED3D_BUFFER_FIXUP_XYZRHW;
- ret = buffer_check_attribute(This, si, WINED3D_FFP_NORMAL, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_NORMAL, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_DIFFUSE, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_DIFFUSE, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_SPECULAR, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_SPECULAR, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD0, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD0, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD1, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD1, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD2, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD2, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD3, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD3, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD4, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD4, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD5, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD5, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD6, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD6, fixup_flags, &stride_this_run) || ret; - ret = buffer_check_attribute(This, si, WINED3D_FFP_TEXCOORD7, + ret = buffer_check_attribute(This, si, state, WINED3D_FFP_TEXCOORD7, fixup_flags, &stride_this_run) || ret;
if (!stride_this_run && This->conversion_map) @@ -767,7 +767,7 @@ void buffer_internal_preload(struct wined3d_buffer *buffer, struct wined3d_conte fixup_flags |= WINED3D_BUFFER_FIXUP_XYZRHW; }
- decl_changed = buffer_find_decl(buffer, &context->stream_info, fixup_flags); + decl_changed = buffer_find_decl(buffer, &context->stream_info, state, fixup_flags); buffer->flags |= WINED3D_BUFFER_HASDESC; }