u_upload_mgr: pass alignment to u_upload_alloc manually
[mesa.git] / src / gallium / drivers / freedreno / a3xx / fd3_emit.c
index 25ea3e7a7b72a4ca7bca1bd10952f9f57947c3f9..e65a352e7f60d597fd2ba94d1b11d53feaaa339b 100644 (file)
@@ -145,7 +145,8 @@ emit_textures(struct fd_context *ctx, struct fd_ringbuffer *ring,
        void *ptr;
 
        u_upload_alloc(fd3_ctx->border_color_uploader,
-                       0, 2 * PIPE_MAX_SAMPLERS * BORDERCOLOR_SIZE, &off,
+                       0, BORDER_COLOR_UPLOAD_SIZE,
+                      BORDER_COLOR_UPLOAD_SIZE, &off,
                        &fd3_ctx->border_color_buf,
                        &ptr);
 
@@ -209,13 +210,19 @@ emit_textures(struct fd_context *ctx, struct fd_ringbuffer *ring,
                                        fd3_pipe_sampler_view(tex->textures[i]) :
                                        &dummy_view;
                        struct fd_resource *rsc = fd_resource(view->base.texture);
-                       unsigned start = fd_sampler_first_level(&view->base);
-                       unsigned end   = fd_sampler_last_level(&view->base);;
+                       if (rsc && rsc->base.b.target == PIPE_BUFFER) {
+                               OUT_RELOC(ring, rsc->bo, view->base.u.buf.first_element *
+                                                 util_format_get_blocksize(view->base.format), 0, 0);
+                               j = 1;
+                       } else {
+                               unsigned start = fd_sampler_first_level(&view->base);
+                               unsigned end   = fd_sampler_last_level(&view->base);;
 
-                       for (j = 0; j < (end - start + 1); j++) {
-                               struct fd_resource_slice *slice =
+                               for (j = 0; j < (end - start + 1); j++) {
+                                       struct fd_resource_slice *slice =
                                                fd_resource_slice(rsc, j + start);
-                               OUT_RELOC(ring, rsc->bo, slice->offset, 0, 0);
+                                       OUT_RELOC(ring, rsc->bo, slice->offset, 0, 0);
+                               }
                        }
 
                        /* pad the remaining entries w/ null: */