enum pipe_format format = prsc->format;
char *buf;
- vc4_flush_for_bo(pctx, rsc->bo);
+ if (usage & PIPE_TRANSFER_DISCARD_WHOLE_RESOURCE) {
+ uint32_t size = rsc->bo->size;
+ vc4_bo_unreference(&rsc->bo);
+ rsc->bo = vc4_bo_alloc(vc4->screen, size, "resource");
+ }
+
+ if (!(usage & PIPE_TRANSFER_UNSYNCHRONIZED))
+ vc4_flush_for_bo(pctx, rsc->bo);
trans = util_slab_alloc(&vc4->transfer_pool);
if (!trans)
return NULL;
- /* XXX: Handle DISCARD_WHOLE_RESOURCE, DONTBLOCK, UNSYNCHRONIZED,
- * DISCARD_WHOLE_RESOURCE, PERSISTENT, COHERENT.
- */
+ /* XXX: Handle DONTBLOCK, DISCARD_RANGE, PERSISTENT, COHERENT. */
/* util_slab_alloc() doesn't zero: */
memset(trans, 0, sizeof(*trans));
get_resource_texture_format(struct pipe_resource *prsc)
{
struct vc4_resource *rsc = vc4_resource(prsc);
+ uint8_t format = vc4_get_tex_format(prsc->format);
- if (rsc->tiled)
- return VC4_TEXTURE_TYPE_RGBA8888;
- else
+ if (!rsc->tiled) {
+ assert(format == VC4_TEXTURE_TYPE_RGBA8888);
return VC4_TEXTURE_TYPE_RGBA32R;
+ }
+
+ return format;
}
static struct pipe_resource *
util_blitter_save_vertex_buffer_slot(vc4->blitter, vc4->vertexbuf.vb);
util_blitter_save_vertex_elements(vc4->blitter, vc4->vtx);
- util_blitter_save_vertex_shader(vc4->blitter, vc4->prog.vs);
+ util_blitter_save_vertex_shader(vc4->blitter, vc4->prog.bind_vs);
util_blitter_save_rasterizer(vc4->blitter, vc4->rasterizer);
util_blitter_save_viewport(vc4->blitter, &vc4->viewport);
util_blitter_save_scissor(vc4->blitter, &vc4->scissor);
- util_blitter_save_fragment_shader(vc4->blitter, vc4->prog.fs);
+ util_blitter_save_fragment_shader(vc4->blitter, vc4->prog.bind_fs);
util_blitter_save_blend(vc4->blitter, vc4->blend);
util_blitter_save_depth_stencil_alpha(vc4->blitter, vc4->zsa);
util_blitter_save_stencil_ref(vc4->blitter, &vc4->stencil_ref);