本文整理汇总了C++中pipe_transfer_unmap函数的典型用法代码示例。如果您正苦于以下问题:C++ pipe_transfer_unmap函数的具体用法?C++ pipe_transfer_unmap怎么用?C++ pipe_transfer_unmap使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pipe_transfer_unmap函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: upload_unmap_internal
static void
upload_unmap_internal(struct u_upload_mgr *upload, boolean destroying)
{
if (!upload->transfer)
return;
if (upload->map_flags & PIPE_TRANSFER_FLUSH_EXPLICIT) {
struct pipe_box *box = &upload->transfer->box;
unsigned flush_offset = box->x + upload->flushed_size;
if (upload->offset > flush_offset) {
pipe_buffer_flush_mapped_range(upload->pipe, upload->transfer,
flush_offset,
upload->offset - flush_offset);
upload->flushed_size = upload->offset;
}
}
if (destroying || !upload->map_persistent) {
pipe_transfer_unmap(upload->pipe, upload->transfer);
upload->transfer = NULL;
upload->map = NULL;
upload->flushed_size = 0;
}
}
示例2: set_random_pixels
static void set_random_pixels(struct pipe_context *ctx,
struct pipe_resource *tex,
struct cpu_texture *cpu)
{
struct pipe_transfer *t;
uint8_t *map;
int x,y,z;
map = pipe_transfer_map_3d(ctx, tex, 0, PIPE_TRANSFER_WRITE,
0, 0, 0, tex->width0, tex->height0,
tex->array_size, &t);
assert(map);
for (z = 0; z < tex->array_size; z++) {
for (y = 0; y < tex->height0; y++) {
uint64_t *ptr = (uint64_t*)
(map + t->layer_stride*z + t->stride*y);
uint64_t *ptr_cpu = (uint64_t*)
(cpu->ptr + cpu->layer_stride*z + cpu->stride*y);
unsigned size = cpu->stride / RAND_NUM_SIZE;
assert(t->stride % RAND_NUM_SIZE == 0);
assert(cpu->stride % RAND_NUM_SIZE == 0);
for (x = 0; x < size; x++) {
*ptr++ = *ptr_cpu++ =
rand_xorshift128plus(seed_xorshift128plus);
}
}
}
pipe_transfer_unmap(ctx, t);
}
示例3: compare_textures
static bool compare_textures(struct pipe_context *ctx,
struct pipe_resource *tex,
struct cpu_texture *cpu, int bpp)
{
struct pipe_transfer *t;
uint8_t *map;
int y,z;
bool pass = true;
map = pipe_transfer_map_3d(ctx, tex, 0, PIPE_TRANSFER_READ,
0, 0, 0, tex->width0, tex->height0,
tex->array_size, &t);
assert(map);
for (z = 0; z < tex->array_size; z++) {
for (y = 0; y < tex->height0; y++) {
uint8_t *ptr = map + t->layer_stride*z + t->stride*y;
uint8_t *cpu_ptr = cpu->ptr +
cpu->layer_stride*z + cpu->stride*y;
if (memcmp(ptr, cpu_ptr, tex->width0 * bpp)) {
pass = false;
goto done;
}
}
}
done:
pipe_transfer_unmap(ctx, t);
return pass;
}
示例4: u_default_buffer_subdata
void u_default_buffer_subdata(struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned usage, unsigned offset,
unsigned size, const void *data)
{
struct pipe_transfer *transfer = NULL;
struct pipe_box box;
uint8_t *map = NULL;
assert(!(usage & PIPE_TRANSFER_READ));
/* the write flag is implicit by the nature of buffer_subdata */
usage |= PIPE_TRANSFER_WRITE;
/* buffer_subdata implicitly discards the rewritten buffer range */
if (offset == 0 && size == resource->width0) {
usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
} else {
usage |= PIPE_TRANSFER_DISCARD_RANGE;
}
u_box_1d(offset, size, &box);
map = pipe->transfer_map(pipe, resource, 0, usage, &box, &transfer);
if (!map)
return;
memcpy(map, data, size);
pipe_transfer_unmap(pipe, transfer);
}
示例5: st_destroy_bitmap
/** Per-context tear-down */
void
st_destroy_bitmap(struct st_context *st)
{
struct pipe_context *pipe = st->pipe;
struct bitmap_cache *cache = st->bitmap.cache;
if (st->bitmap.vs) {
cso_delete_vertex_shader(st->cso_context, st->bitmap.vs);
st->bitmap.vs = NULL;
}
if (st->bitmap.vbuf) {
pipe_resource_reference(&st->bitmap.vbuf, NULL);
st->bitmap.vbuf = NULL;
}
if (cache) {
if (cache->trans) {
pipe_transfer_unmap(pipe, cache->trans);
pipe->transfer_destroy(pipe, cache->trans);
}
pipe_resource_reference(&st->bitmap.cache->texture, NULL);
free(st->bitmap.cache);
st->bitmap.cache = NULL;
}
}
示例6: u_default_transfer_inline_write
/* One-shot transfer operation with data supplied in a user
* pointer. XXX: strides??
*/
void u_default_transfer_inline_write( struct pipe_context *pipe,
struct pipe_resource *resource,
unsigned level,
unsigned usage,
const struct pipe_box *box,
const void *data,
unsigned stride,
unsigned layer_stride)
{
struct pipe_transfer *transfer = NULL;
uint8_t *map = NULL;
assert(!(usage & PIPE_TRANSFER_READ));
/* the write flag is implicit by the nature of transfer_inline_write */
usage |= PIPE_TRANSFER_WRITE;
/* transfer_inline_write implicitly discards the rewritten buffer range */
if (box->x == 0 && box->width == resource->width0) {
usage |= PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE;
} else {
usage |= PIPE_TRANSFER_DISCARD_RANGE;
}
map = pipe->transfer_map(pipe,
resource,
level,
usage,
box, &transfer);
if (map == NULL)
return;
if (resource->target == PIPE_BUFFER) {
assert(box->height == 1);
assert(box->depth == 1);
memcpy(map, data, box->width);
}
else {
const uint8_t *src_data = data;
unsigned i;
for (i = 0; i < box->depth; i++) {
util_copy_rect(map,
resource->format,
transfer->stride, /* bytes */
0, 0,
box->width,
box->height,
src_data,
stride, /* bytes */
0, 0);
map += transfer->layer_stride;
src_data += layer_stride;
}
}
pipe_transfer_unmap(pipe, transfer);
}
示例7: st_texture_image_unmap
void
st_texture_image_unmap(struct st_context *st,
struct st_texture_image *stImage)
{
struct pipe_context *pipe = st->pipe;
DBG("%s\n", __FUNCTION__);
pipe_transfer_unmap(pipe, stImage->transfer);
stImage->transfer = NULL;
}
示例8: st_flush_bitmap_cache
/**
* If there's anything in the bitmap cache, draw/flush it now.
*/
void
st_flush_bitmap_cache(struct st_context *st)
{
if (!st->bitmap.cache->empty) {
struct bitmap_cache *cache = st->bitmap.cache;
if (st->ctx->DrawBuffer) {
struct pipe_context *pipe = st->pipe;
struct pipe_sampler_view *sv;
assert(cache->xmin <= cache->xmax);
/* printf("flush size %d x %d at %d, %d\n",
cache->xmax - cache->xmin,
cache->ymax - cache->ymin,
cache->xpos, cache->ypos);
*/
/* The texture transfer has been mapped until now.
* So unmap and release the texture transfer before drawing.
*/
if (cache->trans) {
if (0)
print_cache(cache);
pipe_transfer_unmap(pipe, cache->trans);
cache->buffer = NULL;
pipe->transfer_destroy(pipe, cache->trans);
cache->trans = NULL;
}
sv = st_create_texture_sampler_view(st->pipe, cache->texture);
if (sv) {
draw_bitmap_quad(st->ctx,
cache->xpos,
cache->ypos,
cache->zpos,
BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT,
sv,
cache->color);
pipe_sampler_view_reference(&sv, NULL);
}
}
/* release/free the texture */
pipe_resource_reference(&cache->texture, NULL);
reset_cache(st);
}
}
示例9: util_probe_rect_rgba_multi
/**
* Probe and test if the rectangle contains the expected color.
*
* If "num_expected_colors" > 1, at least one expected color must match
* the probed color. "expected" should be an array of 4*num_expected_colors
* floats.
*/
static bool
util_probe_rect_rgba_multi(struct pipe_context *ctx, struct pipe_resource *tex,
unsigned offx, unsigned offy, unsigned w,
unsigned h,
const float *expected,
unsigned num_expected_colors)
{
struct pipe_transfer *transfer;
void *map;
float *pixels = malloc(w * h * 4 * sizeof(float));
int x,y,e,c;
bool pass = true;
map = pipe_transfer_map(ctx, tex, 0, 0, PIPE_TRANSFER_READ,
offx, offy, w, h, &transfer);
pipe_get_tile_rgba(transfer, map, 0, 0, w, h, pixels);
pipe_transfer_unmap(ctx, transfer);
for (e = 0; e < num_expected_colors; e++) {
for (y = 0; y < h; y++) {
for (x = 0; x < w; x++) {
float *probe = &pixels[(y*w + x)*4];
for (c = 0; c < 4; c++) {
if (fabs(probe[c] - expected[e*4+c]) >= TOLERANCE) {
if (e < num_expected_colors-1)
goto next_color; /* test the next expected color */
printf("Probe color at (%i,%i), ", offx+x, offy+y);
printf("Expected: %.3f, %.3f, %.3f, %.3f, ",
expected[e*4], expected[e*4+1],
expected[e*4+2], expected[e*4+3]);
printf("Got: %.3f, %.3f, %.3f, %.3f\n",
probe[0], probe[1], probe[2], probe[2]);
pass = false;
goto done;
}
}
}
}
break; /* this color was successful */
next_color:;
}
done:
free(pixels);
return pass;
}
示例10: vid_dec_FillOutput
static void vid_dec_FillOutput(vid_dec_PrivateType *priv, struct pipe_video_buffer *buf,
OMX_BUFFERHEADERTYPE* output)
{
omx_base_PortType *port = priv->ports[OMX_BASE_FILTER_OUTPUTPORT_INDEX];
OMX_VIDEO_PORTDEFINITIONTYPE *def = &port->sPortParam.format.video;
struct pipe_sampler_view **views;
struct pipe_transfer *transfer;
struct pipe_box box = { };
uint8_t *src, *dst;
views = buf->get_sampler_view_planes(buf);
dst = output->pBuffer;
box.width = def->nFrameWidth;
box.height = def->nFrameHeight;
box.depth = 1;
src = priv->pipe->transfer_map(priv->pipe, views[0]->texture, 0,
PIPE_TRANSFER_READ, &box, &transfer);
util_copy_rect(dst, views[0]->texture->format, def->nStride, 0, 0,
box.width, box.height, src, transfer->stride, 0, 0);
pipe_transfer_unmap(priv->pipe, transfer);
dst = ((uint8_t*)output->pBuffer) + (def->nStride * box.height);
box.width = def->nFrameWidth / 2;
box.height = def->nFrameHeight / 2;
src = priv->pipe->transfer_map(priv->pipe, views[1]->texture, 0,
PIPE_TRANSFER_READ, &box, &transfer);
util_copy_rect(dst, views[1]->texture->format, def->nStride, 0, 0,
box.width, box.height, src, transfer->stride, 0, 0);
pipe_transfer_unmap(priv->pipe, transfer);
}
示例11: u_upload_unmap
void u_upload_unmap( struct u_upload_mgr *upload )
{
if (upload->transfer) {
struct pipe_box *box = &upload->transfer->box;
if (upload->offset > box->x) {
pipe_buffer_flush_mapped_range(upload->pipe, upload->transfer,
box->x, upload->offset - box->x);
}
pipe_transfer_unmap(upload->pipe, upload->transfer);
pipe_transfer_destroy(upload->pipe, upload->transfer);
upload->transfer = NULL;
upload->map = NULL;
}
}
示例12: NineVolume9_UnlockBox
HRESULT NINE_WINAPI
NineVolume9_UnlockBox( struct NineVolume9 *This )
{
DBG("This=%p lock_count=%u\n", This, This->lock_count);
user_assert(This->lock_count, D3DERR_INVALIDCALL);
if (This->transfer) {
This->pipe->transfer_unmap(This->pipe, This->transfer);
This->transfer = NULL;
}
--This->lock_count;
if (This->data_conversion) {
struct pipe_transfer *transfer;
uint8_t *dst = This->data;
struct pipe_box box;
u_box_3d(0, 0, 0, This->desc.Width, This->desc.Height, This->desc.Depth,
&box);
if (!dst) {
dst = This->pipe->transfer_map(This->pipe,
This->resource,
This->level,
PIPE_TRANSFER_WRITE |
PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE,
&box, &transfer);
if (!dst)
return D3D_OK;
}
(void) util_format_translate_3d(This->info.format,
dst, This->data ? This->stride : transfer->stride,
This->data ? This->layer_stride : transfer->layer_stride,
0, 0, 0,
This->format_conversion,
This->data_conversion,
This->stride_conversion,
This->layer_stride_conversion,
0, 0, 0,
This->desc.Width, This->desc.Height,
This->desc.Height);
if (!This->data)
pipe_transfer_unmap(This->pipe, transfer);
}
return D3D_OK;
}
示例13: st_UnmapRenderbuffer
/**
* Called via ctx->Driver.UnmapRenderbuffer.
*/
static void
st_UnmapRenderbuffer(struct gl_context *ctx,
struct gl_renderbuffer *rb)
{
struct st_context *st = st_context(ctx);
struct st_renderbuffer *strb = st_renderbuffer(rb);
struct pipe_context *pipe = st->pipe;
if (strb->software) {
/* software-allocated renderbuffer (probably an accum buffer) */
return;
}
pipe_transfer_unmap(pipe, strb->transfer);
strb->transfer = NULL;
}
示例14: make_bitmap_texture
/**
* Create a texture which represents a bitmap image.
*/
static struct pipe_resource *
make_bitmap_texture(struct gl_context *ctx, GLsizei width, GLsizei height,
const struct gl_pixelstore_attrib *unpack,
const GLubyte *bitmap)
{
struct st_context *st = st_context(ctx);
struct pipe_context *pipe = st->pipe;
struct pipe_transfer *transfer;
ubyte *dest;
struct pipe_resource *pt;
/* PBO source... */
bitmap = _mesa_map_pbo_source(ctx, unpack, bitmap);
if (!bitmap) {
return NULL;
}
/**
* Create texture to hold bitmap pattern.
*/
pt = st_texture_create(st, st->internal_target, st->bitmap.tex_format,
0, width, height, 1, 1,
PIPE_BIND_SAMPLER_VIEW);
if (!pt) {
_mesa_unmap_pbo_source(ctx, unpack);
return NULL;
}
transfer = pipe_get_transfer(st->pipe, pt, 0, 0,
PIPE_TRANSFER_WRITE,
0, 0, width, height);
dest = pipe_transfer_map(pipe, transfer);
/* Put image into texture transfer */
memset(dest, 0xff, height * transfer->stride);
unpack_bitmap(st, 0, 0, width, height, unpack, bitmap,
dest, transfer->stride);
_mesa_unmap_pbo_source(ctx, unpack);
/* Release transfer */
pipe_transfer_unmap(pipe, transfer);
pipe->transfer_destroy(pipe, transfer);
return pt;
}
示例15: pipe_unmap
static void pipe_unmap(struct gralloc_drm_drv_t *drv,
struct gralloc_drm_bo_t *bo)
{
struct pipe_manager *pm = (struct pipe_manager *) drv;
struct pipe_buffer *buf = (struct pipe_buffer *) bo;
pthread_mutex_lock(&pm->mutex);
assert(buf && buf->transfer);
pipe_transfer_unmap(pm->context, buf->transfer);
pipe_transfer_destroy(pm->context, buf->transfer);
buf->transfer = NULL;
pm->context->flush(pm->context, NULL);
pthread_mutex_unlock(&pm->mutex);
}