[PATCH 3/4] wined3d: Use the chunk allocator for GL as well.

Zebediah Figura zfigura at codeweavers.com
Thu Dec 9 11:40:28 CST 2021


On 12/9/21 06:59, Henri Verbeet wrote:
> On Thu, 9 Dec 2021 at 05:41, Zebediah Figura <zfigura at codeweavers.com> wrote:
>> @@ -2902,12 +3098,45 @@ void wined3d_context_gl_destroy_bo(struct wined3d_context_gl *context_gl, struct
>>   bool wined3d_context_gl_create_bo(struct wined3d_context_gl *context_gl, GLsizeiptr size,
>>           GLenum binding, GLenum usage, bool coherent, GLbitfield flags, struct wined3d_bo_gl *bo)
>>   {
>> +    unsigned int memory_type_idx = wined3d_device_gl_find_memory_type(flags);
>>       const struct wined3d_gl_info *gl_info = context_gl->gl_info;
>> +    struct wined3d_allocator_block *memory = NULL;
>> +    GLsizeiptr buffer_offset = 0;
>>       GLuint id = 0;
>>
>>       TRACE("context_gl %p, size %lu, binding %#x, usage %#x, coherent %#x, flags %#x, bo %p.\n",
>>               context_gl, size, binding, usage, coherent, flags, bo);
>>
>> +    if (gl_info->supported[ARB_BUFFER_STORAGE])
>> +    {
>> +        switch (binding)
>> +        {
>> +            case GL_ARRAY_BUFFER:
>> +            case GL_ATOMIC_COUNTER_BUFFER:
>> +            case GL_DRAW_INDIRECT_BUFFER:
>> +            case GL_PIXEL_UNPACK_BUFFER:
>> +            case GL_TEXTURE_BUFFER:
>> +            case GL_TRANSFORM_FEEDBACK_BUFFER:
>> +            case GL_UNIFORM_BUFFER:
>> +                if ((memory = wined3d_context_gl_allocate_memory(context_gl, memory_type_idx, size, &id)))
>> +                    buffer_offset = memory->offset;
>> +                break;
>> +
>> +            default:
>> +                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);
>> +                break;
>> +        }
>> +
>> +        if (!id)
>> +        {
>> +            WARN("Failed to allocate buffer.\n");
>> +            return false;
>> +        }
>> +
>> +        goto done;
>> +    }
>> +
>>       GL_EXTCALL(glGenBuffers(1, &id));
>>       if (!id)
>>       {
> For bisection purposes, it would probably make sense to split this
> into several patches by binding type. I'm also a little hesitant about
> committing this so close before code-freeze. This is a fairly
> significant change to the way things work, and there are certainly
> opportunities for regressions here.
> 

Indeed, both good points...

I'll split this, and save it for after code freeze.



More information about the wine-devel mailing list