ilo: make ilo_render_emit_rectlist() direct
[mesa.git] / src / gallium / drivers / vc4 / vc4_resource.c
index fb46be3916bfc915ee3907d435a452f783e1d6af..a71ae5bab136d1559f8092d1c47547eb2b28c31f 100644 (file)
@@ -73,15 +73,20 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
         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));
@@ -267,11 +272,14 @@ static enum vc4_texture_data_type
 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 *
@@ -404,11 +412,11 @@ render_blit(struct pipe_context *ctx, struct pipe_blit_info *info)
 
         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);