d3d9: Apply the device state before executing a draw call.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
93a226f28b
commit
7654d58b04
|
@ -1821,6 +1821,7 @@ static HRESULT WINAPI d3d9_device_ColorFill(IDirect3DDevice9Ex *iface,
|
|||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
rtv = d3d9_surface_acquire_rendertarget_view(surface_impl);
|
||||
hr = wined3d_device_clear_rendertarget_view(device->wined3d_device,
|
||||
rtv, rect, WINED3DCLEAR_TARGET, &c, 0.0f, 0);
|
||||
|
@ -2071,6 +2072,7 @@ static HRESULT WINAPI d3d9_device_Clear(IDirect3DDevice9Ex *iface, DWORD rect_co
|
|||
|
||||
wined3d_color_from_d3dcolor(&c, color);
|
||||
wined3d_mutex_lock();
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
hr = wined3d_device_clear(device->wined3d_device, rect_count, (const RECT *)rects, flags, &c, z, stencil);
|
||||
if (SUCCEEDED(hr))
|
||||
d3d9_rts_flag_auto_gen_mipmap(device);
|
||||
|
@ -2654,6 +2656,7 @@ static HRESULT WINAPI d3d9_device_ValidateDevice(IDirect3DDevice9Ex *iface, DWOR
|
|||
TRACE("iface %p, pass_count %p.\n", iface, pass_count);
|
||||
|
||||
wined3d_mutex_lock();
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
hr = wined3d_device_validate_device(device->wined3d_device, pass_count);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
|
@ -2885,6 +2888,7 @@ static HRESULT WINAPI d3d9_device_DrawPrimitive(IDirect3DDevice9Ex *iface,
|
|||
WARN("Called without a valid vertex declaration set.\n");
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
vertex_count = vertex_count_from_primitive_count(primitive_type, primitive_count);
|
||||
d3d9_device_upload_sysmem_vertex_buffers(device, 0, start_vertex, vertex_count);
|
||||
d3d9_generate_auto_mipmaps(device);
|
||||
|
@ -2917,6 +2921,7 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitive(IDirect3DDevice9Ex *iface
|
|||
WARN("Called without a valid vertex declaration set.\n");
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
index_count = vertex_count_from_primitive_count(primitive_type, primitive_count);
|
||||
d3d9_device_upload_sysmem_vertex_buffers(device, base_vertex_idx, min_vertex_idx, vertex_count);
|
||||
d3d9_device_upload_sysmem_index_buffer(device, start_idx, index_count);
|
||||
|
@ -3003,6 +3008,7 @@ static HRESULT WINAPI d3d9_device_DrawPrimitiveUP(IDirect3DDevice9Ex *iface,
|
|||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
hr = d3d9_device_prepare_vertex_buffer(device, size);
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
@ -3119,6 +3125,7 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitiveUP(IDirect3DDevice9Ex *ifa
|
|||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
hr = d3d9_device_prepare_vertex_buffer(device, vtx_size);
|
||||
if (FAILED(hr))
|
||||
goto done;
|
||||
|
@ -3203,6 +3210,8 @@ static HRESULT WINAPI d3d9_device_ProcessVertices(IDirect3DDevice9Ex *iface,
|
|||
|
||||
wined3d_mutex_lock();
|
||||
|
||||
wined3d_device_apply_stateblock(device->wined3d_device, device->state);
|
||||
|
||||
/* Note that an alternative approach would be to simply create these
|
||||
* buffers with WINED3D_RESOURCE_ACCESS_MAP_R and update them here like we
|
||||
* do for draws. In some regards that would be easier, but it seems less
|
||||
|
|
Loading…
Reference in New Issue