Commit bed2495e authored by Elizabeth Figura's avatar Elizabeth Figura Committed by Alexandre Julliard

wined3d: Only suballocate dynamic buffers.

I don't know for sure that this is why iris (or nvidia) performs badly, but it seems perfectly plausible, and I don't think we lose anything by letting the driver allocate here. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=54223
parent 52a0e36a
......@@ -1126,6 +1126,19 @@ bool wined3d_device_gl_create_bo(struct wined3d_device_gl *device_gl, struct win
if (gl_info->supported[ARB_BUFFER_STORAGE])
{
/* Only suballocate dynamic buffers.
*
* We only need suballocation so that we can allocate GL buffers from
* the client thread and thereby accelerate DISCARD maps.
*
* For other buffer types, suballocating means that a whole-buffer
* upload won't be replacing the whole buffer anymore. If the driver
* isn't smart enough to track individual buffer ranges then it'll
* force synchronizing that BO with the GPU. Even using ARB_sync
* ourselves won't help here, because glBufferSubData() is still
* implicitly synchronized. */
if (flags & GL_CLIENT_STORAGE_BIT)
{
if (use_buffer_chunk_suballocation(device_gl, gl_info, binding))
{
if ((memory = wined3d_device_gl_allocate_memory(device_gl, context_gl, memory_type_idx, size, &id)))
......@@ -1138,6 +1151,11 @@ bool wined3d_device_gl_create_bo(struct wined3d_device_gl *device_gl, struct win
WARN_(d3d_perf)("Not allocating chunk memory for binding type %#x.\n", binding);
id = wined3d_context_gl_allocate_vram_chunk_buffer(context_gl, memory_type_idx, size);
}
}
else
{
id = wined3d_context_gl_allocate_vram_chunk_buffer(context_gl, memory_type_idx, size);
}
if (!id)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment