gallium: remove u_resource_vtbl::transfer_(un)map
This removes the call indirection. Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10659>
This commit is contained in:
parent
eb74f97769
commit
38171635af
|
@ -97,22 +97,3 @@ u_resource( struct pipe_resource *res )
|
|||
{
|
||||
return (struct u_resource *)res;
|
||||
}
|
||||
|
||||
void *u_transfer_map_vtbl(struct pipe_context *context,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **transfer)
|
||||
{
|
||||
struct u_resource *ur = u_resource(resource);
|
||||
return ur->vtbl->transfer_map(context, resource, level, usage, box,
|
||||
transfer);
|
||||
}
|
||||
|
||||
void u_transfer_unmap_vtbl( struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer )
|
||||
{
|
||||
struct u_resource *ur = u_resource(transfer->resource);
|
||||
ur->vtbl->transfer_unmap(pipe, transfer);
|
||||
}
|
||||
|
|
|
@ -36,15 +36,6 @@ void u_default_transfer_flush_region( struct pipe_context *pipe,
|
|||
* to exist in a single driver. This is intended to be transitionary!
|
||||
*/
|
||||
struct u_resource_vtbl {
|
||||
void *(*transfer_map)(struct pipe_context *,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *,
|
||||
struct pipe_transfer **);
|
||||
|
||||
void (*transfer_unmap)( struct pipe_context *,
|
||||
struct pipe_transfer *transfer );
|
||||
};
|
||||
|
||||
|
||||
|
@ -53,17 +44,6 @@ struct u_resource {
|
|||
const struct u_resource_vtbl *vtbl;
|
||||
};
|
||||
|
||||
|
||||
void *u_transfer_map_vtbl(struct pipe_context *context,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **transfer);
|
||||
|
||||
void u_transfer_unmap_vtbl( struct pipe_context *rm_ctx,
|
||||
struct pipe_transfer *transfer );
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C" {
|
||||
#endif
|
||||
|
|
|
@ -36,11 +36,11 @@ i915_resource_from_handle(struct pipe_screen * screen,
|
|||
void
|
||||
i915_init_resource_functions(struct i915_context *i915 )
|
||||
{
|
||||
i915->base.buffer_map = u_transfer_map_vtbl;
|
||||
i915->base.texture_map = u_transfer_map_vtbl;
|
||||
i915->base.buffer_map = i915_buffer_transfer_map;
|
||||
i915->base.texture_map = i915_texture_transfer_map;
|
||||
i915->base.transfer_flush_region = u_default_transfer_flush_region;
|
||||
i915->base.buffer_unmap = u_transfer_unmap_vtbl;
|
||||
i915->base.texture_unmap = u_transfer_unmap_vtbl;
|
||||
i915->base.buffer_unmap = i915_buffer_transfer_unmap;
|
||||
i915->base.texture_unmap = i915_texture_transfer_unmap;
|
||||
i915->base.buffer_subdata = i915_buffer_subdata;
|
||||
i915->base.texture_subdata = u_default_texture_subdata;
|
||||
}
|
||||
|
|
|
@ -146,4 +146,28 @@ i915_buffer_subdata(struct pipe_context *rm_ctx,
|
|||
unsigned usage, unsigned offset,
|
||||
unsigned size, const void *data);
|
||||
|
||||
void *
|
||||
i915_buffer_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
void
|
||||
i915_buffer_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
void *
|
||||
i915_texture_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
void
|
||||
i915_texture_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
#endif /* I915_RESOURCE_H */
|
||||
|
|
|
@ -66,7 +66,7 @@ i915_resource_destroy(struct pipe_screen *screen,
|
|||
}
|
||||
|
||||
|
||||
static void *
|
||||
void *
|
||||
i915_buffer_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
|
@ -90,7 +90,7 @@ i915_buffer_transfer_map(struct pipe_context *pipe,
|
|||
return buffer->data + transfer->box.x;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
i915_buffer_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
|
@ -112,8 +112,6 @@ i915_buffer_subdata(struct pipe_context *rm_ctx,
|
|||
|
||||
struct u_resource_vtbl i915_buffer_vtbl =
|
||||
{
|
||||
i915_buffer_transfer_map, /* transfer_map */
|
||||
i915_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -698,7 +698,7 @@ i915_resource_get_handle(struct pipe_screen *screen,
|
|||
return iws->buffer_get_handle(iws, tex->buffer, whandle, tex->stride);
|
||||
}
|
||||
|
||||
static void *
|
||||
void *
|
||||
i915_texture_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
|
@ -774,7 +774,7 @@ i915_texture_transfer_map(struct pipe_context *pipe,
|
|||
box->x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
i915_texture_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
|
@ -895,8 +895,6 @@ out:
|
|||
|
||||
struct u_resource_vtbl i915_texture_vtbl =
|
||||
{
|
||||
i915_texture_transfer_map, /* transfer_map */
|
||||
i915_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -20,6 +20,17 @@ struct nouveau_transfer {
|
|||
uint32_t offset;
|
||||
};
|
||||
|
||||
static void *
|
||||
nouveau_user_ptr_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level, unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
static void
|
||||
nouveau_user_ptr_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
static inline struct nouveau_transfer *
|
||||
nouveau_transfer(struct pipe_transfer *transfer)
|
||||
{
|
||||
|
@ -377,7 +388,7 @@ nouveau_buffer_should_discard(struct nv04_resource *buf, unsigned usage)
|
|||
* The strategy for determining what kind of memory area to return is complex,
|
||||
* see comments inside of the function.
|
||||
*/
|
||||
static void *
|
||||
void *
|
||||
nouveau_buffer_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level, unsigned usage,
|
||||
|
@ -386,6 +397,10 @@ nouveau_buffer_transfer_map(struct pipe_context *pipe,
|
|||
{
|
||||
struct nouveau_context *nv = nouveau_context(pipe);
|
||||
struct nv04_resource *buf = nv04_resource(resource);
|
||||
|
||||
if (buf->status & NOUVEAU_BUFFER_STATUS_USER_PTR)
|
||||
return nouveau_user_ptr_transfer_map(pipe, resource, level, usage, box, ptransfer);
|
||||
|
||||
struct nouveau_transfer *tx = MALLOC_STRUCT(nouveau_transfer);
|
||||
uint8_t *map;
|
||||
int ret;
|
||||
|
@ -533,14 +548,18 @@ nouveau_buffer_transfer_flush_region(struct pipe_context *pipe,
|
|||
*
|
||||
* Also marks vbo dirty based on the buffer's binding
|
||||
*/
|
||||
static void
|
||||
void
|
||||
nouveau_buffer_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
struct nouveau_context *nv = nouveau_context(pipe);
|
||||
struct nouveau_transfer *tx = nouveau_transfer(transfer);
|
||||
struct nv04_resource *buf = nv04_resource(transfer->resource);
|
||||
|
||||
if (buf->status & NOUVEAU_BUFFER_STATUS_USER_PTR)
|
||||
return nouveau_user_ptr_transfer_unmap(pipe, transfer);
|
||||
|
||||
struct nouveau_transfer *tx = nouveau_transfer(transfer);
|
||||
|
||||
if (tx->base.usage & PIPE_MAP_WRITE) {
|
||||
if (!(tx->base.usage & PIPE_MAP_FLUSH_EXPLICIT)) {
|
||||
if (tx->map)
|
||||
|
@ -635,8 +654,6 @@ nouveau_resource_map_offset(struct nouveau_context *nv,
|
|||
|
||||
const struct u_resource_vtbl nouveau_buffer_vtbl =
|
||||
{
|
||||
nouveau_buffer_transfer_map, /* transfer_map */
|
||||
nouveau_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
static void *
|
||||
|
@ -664,8 +681,6 @@ nouveau_user_ptr_transfer_unmap(struct pipe_context *pipe,
|
|||
|
||||
const struct u_resource_vtbl nouveau_user_ptr_buffer_vtbl =
|
||||
{
|
||||
nouveau_user_ptr_transfer_map, /* transfer_map */
|
||||
nouveau_user_ptr_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
struct pipe_resource *
|
||||
|
|
|
@ -128,4 +128,15 @@ nouveau_scratch_data(struct nouveau_context *,
|
|||
const void *data, unsigned base, unsigned size,
|
||||
struct nouveau_bo **);
|
||||
|
||||
void *
|
||||
nouveau_buffer_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level, unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
void
|
||||
nouveau_buffer_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -276,7 +276,7 @@ nv30_flush_resource(struct pipe_context *pipe,
|
|||
{
|
||||
}
|
||||
|
||||
static void *
|
||||
void *
|
||||
nv30_miptree_transfer_map(struct pipe_context *pipe, struct pipe_resource *pt,
|
||||
unsigned level, unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
|
@ -370,7 +370,7 @@ nv30_miptree_transfer_map(struct pipe_context *pipe, struct pipe_resource *pt,
|
|||
return tx->tmp.bo->map;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
nv30_miptree_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *ptx)
|
||||
{
|
||||
|
@ -403,8 +403,6 @@ nv30_miptree_transfer_unmap(struct pipe_context *pipe,
|
|||
}
|
||||
|
||||
const struct u_resource_vtbl nv30_miptree_vtbl = {
|
||||
nv30_miptree_transfer_map,
|
||||
nv30_miptree_transfer_unmap,
|
||||
};
|
||||
|
||||
struct pipe_resource *
|
||||
|
|
|
@ -92,11 +92,11 @@ nv30_resource_screen_init(struct pipe_screen *pscreen)
|
|||
void
|
||||
nv30_resource_init(struct pipe_context *pipe)
|
||||
{
|
||||
pipe->buffer_map = u_transfer_map_vtbl;
|
||||
pipe->texture_map = u_transfer_map_vtbl;
|
||||
pipe->buffer_map = nouveau_buffer_transfer_map;
|
||||
pipe->texture_map = nv30_miptree_transfer_map;
|
||||
pipe->transfer_flush_region = nouveau_buffer_transfer_flush_region;
|
||||
pipe->buffer_unmap = u_transfer_unmap_vtbl;
|
||||
pipe->texture_unmap = u_transfer_unmap_vtbl;
|
||||
pipe->buffer_unmap = nouveau_buffer_transfer_unmap;
|
||||
pipe->texture_unmap = nv30_miptree_transfer_unmap;
|
||||
pipe->buffer_subdata = u_default_buffer_subdata;
|
||||
pipe->texture_subdata = u_default_texture_subdata;
|
||||
pipe->create_surface = nv30_miptree_surface_new;
|
||||
|
|
|
@ -83,4 +83,14 @@ void
|
|||
nv30_flush_resource(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource);
|
||||
|
||||
void *
|
||||
nv30_miptree_transfer_map(struct pipe_context *pipe, struct pipe_resource *pt,
|
||||
unsigned level, unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
void
|
||||
nv30_miptree_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *ptx);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -204,8 +204,6 @@ nv50_miptree_get_handle(struct pipe_screen *pscreen,
|
|||
|
||||
const struct u_resource_vtbl nv50_miptree_vtbl =
|
||||
{
|
||||
nv50_miptree_transfer_map, /* transfer_map */
|
||||
nv50_miptree_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
static inline bool
|
||||
|
|
|
@ -103,11 +103,11 @@ nv50_invalidate_resource(struct pipe_context *pipe, struct pipe_resource *res)
|
|||
void
|
||||
nv50_init_resource_functions(struct pipe_context *pcontext)
|
||||
{
|
||||
pcontext->buffer_map = u_transfer_map_vtbl;
|
||||
pcontext->texture_map = u_transfer_map_vtbl;
|
||||
pcontext->buffer_map = nouveau_buffer_transfer_map;
|
||||
pcontext->texture_map = nv50_miptree_transfer_map;
|
||||
pcontext->transfer_flush_region = nouveau_buffer_transfer_flush_region;
|
||||
pcontext->buffer_unmap = u_transfer_unmap_vtbl;
|
||||
pcontext->texture_unmap = u_transfer_unmap_vtbl;
|
||||
pcontext->buffer_unmap = nouveau_buffer_transfer_unmap;
|
||||
pcontext->texture_unmap = nv50_miptree_transfer_unmap;
|
||||
pcontext->buffer_subdata = u_default_buffer_subdata;
|
||||
pcontext->texture_subdata = u_default_texture_subdata;
|
||||
pcontext->create_surface = nv50_surface_create;
|
||||
|
|
|
@ -438,8 +438,6 @@ nvc0_miptree_select_best_modifier(struct pipe_screen *pscreen,
|
|||
|
||||
const struct u_resource_vtbl nvc0_miptree_vtbl =
|
||||
{
|
||||
nvc0_miptree_transfer_map, /* transfer_map */
|
||||
nvc0_miptree_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
struct pipe_resource *
|
||||
|
|
|
@ -154,11 +154,11 @@ nvc0_resource_from_user_memory(struct pipe_screen *pipe,
|
|||
void
|
||||
nvc0_init_resource_functions(struct pipe_context *pcontext)
|
||||
{
|
||||
pcontext->buffer_map = u_transfer_map_vtbl;
|
||||
pcontext->texture_map = u_transfer_map_vtbl;
|
||||
pcontext->buffer_map = nouveau_buffer_transfer_map;
|
||||
pcontext->texture_map = nvc0_miptree_transfer_map;
|
||||
pcontext->transfer_flush_region = nouveau_buffer_transfer_flush_region;
|
||||
pcontext->buffer_unmap = u_transfer_unmap_vtbl;
|
||||
pcontext->texture_unmap = u_transfer_unmap_vtbl;
|
||||
pcontext->buffer_unmap = nouveau_buffer_transfer_unmap;
|
||||
pcontext->texture_unmap = nvc0_miptree_transfer_unmap;
|
||||
pcontext->buffer_subdata = u_default_buffer_subdata;
|
||||
pcontext->texture_subdata = u_default_texture_subdata;
|
||||
pcontext->create_surface = nvc0_surface_create;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "r300_context.h"
|
||||
#include "r300_texture.h"
|
||||
#include "r300_transfer.h"
|
||||
#include "r300_screen_buffer.h"
|
||||
|
||||
static struct pipe_resource *
|
||||
|
@ -40,11 +41,11 @@ r300_resource_create(struct pipe_screen *screen,
|
|||
|
||||
void r300_init_resource_functions(struct r300_context *r300)
|
||||
{
|
||||
r300->context.buffer_map = u_transfer_map_vtbl;
|
||||
r300->context.texture_map = u_transfer_map_vtbl;
|
||||
r300->context.buffer_map = r300_buffer_transfer_map;
|
||||
r300->context.texture_map = r300_texture_transfer_map;
|
||||
r300->context.transfer_flush_region = u_default_transfer_flush_region;
|
||||
r300->context.buffer_unmap = u_transfer_unmap_vtbl;
|
||||
r300->context.texture_unmap = u_transfer_unmap_vtbl;
|
||||
r300->context.buffer_unmap = r300_buffer_transfer_unmap;
|
||||
r300->context.texture_unmap = r300_texture_transfer_unmap;
|
||||
r300->context.buffer_subdata = u_default_buffer_subdata;
|
||||
r300->context.texture_subdata = u_default_texture_subdata;
|
||||
r300->context.create_surface = r300_create_surface;
|
||||
|
|
|
@ -78,7 +78,7 @@ void r300_resource_destroy(struct pipe_screen *screen,
|
|||
}
|
||||
}
|
||||
|
||||
static void *
|
||||
void *
|
||||
r300_buffer_transfer_map( struct pipe_context *context,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
|
@ -153,8 +153,8 @@ r300_buffer_transfer_map( struct pipe_context *context,
|
|||
return map + box->x;
|
||||
}
|
||||
|
||||
static void r300_buffer_transfer_unmap( struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer )
|
||||
void r300_buffer_transfer_unmap( struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer )
|
||||
{
|
||||
struct r300_context *r300 = r300_context(pipe);
|
||||
|
||||
|
@ -163,8 +163,6 @@ static void r300_buffer_transfer_unmap( struct pipe_context *pipe,
|
|||
|
||||
static const struct u_resource_vtbl r300_buffer_vtbl =
|
||||
{
|
||||
r300_buffer_transfer_map, /* transfer_map */
|
||||
r300_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
struct pipe_resource *r300_buffer_create(struct pipe_screen *screen,
|
||||
|
|
|
@ -54,4 +54,15 @@ static inline struct r300_buffer *r300_buffer(struct pipe_resource *buffer)
|
|||
return (struct r300_buffer *)buffer;
|
||||
}
|
||||
|
||||
void *
|
||||
r300_buffer_transfer_map( struct pipe_context *context,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer );
|
||||
|
||||
void r300_buffer_transfer_unmap( struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer );
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1042,8 +1042,6 @@ bool r300_resource_get_handle(struct pipe_screen* screen,
|
|||
|
||||
static const struct u_resource_vtbl r300_texture_vtbl =
|
||||
{
|
||||
r300_texture_transfer_map, /* transfer_map */
|
||||
r300_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
/* The common texture constructor. */
|
||||
|
|
|
@ -1230,12 +1230,12 @@ void evergreen_init_compute_state_functions(struct r600_context *rctx)
|
|||
|
||||
}
|
||||
|
||||
static void *r600_compute_global_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer)
|
||||
void *r600_compute_global_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer)
|
||||
{
|
||||
struct r600_context *rctx = (struct r600_context*)ctx;
|
||||
struct compute_memory_pool *pool = rctx->screen->global_pool;
|
||||
|
@ -1281,8 +1281,8 @@ static void *r600_compute_global_transfer_map(struct pipe_context *ctx,
|
|||
offset, box->width, usage, ptransfer);
|
||||
}
|
||||
|
||||
static void r600_compute_global_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
void r600_compute_global_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
/* struct r600_resource_global are not real resources, they just map
|
||||
* to an offset within the compute memory pool. The function
|
||||
|
@ -1317,8 +1317,6 @@ void r600_compute_global_buffer_destroy(struct pipe_screen *screen,
|
|||
|
||||
static const struct u_resource_vtbl r600_global_buffer_vtbl =
|
||||
{
|
||||
r600_compute_global_transfer_map, /* transfer_map */
|
||||
r600_compute_global_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
struct pipe_resource *r600_compute_global_buffer_create(struct pipe_screen *screen,
|
||||
|
|
|
@ -46,5 +46,13 @@ struct r600_resource* r600_compute_buffer_alloc_vram(struct r600_screen *screen,
|
|||
struct pipe_resource *r600_compute_global_buffer_create(struct pipe_screen *screen, const struct pipe_resource *templ);
|
||||
void r600_compute_global_buffer_destroy(struct pipe_screen *screen,
|
||||
struct pipe_resource *res);
|
||||
void *r600_compute_global_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
void r600_compute_global_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
*/
|
||||
|
||||
#include "r600_cs.h"
|
||||
#include "evergreen_compute.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_upload_mgr.h"
|
||||
#include <inttypes.h>
|
||||
|
@ -338,18 +339,22 @@ static bool r600_can_dma_copy_buffer(struct r600_common_context *rctx,
|
|||
|
||||
}
|
||||
|
||||
static void *r600_buffer_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer)
|
||||
void *r600_buffer_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer)
|
||||
{
|
||||
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
|
||||
struct r600_common_screen *rscreen = (struct r600_common_screen*)ctx->screen;
|
||||
struct r600_resource *rbuffer = r600_resource(resource);
|
||||
uint8_t *data;
|
||||
|
||||
if (r600_resource(resource)->compute_global_bo) {
|
||||
return r600_compute_global_transfer_map(ctx, resource, level, usage, box, ptransfer);
|
||||
}
|
||||
|
||||
assert(box->x + box->width <= resource->width0);
|
||||
|
||||
/* From GL_AMD_pinned_memory issues:
|
||||
|
@ -519,12 +524,17 @@ void r600_buffer_flush_region(struct pipe_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
static void r600_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
void r600_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
|
||||
struct r600_transfer *rtransfer = (struct r600_transfer*)transfer;
|
||||
|
||||
if (r600_resource(transfer->resource)->compute_global_bo) {
|
||||
r600_compute_global_transfer_unmap(ctx, transfer);
|
||||
return;
|
||||
}
|
||||
|
||||
if (transfer->usage & PIPE_MAP_WRITE &&
|
||||
!(transfer->usage & PIPE_MAP_FLUSH_EXPLICIT))
|
||||
r600_buffer_do_flush_region(ctx, transfer, &transfer->box);
|
||||
|
@ -563,8 +573,6 @@ void r600_buffer_subdata(struct pipe_context *ctx,
|
|||
|
||||
static const struct u_resource_vtbl r600_buffer_vtbl =
|
||||
{
|
||||
r600_buffer_transfer_map, /* transfer_map */
|
||||
r600_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
static struct r600_resource *
|
||||
|
|
|
@ -590,11 +590,11 @@ bool r600_common_context_init(struct r600_common_context *rctx,
|
|||
|
||||
rctx->b.invalidate_resource = r600_invalidate_resource;
|
||||
rctx->b.resource_commit = r600_resource_commit;
|
||||
rctx->b.buffer_map = u_transfer_map_vtbl;
|
||||
rctx->b.texture_map = u_transfer_map_vtbl;
|
||||
rctx->b.buffer_map = r600_buffer_transfer_map;
|
||||
rctx->b.texture_map = r600_texture_transfer_map;
|
||||
rctx->b.transfer_flush_region = r600_buffer_flush_region;
|
||||
rctx->b.buffer_unmap = u_transfer_unmap_vtbl;
|
||||
rctx->b.texture_unmap = u_transfer_unmap_vtbl;
|
||||
rctx->b.buffer_unmap = r600_buffer_transfer_unmap;
|
||||
rctx->b.texture_unmap = r600_texture_transfer_unmap;
|
||||
rctx->b.texture_subdata = u_default_texture_subdata;
|
||||
rctx->b.flush = r600_flush_from_st;
|
||||
rctx->b.set_debug_callback = r600_set_debug_callback;
|
||||
|
|
|
@ -663,6 +663,14 @@ r600_invalidate_resource(struct pipe_context *ctx,
|
|||
void r600_replace_buffer_storage(struct pipe_context *ctx,
|
||||
struct pipe_resource *dst,
|
||||
struct pipe_resource *src);
|
||||
void *r600_buffer_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
void r600_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
/* r600_common_pipe.c */
|
||||
void r600_gfx_write_event_eop(struct r600_common_context *ctx,
|
||||
|
@ -775,6 +783,14 @@ void r600_init_context_texture_functions(struct r600_common_context *rctx);
|
|||
void eg_resource_alloc_immed(struct r600_common_screen *rscreen,
|
||||
struct r600_resource *res,
|
||||
unsigned immed_size);
|
||||
void *r600_texture_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *texture,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
void r600_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer* transfer);
|
||||
|
||||
/* r600_viewport.c */
|
||||
void evergreen_apply_scissor_bug_workaround(struct r600_common_context *rctx,
|
||||
|
|
|
@ -1287,12 +1287,12 @@ static void r600_texture_invalidate_storage(struct r600_common_context *rctx,
|
|||
rctx->num_alloc_tex_transfer_bytes += rtex->size;
|
||||
}
|
||||
|
||||
static void *r600_texture_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *texture,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer)
|
||||
void *r600_texture_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *texture,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer)
|
||||
{
|
||||
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
|
||||
struct r600_texture *rtex = (struct r600_texture*)texture;
|
||||
|
@ -1472,8 +1472,8 @@ static void *r600_texture_transfer_map(struct pipe_context *ctx,
|
|||
return map + offset;
|
||||
}
|
||||
|
||||
static void r600_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer* transfer)
|
||||
void r600_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer* transfer)
|
||||
{
|
||||
struct r600_common_context *rctx = (struct r600_common_context*)ctx;
|
||||
struct r600_transfer *rtransfer = (struct r600_transfer*)transfer;
|
||||
|
@ -1520,8 +1520,6 @@ static void r600_texture_transfer_unmap(struct pipe_context *ctx,
|
|||
|
||||
static const struct u_resource_vtbl r600_texture_vtbl =
|
||||
{
|
||||
r600_texture_transfer_map, /* transfer_map */
|
||||
r600_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
struct pipe_surface *r600_create_surface_custom(struct pipe_context *pipe,
|
||||
|
|
|
@ -569,8 +569,6 @@ static void si_buffer_subdata(struct pipe_context *ctx, struct pipe_resource *bu
|
|||
}
|
||||
|
||||
static const struct u_resource_vtbl si_buffer_vtbl = {
|
||||
si_buffer_transfer_map, /* transfer_map */
|
||||
si_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
static struct si_resource *si_alloc_buffer_struct(struct pipe_screen *screen,
|
||||
|
@ -745,11 +743,9 @@ void si_init_screen_buffer_functions(struct si_screen *sscreen)
|
|||
void si_init_buffer_functions(struct si_context *sctx)
|
||||
{
|
||||
sctx->b.invalidate_resource = si_invalidate_resource;
|
||||
sctx->b.buffer_map = u_transfer_map_vtbl;
|
||||
sctx->b.texture_map = u_transfer_map_vtbl;
|
||||
sctx->b.buffer_map = si_buffer_transfer_map;
|
||||
sctx->b.transfer_flush_region = si_buffer_flush_region;
|
||||
sctx->b.buffer_unmap = u_transfer_unmap_vtbl;
|
||||
sctx->b.texture_unmap = u_transfer_unmap_vtbl;
|
||||
sctx->b.buffer_unmap = si_buffer_transfer_unmap;
|
||||
sctx->b.texture_subdata = u_default_texture_subdata;
|
||||
sctx->b.buffer_subdata = si_buffer_subdata;
|
||||
sctx->b.resource_commit = si_resource_commit;
|
||||
|
|
|
@ -1432,8 +1432,6 @@ si_texture_create_with_modifiers(struct pipe_screen *screen,
|
|||
}
|
||||
|
||||
static const struct u_resource_vtbl si_auxiliary_texture_vtbl = {
|
||||
NULL, /* transfer_map */
|
||||
NULL, /* transfer_unmap */
|
||||
};
|
||||
|
||||
static bool si_texture_is_aux_plane(const struct pipe_resource *resource)
|
||||
|
@ -1742,6 +1740,9 @@ static void *si_texture_transfer_map(struct pipe_context *ctx, struct pipe_resou
|
|||
assert(!(texture->flags & SI_RESOURCE_FLAG_FORCE_LINEAR));
|
||||
assert(box->width && box->height && box->depth);
|
||||
|
||||
if (tex->buffer.b.b.flags & SI_RESOURCE_AUX_PLANE)
|
||||
return NULL;
|
||||
|
||||
if (tex->buffer.flags & RADEON_FLAG_ENCRYPTED)
|
||||
return NULL;
|
||||
|
||||
|
@ -1918,8 +1919,6 @@ static void si_texture_transfer_unmap(struct pipe_context *ctx, struct pipe_tran
|
|||
}
|
||||
|
||||
static const struct u_resource_vtbl si_texture_vtbl = {
|
||||
si_texture_transfer_map, /* transfer_map */
|
||||
si_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
/* Return if it's allowed to reinterpret one format as another with DCC enabled.
|
||||
|
@ -2232,6 +2231,8 @@ void si_init_screen_texture_functions(struct si_screen *sscreen)
|
|||
|
||||
void si_init_context_texture_functions(struct si_context *sctx)
|
||||
{
|
||||
sctx->b.texture_map = si_texture_transfer_map;
|
||||
sctx->b.texture_unmap = si_texture_transfer_unmap;
|
||||
sctx->b.create_surface = si_create_surface;
|
||||
sctx->b.surface_destroy = si_surface_destroy;
|
||||
}
|
||||
|
|
|
@ -120,11 +120,11 @@ svga_can_create_resource(struct pipe_screen *screen,
|
|||
void
|
||||
svga_init_resource_functions(struct svga_context *svga)
|
||||
{
|
||||
svga->pipe.buffer_map = u_transfer_map_vtbl;
|
||||
svga->pipe.texture_map = u_transfer_map_vtbl;
|
||||
svga->pipe.buffer_map = svga_buffer_transfer_map;
|
||||
svga->pipe.texture_map = svga_texture_transfer_map;
|
||||
svga->pipe.transfer_flush_region = svga_buffer_transfer_flush_region;
|
||||
svga->pipe.buffer_unmap = u_transfer_unmap_vtbl;
|
||||
svga->pipe.texture_unmap = u_transfer_unmap_vtbl;
|
||||
svga->pipe.buffer_unmap = svga_buffer_transfer_unmap;
|
||||
svga->pipe.texture_unmap = svga_texture_transfer_unmap;
|
||||
svga->pipe.buffer_subdata = u_default_buffer_subdata;
|
||||
svga->pipe.texture_subdata = u_default_texture_subdata;
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ svga_buffer_needs_hw_storage(const struct svga_screen *ss,
|
|||
* the end result is exactly the same as if one DMA was used for every mapped
|
||||
* range.
|
||||
*/
|
||||
static void *
|
||||
void *
|
||||
svga_buffer_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
|
@ -329,7 +329,7 @@ svga_buffer_transfer_flush_region(struct pipe_context *pipe,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
void
|
||||
svga_buffer_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
|
@ -456,8 +456,6 @@ svga_resource_destroy(struct pipe_screen *screen,
|
|||
|
||||
struct u_resource_vtbl svga_buffer_vtbl =
|
||||
{
|
||||
svga_buffer_transfer_map, /* transfer_map */
|
||||
svga_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -382,4 +382,16 @@ void
|
|||
svga_resource_destroy(struct pipe_screen *screen,
|
||||
struct pipe_resource *buf);
|
||||
|
||||
void *
|
||||
svga_buffer_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
void
|
||||
svga_buffer_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
#endif /* SVGA_BUFFER_H */
|
||||
|
|
|
@ -486,7 +486,7 @@ svga_texture_transfer_map_direct(struct svga_context *svga,
|
|||
/**
|
||||
* Request a transfer map to the texture resource
|
||||
*/
|
||||
static void *
|
||||
void *
|
||||
svga_texture_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *texture,
|
||||
unsigned level,
|
||||
|
@ -789,7 +789,7 @@ svga_texture_transfer_unmap_direct(struct svga_context *svga,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
void
|
||||
svga_texture_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
|
@ -843,8 +843,6 @@ format_has_depth(enum pipe_format format)
|
|||
|
||||
struct u_resource_vtbl svga_texture_vtbl =
|
||||
{
|
||||
svga_texture_transfer_map, /* transfer_map */
|
||||
svga_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -324,4 +324,16 @@ svga_texture_transfer_unmap_upload(struct svga_context *svga,
|
|||
boolean
|
||||
svga_texture_device_format_has_alpha(struct pipe_resource *texture);
|
||||
|
||||
void *
|
||||
svga_texture_transfer_map(struct pipe_context *pipe,
|
||||
struct pipe_resource *texture,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **ptransfer);
|
||||
|
||||
void
|
||||
svga_texture_transfer_unmap(struct pipe_context *pipe,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
#endif /* SVGA_TEXTURE_H */
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
#include "virgl_resource.h"
|
||||
#include "virgl_screen.h"
|
||||
|
||||
static void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
struct virgl_context *vctx = virgl_context(ctx);
|
||||
struct virgl_transfer *trans = virgl_transfer(transfer);
|
||||
|
@ -78,8 +78,6 @@ void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
|
|||
|
||||
static const struct u_resource_vtbl virgl_buffer_vtbl =
|
||||
{
|
||||
virgl_resource_transfer_map, /* transfer_map */
|
||||
virgl_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
void virgl_buffer_init(struct virgl_resource *res)
|
||||
|
|
|
@ -672,11 +672,11 @@ static void virgl_buffer_subdata(struct pipe_context *pipe,
|
|||
|
||||
void virgl_init_context_resource_functions(struct pipe_context *ctx)
|
||||
{
|
||||
ctx->buffer_map = u_transfer_map_vtbl;
|
||||
ctx->texture_map = u_transfer_map_vtbl;
|
||||
ctx->buffer_map = virgl_resource_transfer_map;
|
||||
ctx->texture_map = virgl_texture_transfer_map;
|
||||
ctx->transfer_flush_region = virgl_buffer_transfer_flush_region;
|
||||
ctx->buffer_unmap = u_transfer_unmap_vtbl;
|
||||
ctx->texture_unmap = u_transfer_unmap_vtbl;
|
||||
ctx->buffer_unmap = virgl_buffer_transfer_unmap;
|
||||
ctx->texture_unmap = virgl_texture_transfer_unmap;
|
||||
ctx->buffer_subdata = virgl_buffer_subdata;
|
||||
ctx->texture_subdata = u_default_texture_subdata;
|
||||
}
|
||||
|
|
|
@ -111,6 +111,9 @@ void virgl_buffer_transfer_flush_region(struct pipe_context *ctx,
|
|||
struct pipe_transfer *transfer,
|
||||
const struct pipe_box *box);
|
||||
|
||||
void virgl_buffer_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
void virgl_buffer_init(struct virgl_resource *res);
|
||||
|
||||
static inline unsigned pipe_to_virgl_bind(const struct virgl_screen *vs,
|
||||
|
@ -199,4 +202,14 @@ bool virgl_resource_get_handle(struct pipe_screen *screen,
|
|||
|
||||
void virgl_resource_dirty(struct virgl_resource *res, uint32_t level);
|
||||
|
||||
void *virgl_texture_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **transfer);
|
||||
|
||||
void virgl_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -230,12 +230,12 @@ static bool needs_resolve(struct pipe_screen *screen,
|
|||
return false;
|
||||
}
|
||||
|
||||
static void *virgl_texture_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **transfer)
|
||||
void *virgl_texture_transfer_map(struct pipe_context *ctx,
|
||||
struct pipe_resource *resource,
|
||||
unsigned level,
|
||||
unsigned usage,
|
||||
const struct pipe_box *box,
|
||||
struct pipe_transfer **transfer)
|
||||
{
|
||||
if (needs_resolve(ctx->screen, resource, usage))
|
||||
return texture_transfer_map_resolve(ctx, resource, level, usage, box,
|
||||
|
@ -254,8 +254,8 @@ static void flush_data(struct pipe_context *ctx,
|
|||
trans->base.level);
|
||||
}
|
||||
|
||||
static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
void virgl_texture_transfer_unmap(struct pipe_context *ctx,
|
||||
struct pipe_transfer *transfer)
|
||||
{
|
||||
struct virgl_context *vctx = virgl_context(ctx);
|
||||
struct virgl_transfer *trans = virgl_transfer(transfer);
|
||||
|
@ -304,8 +304,6 @@ static void virgl_texture_transfer_unmap(struct pipe_context *ctx,
|
|||
|
||||
static const struct u_resource_vtbl virgl_texture_vtbl =
|
||||
{
|
||||
virgl_texture_transfer_map, /* transfer_map */
|
||||
virgl_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
||||
void virgl_texture_init(struct virgl_resource *res)
|
||||
|
|
Loading…
Reference in New Issue