mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 02:26:33 +00:00
[D3D8][D3D9][DDRAW][WINED3D] Sync with Wine Staging 3.9. CORE-14656
This commit is contained in:
parent
a5f73f6c86
commit
7af3969e9f
42 changed files with 5268 additions and 4706 deletions
|
@ -348,7 +348,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer,
|
|||
wined3d_device_copy_sub_resource_region(device->wined3d_device,
|
||||
wined3d_buffer_get_resource(buffer->dst_vertex_buffer), 0,
|
||||
ci->wDest * sizeof(D3DTLVERTEX), 0, 0,
|
||||
wined3d_buffer_get_resource(buffer->src_vertex_buffer), 0, &box);
|
||||
wined3d_buffer_get_resource(buffer->src_vertex_buffer), 0, &box, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -610,9 +610,16 @@ static HRESULT WINAPI d3d_execute_buffer_SetExecuteData(IDirect3DExecuteBuffer *
|
|||
struct wined3d_map_desc map_desc;
|
||||
struct wined3d_box box = {0};
|
||||
HRESULT hr;
|
||||
DWORD buf_size = buffer->desc.dwBufferSize, copy_size;
|
||||
|
||||
TRACE("iface %p, data %p.\n", iface, data);
|
||||
|
||||
if (data->dwSize != sizeof(*data))
|
||||
{
|
||||
WARN("data->dwSize is %u, returning DDERR_INVALIDPARAMS.\n", data->dwSize);
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
|
||||
/* Skip past previous vertex data. */
|
||||
buffer->src_vertex_pos += buffer->data.dwVertexCount;
|
||||
|
||||
|
@ -659,7 +666,7 @@ static HRESULT WINAPI d3d_execute_buffer_SetExecuteData(IDirect3DExecuteBuffer *
|
|||
buffer->src_vertex_pos = 0;
|
||||
}
|
||||
|
||||
if (data->dwVertexCount)
|
||||
if (data->dwVertexCount && (!buf_size || data->dwVertexOffset < buf_size))
|
||||
{
|
||||
box.left = buffer->src_vertex_pos * sizeof(D3DVERTEX);
|
||||
box.right = box.left + data->dwVertexCount * sizeof(D3DVERTEX);
|
||||
|
@ -667,8 +674,11 @@ static HRESULT WINAPI d3d_execute_buffer_SetExecuteData(IDirect3DExecuteBuffer *
|
|||
0, &map_desc, &box, WINED3D_MAP_WRITE)))
|
||||
return hr;
|
||||
|
||||
memcpy(map_desc.data, ((BYTE *)buffer->desc.lpData) + data->dwVertexOffset,
|
||||
data->dwVertexCount * sizeof(D3DVERTEX));
|
||||
copy_size = data->dwVertexCount * sizeof(D3DVERTEX);
|
||||
if (buf_size)
|
||||
copy_size = min(copy_size, buf_size - data->dwVertexOffset);
|
||||
|
||||
memcpy(map_desc.data, ((BYTE *)buffer->desc.lpData) + data->dwVertexOffset, copy_size);
|
||||
|
||||
wined3d_resource_unmap(wined3d_buffer_get_resource(buffer->src_vertex_buffer), 0);
|
||||
}
|
||||
|
@ -696,12 +706,11 @@ static HRESULT WINAPI d3d_execute_buffer_SetExecuteData(IDirect3DExecuteBuffer *
|
|||
static HRESULT WINAPI d3d_execute_buffer_GetExecuteData(IDirect3DExecuteBuffer *iface, D3DEXECUTEDATA *data)
|
||||
{
|
||||
struct d3d_execute_buffer *buffer = impl_from_IDirect3DExecuteBuffer(iface);
|
||||
DWORD dwSize;
|
||||
|
||||
TRACE("iface %p, data %p.\n", iface, data);
|
||||
|
||||
dwSize = data->dwSize;
|
||||
memcpy(data, &buffer->data, dwSize);
|
||||
/* Tests show that dwSize is ignored. */
|
||||
memcpy(data, &buffer->data, sizeof(*data));
|
||||
|
||||
if (TRACE_ON(ddraw))
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue