[PATCH 1/5] d3d9: Support drawing from D3DPOOL_SYSTEMMEM vertex buffers.
Józef Kucia
joseph.kucia at gmail.com
Thu Dec 13 08:06:43 CST 2018
On Wed, Dec 12, 2018 at 5:10 PM Matteo Bruni <mbruni at codeweavers.com> wrote:
> +static void d3d9_device_upload_sysmem_buffers(struct d3d9_device *device,
> + unsigned int start_vertex, unsigned int vertex_count)
> +{
> + struct wined3d_box box = {0, 0, 0, 1, 0, 1};
> + struct d3d9_vertexbuffer *d3d9_buffer;
> + unsigned int i, offset, stride, map;
> + struct wined3d_buffer *dst_buffer;
> + HRESULT hr;
> +
> + map = device->upload_map;
> + while (map)
> + {
> + i = ffs(map) - 1;
> + map ^= 1u << i;
> +
> + if (FAILED(hr = wined3d_device_get_stream_source(device->wined3d_device, i, &dst_buffer, &offset, &stride)))
> + ERR("Failed to get stream source.\n");
> + d3d9_buffer = wined3d_buffer_get_parent(dst_buffer);
> + box.left = offset + start_vertex * stride;
> + box.right = box.left + vertex_count * stride;
> + if (FAILED(hr = wined3d_device_copy_sub_resource_region(device->wined3d_device,
> + wined3d_buffer_get_resource(dst_buffer), 0, box.left, 0, 0,
> + wined3d_buffer_get_resource(d3d9_buffer->wined3d_buffer), 0, &box, 0)))
> + ERR("Failed to update buffer.\n");
> + }
> +}
It looks like this might stall the rendering pipeline frequently, i.e.
we will be updating the same draw buffers continuously between
subsequent draw calls with system memory buffers. I am not sure how
important it is in practice.
More information about the wine-devel
mailing list