[Mesa-dev] [PATCH 1/3] gallium: split transfer_inline_write into buffer and texture callbacks
Marek Olšák
maraeo at gmail.com
Wed Jul 20 11:02:57 UTC 2016
On Tue, Jul 19, 2016 at 4:00 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 18.07.2016 14:25, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> to reduce the call indirections with u_resource_vtbl.
>>
>> The worst call tree you could get was:
>> - u_transfer_inline_write_vtbl
>> - u_default_transfer_inline_write
>> - u_transfer_map_vtbl
>> - driver_transfer_map
>> - u_transfer_unmap_vtbl
>> - driver_transfer_unmap
>>
>> That's 6 indirect calls. Some drivers only had 5. The goal is to have
>> 1 indirect call for drivers that care. The resource type can be determined
>> statically at most call sites.
>>
>> The new interface is:
>> pipe_context::buffer_subdata(ctx, resource, usage, offset, size, data)
>> pipe_context::texture_subdata(ctx, resource, level, usage, box, data,
>> stride, layer_stride)
>> ---
>
> [snip]
>
>> diff --git a/src/gallium/drivers/ilo/ilo_transfer.c
>> b/src/gallium/drivers/ilo/ilo_transfer.c
>> index 5abd3be..53029b6 100644
>> --- a/src/gallium/drivers/ilo/ilo_transfer.c
>> +++ b/src/gallium/drivers/ilo/ilo_transfer.c
>> @@ -1236,34 +1236,6 @@ ilo_transfer_map(struct pipe_context *pipe,
>> return ptr;
>> }
>>
>> -static void
>> -ilo_transfer_inline_write(struct pipe_context *pipe,
>> - struct pipe_resource *res,
>> - unsigned level,
>> - unsigned usage,
>> - const struct pipe_box *box,
>> - const void *data,
>> - unsigned stride,
>> - unsigned layer_stride)
>> -{
>> - if (likely(res->target == PIPE_BUFFER) &&
>> - !(usage & PIPE_TRANSFER_UNSYNCHRONIZED)) {
>> - /* they should specify just an offset and a size */
>> - assert(level == 0);
>> - assert(box->y == 0);
>> - assert(box->z == 0);
>> - assert(box->height == 1);
>> - assert(box->depth == 1);
>> -
>> - buf_pwrite(ilo_context(pipe), res,
>> - usage, box->x, box->width, data);
>> - }
>> - else {
>> - u_default_transfer_inline_write(pipe, res,
>> - level, usage, box, data, stride, layer_stride);
>> - }
>> -}
>> -
>> /**
>> * Initialize transfer-related functions.
>> */
>> @@ -1273,5 +1245,6 @@ ilo_init_transfer_functions(struct ilo_context *ilo)
>> ilo->base.transfer_map = ilo_transfer_map;
>> ilo->base.transfer_flush_region = ilo_transfer_flush_region;
>> ilo->base.transfer_unmap = ilo_transfer_unmap;
>> - ilo->base.transfer_inline_write = ilo_transfer_inline_write;
>> + ilo->base.buffer_subdata = u_default_buffer_subdata;
>> + ilo->base.texture_subdata = u_default_texture_subdata;
>
>
> This is a change of behavior - buffer_subdata should end up calling
> buf_pwrite in the !PIPE_TRANSFER_UNSYNCHRONIZED case. Or, if nobody cares,
> buf_pwrite should be deleted.
Or ilo can be deleted. It seems to be a dead driver.
Marek
More information about the mesa-dev
mailing list