gallium: split transfer_inline_write into buffer and texture callbacks
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) v2: fix whitespace, correct ilo's behavior Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Acked-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
@@ -359,11 +359,11 @@ vlVdpVideoSurfacePutBitsYCbCr(VdpVideoSurface surface,
|
||||
width, height, 1
|
||||
};
|
||||
|
||||
pipe->transfer_inline_write(pipe, sv->texture, 0,
|
||||
PIPE_TRANSFER_WRITE, &dst_box,
|
||||
source_data[i] + source_pitches[i] * j,
|
||||
source_pitches[i] * sv->texture->array_size,
|
||||
0);
|
||||
pipe->texture_subdata(pipe, sv->texture, 0,
|
||||
PIPE_TRANSFER_WRITE, &dst_box,
|
||||
source_data[i] + source_pitches[i] * j,
|
||||
source_pitches[i] * sv->texture->array_size,
|
||||
0);
|
||||
}
|
||||
}
|
||||
pipe_mutex_unlock(p_surf->device->mutex);
|
||||
|
Reference in New Issue
Block a user