diff options
author | Marek Olšák <[email protected]> | 2016-07-16 21:19:48 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-07-23 13:33:42 +0200 |
commit | 1ffe77e7bb2486ea74cda077ed2a9622b758395c (patch) | |
tree | 4a04818614fc8c4e086e9dcd32dbadecbac4b6fb /src/gallium/drivers/nouveau | |
parent | 0ba7288376dc66f932336862c8a6abb629b47686 (diff) |
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 <[email protected]>
Acked-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau')
-rw-r--r-- | src/gallium/drivers/nouveau/nouveau_buffer.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nv30/nv30_miptree.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nv30/nv30_resource.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nv50/nv50_miptree.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nv50/nv50_resource.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c | 1 | ||||
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_resource.c | 3 |
7 files changed, 6 insertions, 7 deletions
diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.c b/src/gallium/drivers/nouveau/nouveau_buffer.c index 7c1421b5815..17052b26e9c 100644 --- a/src/gallium/drivers/nouveau/nouveau_buffer.c +++ b/src/gallium/drivers/nouveau/nouveau_buffer.c @@ -634,7 +634,6 @@ const struct u_resource_vtbl nouveau_buffer_vtbl = nouveau_buffer_transfer_map, /* transfer_map */ nouveau_buffer_transfer_flush_region, /* transfer_flush_region */ nouveau_buffer_transfer_unmap, /* transfer_unmap */ - u_default_transfer_inline_write /* transfer_inline_write */ }; struct pipe_resource * diff --git a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c index c6f69650068..165b8f29b4b 100644 --- a/src/gallium/drivers/nouveau/nv30/nv30_miptree.c +++ b/src/gallium/drivers/nouveau/nv30/nv30_miptree.c @@ -358,7 +358,6 @@ const struct u_resource_vtbl nv30_miptree_vtbl = { nv30_miptree_transfer_map, u_default_transfer_flush_region, nv30_miptree_transfer_unmap, - u_default_transfer_inline_write }; struct pipe_resource * diff --git a/src/gallium/drivers/nouveau/nv30/nv30_resource.c b/src/gallium/drivers/nouveau/nv30/nv30_resource.c index 4d215d2e616..6238a2384cb 100644 --- a/src/gallium/drivers/nouveau/nv30/nv30_resource.c +++ b/src/gallium/drivers/nouveau/nv30/nv30_resource.c @@ -90,7 +90,8 @@ nv30_resource_init(struct pipe_context *pipe) pipe->transfer_map = u_transfer_map_vtbl; pipe->transfer_flush_region = u_transfer_flush_region_vtbl; pipe->transfer_unmap = u_transfer_unmap_vtbl; - pipe->transfer_inline_write = u_transfer_inline_write_vtbl; + pipe->buffer_subdata = u_default_buffer_subdata; + pipe->texture_subdata = u_default_texture_subdata; pipe->create_surface = nv30_miptree_surface_new; pipe->surface_destroy = nv30_miptree_surface_del; pipe->resource_copy_region = nv30_resource_copy_region; diff --git a/src/gallium/drivers/nouveau/nv50/nv50_miptree.c b/src/gallium/drivers/nouveau/nv50/nv50_miptree.c index 745011977b3..f2e304fde62 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_miptree.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_miptree.c @@ -204,7 +204,6 @@ const struct u_resource_vtbl nv50_miptree_vtbl = nv50_miptree_transfer_map, /* transfer_map */ u_default_transfer_flush_region, /* transfer_flush_region */ nv50_miptree_transfer_unmap, /* transfer_unmap */ - u_default_transfer_inline_write /* transfer_inline_write */ }; static inline bool diff --git a/src/gallium/drivers/nouveau/nv50/nv50_resource.c b/src/gallium/drivers/nouveau/nv50/nv50_resource.c index b090a30aed6..aed8c6241d4 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_resource.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_resource.c @@ -97,7 +97,8 @@ nv50_init_resource_functions(struct pipe_context *pcontext) pcontext->transfer_map = u_transfer_map_vtbl; pcontext->transfer_flush_region = u_transfer_flush_region_vtbl; pcontext->transfer_unmap = u_transfer_unmap_vtbl; - pcontext->transfer_inline_write = u_transfer_inline_write_vtbl; + pcontext->buffer_subdata = u_default_buffer_subdata; + pcontext->texture_subdata = u_default_texture_subdata; pcontext->create_surface = nv50_surface_create; pcontext->surface_destroy = nv50_surface_destroy; pcontext->invalidate_resource = nv50_invalidate_resource; diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c b/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c index ed1ac48315b..27674f72a7c 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_miptree.c @@ -240,7 +240,6 @@ const struct u_resource_vtbl nvc0_miptree_vtbl = nvc0_miptree_transfer_map, /* transfer_map */ u_default_transfer_flush_region, /* transfer_flush_region */ nvc0_miptree_transfer_unmap, /* transfer_unmap */ - u_default_transfer_inline_write /* transfer_inline_write */ }; struct pipe_resource * diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c b/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c index 0aee5890fd8..9bafe3d835d 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_resource.c @@ -49,7 +49,8 @@ nvc0_init_resource_functions(struct pipe_context *pcontext) pcontext->transfer_map = u_transfer_map_vtbl; pcontext->transfer_flush_region = u_transfer_flush_region_vtbl; pcontext->transfer_unmap = u_transfer_unmap_vtbl; - pcontext->transfer_inline_write = u_transfer_inline_write_vtbl; + pcontext->buffer_subdata = u_default_buffer_subdata; + pcontext->texture_subdata = u_default_texture_subdata; pcontext->create_surface = nvc0_surface_create; pcontext->surface_destroy = nv50_surface_destroy; pcontext->invalidate_resource = nv50_invalidate_resource; |