u_upload_mgr: pass alignment to u_upload_data manually
authorMarek Olšák <marek.olsak@amd.com>
Sat, 19 Dec 2015 16:15:02 +0000 (17:15 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 2 Jan 2016 14:15:44 +0000 (15:15 +0100)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
19 files changed:
src/gallium/auxiliary/util/u_blitter.c
src/gallium/auxiliary/util/u_upload_mgr.c
src/gallium/auxiliary/util/u_upload_mgr.h
src/gallium/auxiliary/util/u_vbuf.c
src/gallium/drivers/ilo/ilo_gpgpu.c
src/gallium/drivers/ilo/ilo_state.c
src/gallium/drivers/r300/r300_render.c
src/gallium/drivers/r300/r300_screen_buffer.c
src/gallium/drivers/r600/r600_state_common.c
src/gallium/drivers/radeonsi/si_state_draw.c
src/gallium/drivers/vc4/vc4_draw.c
src/gallium/drivers/virgl/virgl_context.c
src/gallium/state_trackers/nine/device9.c
src/gallium/state_trackers/nine/device9.h
src/gallium/state_trackers/nine/nine_ff.c
src/gallium/state_trackers/nine/nine_state.c
src/mesa/state_tracker/st_atom_constbuf.c
src/mesa/state_tracker/st_draw.c
src/mesa/state_tracker/st_extensions.c

index 05b4567130e22c6b29304d5983906e1895d86cb2..a72d77df301694e0c7468b366c2f2110278ca5b2 100644 (file)
@@ -1191,7 +1191,7 @@ static void blitter_draw(struct blitter_context_priv *ctx,
 
    vb.stride = 8 * sizeof(float);
 
-   u_upload_data(ctx->upload, 0, sizeof(ctx->vertices), ctx->vertices,
+   u_upload_data(ctx->upload, 0, sizeof(ctx->vertices), 4, ctx->vertices,
                  &vb.buffer_offset, &vb.buffer);
    if (!vb.buffer)
       return;
@@ -2111,7 +2111,7 @@ void util_blitter_clear_buffer(struct blitter_context *blitter,
       return;
    }
 
-   u_upload_data(ctx->upload, 0, num_channels*4, clear_value,
+   u_upload_data(ctx->upload, 0, num_channels*4, 4, clear_value,
                  &vb.buffer_offset, &vb.buffer);
    if (!vb.buffer)
       goto out;
index 3f790400e4067e3933a890712d241bc4abfe2316..646965c407086d02e036ee4425b27e360268c771 100644 (file)
@@ -243,13 +243,14 @@ u_upload_alloc(struct u_upload_mgr *upload,
 void u_upload_data(struct u_upload_mgr *upload,
                    unsigned min_out_offset,
                    unsigned size,
+                   unsigned alignment,
                    const void *data,
                    unsigned *out_offset,
                    struct pipe_resource **outbuf)
 {
    uint8_t *ptr;
 
-   u_upload_alloc(upload, min_out_offset, size, upload->alignment,
+   u_upload_alloc(upload, min_out_offset, size, alignment,
                   out_offset, outbuf,
                   (void**)&ptr);
    if (ptr)
@@ -282,6 +283,7 @@ void u_upload_buffer(struct u_upload_mgr *upload,
    if (0)
       debug_printf("upload ptr %p ofs %d sz %d\n", map, offset, size);
 
-   u_upload_data(upload, min_out_offset, size, map, out_offset, outbuf);
+   u_upload_data(upload, min_out_offset, size, upload->alignment,
+                 map, out_offset, outbuf);
    pipe_buffer_unmap( upload->pipe, transfer );
 }
index ad7135fc8da13f4fe89e180afea3a5d8656e4759..46624587257253ffa9ba6c8b39776b86b8db37e7 100644 (file)
@@ -97,6 +97,7 @@ void u_upload_alloc(struct u_upload_mgr *upload,
 void u_upload_data(struct u_upload_mgr *upload,
                    unsigned min_out_offset,
                    unsigned size,
+                   unsigned alignment,
                    const void *data,
                    unsigned *out_offset,
                    struct pipe_resource **outbuf);
index dd64e2d7949c4badc6184937b1dc2edf3971f89e..6e2c9aab26f9ab0a0ef96d918bf885984054b281 100644 (file)
@@ -987,7 +987,7 @@ u_vbuf_upload_buffers(struct u_vbuf *mgr,
       real_vb = &mgr->real_vertex_buffer[i];
       ptr = mgr->vertex_buffer[i].user_buffer;
 
-      u_upload_data(mgr->uploader, start, end - start, ptr + start,
+      u_upload_data(mgr->uploader, start, end - start, 4, ptr + start,
                     &real_vb->buffer_offset, &real_vb->buffer);
       if (!real_vb->buffer)
          return PIPE_ERROR_OUT_OF_MEMORY;
index 9a2ca007f8058ca6bdad642008a2bcb48db3a4fe..b7415901a88219a4f2a4935a61b629cac8067968 100644 (file)
@@ -92,7 +92,7 @@ ilo_launch_grid(struct pipe_context *pipe,
    input_buf.buffer_size =
       ilo_shader_get_kernel_param(cs, ILO_KERNEL_CS_INPUT_SIZE);
    if (input_buf.buffer_size) {
-      u_upload_data(ilo->uploader, 0, input_buf.buffer_size, input,
+      u_upload_data(ilo->uploader, 0, input_buf.buffer_size, 16, input,
             &input_buf.buffer_offset, &input_buf.buffer);
    }
 
index d89765a9d23fc516a2993d463c5ab20fb8f57875..0232713f7a2f73e288d71b84282701c77e396432 100644 (file)
@@ -376,7 +376,7 @@ finalize_cbuf_state(struct ilo_context *ilo,
       if (cbuf->cso[i].resource)
          continue;
 
-      u_upload_data(ilo->uploader, 0, cbuf->cso[i].info.size,
+      u_upload_data(ilo->uploader, 0, cbuf->cso[i].info.size, 16,
             cbuf->cso[i].user_buffer, &offset, &cbuf->cso[i].resource);
 
       cbuf->cso[i].info.vma = ilo_resource_get_vma(cbuf->cso[i].resource);
@@ -426,7 +426,7 @@ finalize_index_buffer(struct ilo_context *ilo)
       unsigned hw_offset;
 
       if (vec->ib.state.user_buffer) {
-         u_upload_data(ilo->uploader, 0, size,
+         u_upload_data(ilo->uploader, 0, size, 16,
                vec->ib.state.user_buffer + offset,
                &hw_offset, &vec->ib.hw_resource);
       } else {
index b482fa140edf5602812d52882869ce5df4ef396e..7eda6753d0dc94bf50424072d1c1f38f1dad9108 100644 (file)
@@ -1010,7 +1010,7 @@ static void r300_render_draw_elements(struct vbuf_render* render,
     CS_LOCALS(r300);
     DBG(r300, DBG_DRAW, "r300: render_draw_elements (count: %d)\n", count);
 
-    u_upload_data(r300->uploader, 0, count * 2, indices,
+    u_upload_data(r300->uploader, 0, count * 2, 4, indices,
                   &index_buffer_offset, &index_buffer);
     if (!index_buffer) {
         return;
index 737a6f5e4f8593d39fa17b146cda123ff0c625c4..42c8e3a0fc5393e4640dae1841660318b677bb14 100644 (file)
@@ -42,7 +42,7 @@ void r300_upload_index_buffer(struct r300_context *r300,
     *index_buffer = NULL;
 
     u_upload_data(r300->uploader,
-                  0, count * index_size,
+                  0, count * index_size, 4,
                   ptr + (*start * index_size),
                   &index_offset,
                   index_buffer);
index 3051c9af09cffbea7391a0fe0f8c11de1bcba8d9..c3346f29811c432f9ed8883f783a0706555c486a 100644 (file)
@@ -1106,10 +1106,10 @@ static void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint
                                tmpPtr[i] = util_cpu_to_le32(((uint32_t *)ptr)[i]);
                        }
 
-                       u_upload_data(rctx->b.uploader, 0, size, tmpPtr, &cb->buffer_offset, &cb->buffer);
+                       u_upload_data(rctx->b.uploader, 0, size, 256, tmpPtr, &cb->buffer_offset, &cb->buffer);
                        free(tmpPtr);
                } else {
-                       u_upload_data(rctx->b.uploader, 0, input->buffer_size, ptr, &cb->buffer_offset, &cb->buffer);
+                       u_upload_data(rctx->b.uploader, 0, input->buffer_size, 256, ptr, &cb->buffer_offset, &cb->buffer);
                }
                /* account it in gtt */
                rctx->b.gtt += input->buffer_size;
@@ -1753,7 +1753,7 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info
                if (ib.user_buffer && (R600_BIG_ENDIAN || info.indirect ||
                                                 info.instance_count > 1 ||
                                                 info.count*ib.index_size > 20)) {
-                       u_upload_data(rctx->b.uploader, 0, info.count * ib.index_size,
+                       u_upload_data(rctx->b.uploader, 0, info.count * ib.index_size, 256,
                                      ib.user_buffer, &ib.offset, &ib.buffer);
                        ib.user_buffer = NULL;
                }
index d5540bec71d1b07158f2291573e6f6d814995650..87a5afbbc9731832b4cd48dee6f5d3914c9111a3 100644 (file)
@@ -842,7 +842,7 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
                        start_offset = start * ib.index_size;
 
                        u_upload_data(sctx->b.uploader, start_offset, count * ib.index_size,
-                                     (char*)ib.user_buffer + start_offset,
+                                     256, (char*)ib.user_buffer + start_offset,
                                      &ib.offset, &ib.buffer);
                        if (!ib.buffer)
                                return;
index c00855698b87ad87d66634c2dc759644862306f3..9b0b540d3fc565c3256958820daeedec21d587f0 100644 (file)
@@ -319,7 +319,7 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
                         if (vc4->indexbuf.user_buffer) {
                                 prsc = NULL;
                                 u_upload_data(vc4->uploader, 0,
-                                              info->count * index_size,
+                                              info->count * index_size, 4,
                                               vc4->indexbuf.user_buffer,
                                               &offset, &prsc);
                         } else {
index 527f7637cb63e7b7e668f385a9add6af774a41f9..58fe95736d12e921284fdf29e6581ad80716556c 100644 (file)
@@ -605,7 +605,7 @@ static void virgl_draw_vbo(struct pipe_context *ctx,
            ib.offset = vctx->index_buffer.offset + info.start * ib.index_size;
 
            if (ib.user_buffer) {
-                   u_upload_data(vctx->uploader, 0, info.count * ib.index_size,
+                   u_upload_data(vctx->uploader, 0, info.count * ib.index_size, 256,
                                  ib.user_buffer, &ib.offset, &ib.buffer);
                    ib.user_buffer = NULL;
            }
index f14ffea13e13709026c07599274ab132ff70f89d..4e2a03b0eee7bf61675df017378300566046f4eb 100644 (file)
@@ -397,10 +397,9 @@ NineDevice9_ctor( struct NineDevice9 *This,
     if (!This->driver_caps.user_ibufs)
         This->index_uploader = u_upload_create(This->pipe, 128 * 1024, 4, PIPE_BIND_INDEX_BUFFER);
     if (!This->driver_caps.user_cbufs) {
-        unsigned alignment = GET_PCAP(CONSTANT_BUFFER_OFFSET_ALIGNMENT);
-
+        This->constbuf_alignment = GET_PCAP(CONSTANT_BUFFER_OFFSET_ALIGNMENT);
         This->constbuf_uploader = u_upload_create(This->pipe, This->vs_const_size,
-                                                  alignment, PIPE_BIND_CONSTANT_BUFFER);
+                                                  This->constbuf_alignment, PIPE_BIND_CONSTANT_BUFFER);
     }
 
     This->driver_caps.window_space_position_support = GET_PCAP(TGSI_VS_WINDOW_SPACE_POSITION);
@@ -2955,6 +2954,7 @@ NineDevice9_DrawPrimitiveUP( struct NineDevice9 *This,
         u_upload_data(This->vertex_uploader,
                       0,
                       (info.max_index + 1) * VertexStreamZeroStride, /* XXX */
+                      4,
                       vtxbuf.user_buffer,
                       &vtxbuf.buffer_offset,
                       &vtxbuf.buffer);
@@ -3027,6 +3027,7 @@ NineDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This,
                       base,
                       (info.max_index -
                        info.min_index + 1) * VertexStreamZeroStride, /* XXX */
+                      4,
                       (const uint8_t *)vbuf.user_buffer + base,
                       &vbuf.buffer_offset,
                       &vbuf.buffer);
@@ -3039,6 +3040,7 @@ NineDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This,
         u_upload_data(This->index_uploader,
                       0,
                       info.count * ibuf.index_size,
+                      4,
                       ibuf.user_buffer,
                       &ibuf.offset,
                       &ibuf.buffer);
index 98d9c4df06a795fea9cb7f947ba29153950a1f49..cbc1e61f5db662197b118ee1659fb7f67df7890c 100644 (file)
@@ -128,6 +128,7 @@ struct NineDevice9
     struct u_upload_mgr *vertex_uploader;
     struct u_upload_mgr *index_uploader;
     struct u_upload_mgr *constbuf_uploader;
+    unsigned constbuf_alignment;
 
     struct nine_range_pool range_pool;
 
index fe8933be69a85503d60eda8bc01facd372219101..fe26086ef3d3131229bd79b1f75353ceff9db273 100644 (file)
@@ -1866,6 +1866,7 @@ nine_ff_update(struct NineDevice9 *device)
             u_upload_data(device->constbuf_uploader,
                           0,
                           cb.buffer_size,
+                          device->constbuf_alignment,
                           cb.user_buffer,
                           &cb.buffer_offset,
                           &cb.buffer);
@@ -1888,6 +1889,7 @@ nine_ff_update(struct NineDevice9 *device)
             u_upload_data(device->constbuf_uploader,
                           0,
                           cb.buffer_size,
+                          device->constbuf_alignment,
                           cb.user_buffer,
                           &cb.buffer_offset,
                           &cb.buffer);
index 558d07a2bd0daddbd10be02381aa2f9397ab61b1..aee316220884405323d057093093e4cd98ddde3b 100644 (file)
@@ -260,6 +260,7 @@ prepare_vs_constants_userbuf(struct NineDevice9 *device)
         u_upload_data(device->constbuf_uploader,
                       0,
                       cb.buffer_size,
+                      device->constbuf_alignment,
                       cb.user_buffer,
                       &cb.buffer_offset,
                       &cb.buffer);
@@ -336,6 +337,7 @@ prepare_ps_constants_userbuf(struct NineDevice9 *device)
         u_upload_data(device->constbuf_uploader,
                       0,
                       cb.buffer_size,
+                      device->constbuf_alignment,
                       cb.user_buffer,
                       &cb.buffer_offset,
                       &cb.buffer);
index 20f8b3df99d00e38ccd2c5f29a4baffa386f4dc5..66811d29c290172ef40160ffbcfc2ab751ac8183 100644 (file)
@@ -84,6 +84,7 @@ void st_upload_constants( struct st_context *st,
          cb.buffer = NULL;
          cb.user_buffer = NULL;
          u_upload_data(st->constbuf_uploader, 0, paramBytes,
+                       st->ctx->Const.UniformBufferOffsetAlignment,
                        params->ParameterValues, &cb.buffer_offset, &cb.buffer);
          u_upload_unmap(st->constbuf_uploader);
       } else {
index 635a0126834d47f958c2adf77ed5a01014d12d20..63b46222e6be62fac557923fe111385d4e79b1eb 100644 (file)
@@ -107,7 +107,7 @@ setup_index_buffer(struct st_context *st,
    else if (st->indexbuf_uploader) {
       /* upload indexes from user memory into a real buffer */
       u_upload_data(st->indexbuf_uploader, 0,
-                    ib->count * ibuffer->index_size, ib->ptr,
+                    ib->count * ibuffer->index_size, 4, ib->ptr,
                     &ibuffer->offset, &ibuffer->buffer);
       if (!ibuffer->buffer) {
          /* out of memory */
index 90eb67711f3f771fc65bcfcc1256433e91be3c80..9b01bdc129e8184bbb0d4bccbc8929d09bc506ed 100644 (file)
@@ -314,10 +314,11 @@ void st_init_limits(struct pipe_screen *screen,
    c->GLSLSkipStrictMaxUniformLimitCheck =
       screen->get_param(screen, PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS);
 
+   c->UniformBufferOffsetAlignment =
+      screen->get_param(screen, PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT);
+
    if (can_ubo) {
       extensions->ARB_uniform_buffer_object = GL_TRUE;
-      c->UniformBufferOffsetAlignment =
-         screen->get_param(screen, PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT);
       c->MaxCombinedUniformBlocks = c->MaxUniformBufferBindings =
          c->Program[MESA_SHADER_VERTEX].MaxUniformBlocks +
          c->Program[MESA_SHADER_TESS_CTRL].MaxUniformBlocks +