OSDN Git Service

gallium: remove redundant size from the constant buffer
authorZack Rusin <zackr@vmware.com>
Mon, 26 Jan 2009 20:22:53 +0000 (15:22 -0500)
committerZack Rusin <zackr@vmware.com>
Tue, 27 Jan 2009 17:20:26 +0000 (12:20 -0500)
reuse the size of the actual buffer

src/gallium/drivers/i915simple/i915_state.c
src/gallium/drivers/i965simple/brw_curbe.c
src/gallium/drivers/nv10/nv10_state.c
src/gallium/drivers/nv20/nv20_state.c
src/gallium/drivers/nv30/nv30_state.c
src/gallium/drivers/nv40/nv40_state.c
src/gallium/drivers/softpipe/sp_draw_arrays.c
src/gallium/drivers/softpipe/sp_state_fs.c
src/gallium/drivers/trace/tr_state.c
src/gallium/include/pipe/p_state.h
src/mesa/state_tracker/st_atom_constbuf.c

index f46e46e..19f194c 100644 (file)
@@ -535,13 +535,13 @@ static void i915_set_constant_buffer(struct pipe_context *pipe,
     */
    if (buf) {
       void *mapped;
-      if (buf->size &&
+      if (buf->buffer && buf->buffer->size &&
           (mapped = ws->buffer_map(ws, buf->buffer,
                                    PIPE_BUFFER_USAGE_CPU_READ))) {
-         memcpy(i915->current.constants[shader], mapped, buf->size);
+         memcpy(i915->current.constants[shader], mapped, buf->buffer->size);
          ws->buffer_unmap(ws, buf->buffer);
          i915->current.num_user_constants[shader]
-            = buf->size / (4 * sizeof(float));
+            = buf->buffer->size / (4 * sizeof(float));
       }
       else {
          i915->current.num_user_constants[shader] = 0;
index 824ee7f..5e1cce7 100644 (file)
@@ -257,13 +257,13 @@ static void upload_constant_buffer(struct brw_context *brw)
       if (brw->vs.prog_data->num_consts) {
          /* map the vertex constant buffer and copy to curbe: */
          void *data = ws->buffer_map(ws, cbuffer->buffer, 0);
-         /* FIXME: this is wrong. the cbuffer->size currently
+         /* FIXME: this is wrong. the cbuffer->buffer->size currently
           * represents size of consts + immediates. so if we'll
           * have both we'll copy over the end of the buffer
           * with the subsequent memcpy */
-         memcpy(&buf[offset], data, cbuffer->size);
+         memcpy(&buf[offset], data, cbuffer->buffer->size);
          ws->buffer_unmap(ws, cbuffer->buffer);
-         offset += cbuffer->size;
+         offset += cbuffer->buffer->size;
       }
       /*immediates*/
       if (brw->vs.prog_data->num_imm) {
index 622bcdf..119af66 100644 (file)
@@ -467,11 +467,12 @@ nv10_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
 
        if (buf) {
                void *mapped;
-               if (buf->size && (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
+               if (buf->buffer && buf->buffer->size &&
+                    (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
                {
-                       memcpy(nv10->constbuf[shader], mapped, buf->size);
+                       memcpy(nv10->constbuf[shader], mapped, buf->buffer->size);
                        nv10->constbuf_nr[shader] =
-                               buf->size / (4 * sizeof(float));
+                               buf->buffer->size / (4 * sizeof(float));
                        ws->buffer_unmap(ws, buf->buffer);
                }
        }
index e8dc966..ecec4f4 100644 (file)
@@ -460,11 +460,12 @@ nv20_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
 
        if (buf) {
                void *mapped;
-               if (buf->size && (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
+               if (buf->buffer && buf->buffer->size &&
+                    (mapped = ws->buffer_map(ws, buf->buffer, PIPE_BUFFER_USAGE_CPU_READ)))
                {
-                       memcpy(nv20->constbuf[shader], mapped, buf->size);
+                       memcpy(nv20->constbuf[shader], mapped, buf->buffer->size);
                        nv20->constbuf_nr[shader] =
-                               buf->size / (4 * sizeof(float));
+                               buf->buffer->size / (4 * sizeof(float));
                        ws->buffer_unmap(ws, buf->buffer);
                }
        }
index 63f5303..2614756 100644 (file)
@@ -592,7 +592,7 @@ nv30_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
        struct nv30_context *nv30 = nv30_context(pipe);
 
        nv30->constbuf[shader] = buf->buffer;
-       nv30->constbuf_nr[shader] = buf->size / (4 * sizeof(float));
+       nv30->constbuf_nr[shader] = buf->buffer->size / (4 * sizeof(float));
 
        if (shader == PIPE_SHADER_VERTEX) {
                nv30->dirty |= NV30_NEW_VERTPROG;
index d5d81b1..2eff25a 100644 (file)
@@ -607,7 +607,7 @@ nv40_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
        struct nv40_context *nv40 = nv40_context(pipe);
 
        nv40->constbuf[shader] = buf->buffer;
-       nv40->constbuf_nr[shader] = buf->size / (4 * sizeof(float));
+       nv40->constbuf_nr[shader] = buf->buffer->size / (4 * sizeof(float));
 
        if (shader == PIPE_SHADER_VERTEX) {
                nv40->dirty |= NV40_NEW_VERTPROG;
index 424bd56..ed3e8f9 100644 (file)
@@ -49,14 +49,14 @@ softpipe_map_constant_buffers(struct softpipe_context *sp)
    struct pipe_winsys *ws = sp->pipe.winsys;
    uint i;
    for (i = 0; i < PIPE_SHADER_TYPES; i++) {
-      if (sp->constants[i].size)
+      if (sp->constants[i].buffer && sp->constants[i].buffer->size)
          sp->mapped_constants[i] = ws->buffer_map(ws, sp->constants[i].buffer,
                                                   PIPE_BUFFER_USAGE_CPU_READ);
    }
 
    draw_set_mapped_constant_buffer(sp->draw,
                                    sp->mapped_constants[PIPE_SHADER_VERTEX],
-                                   sp->constants[PIPE_SHADER_VERTEX].size);
+                                   sp->constants[PIPE_SHADER_VERTEX].buffer->size);
 }
 
 static void
@@ -73,7 +73,7 @@ softpipe_unmap_constant_buffers(struct softpipe_context *sp)
    draw_set_mapped_constant_buffer(sp->draw, NULL, 0);
 
    for (i = 0; i < 2; i++) {
-      if (sp->constants[i].size)
+      if (sp->constants[i].buffer && sp->constants[i].buffer->size)
          ws->buffer_unmap(ws, sp->constants[i].buffer);
       sp->mapped_constants[i] = NULL;
    }
index e5b609c..1581516 100644 (file)
@@ -155,7 +155,6 @@ softpipe_set_constant_buffer(struct pipe_context *pipe,
    winsys_buffer_reference(ws,
                         &softpipe->constants[shader].buffer,
                         buf ? buf->buffer : NULL);
-   softpipe->constants[shader].size = buf ? buf->size : 0;
 
    softpipe->dirty |= SP_NEW_CONSTANTS;
 }
index 095b054..b23ccc1 100644 (file)
@@ -223,7 +223,6 @@ void trace_dump_constant_buffer(const struct pipe_constant_buffer *state)
    trace_dump_struct_begin("pipe_constant_buffer");
 
    trace_dump_member(ptr, state, buffer);
-   trace_dump_member(uint, state, size);
 
    trace_dump_struct_end();
 }
index 866c8a8..13fa9ba 100644 (file)
@@ -162,7 +162,6 @@ struct pipe_clip_state
 struct pipe_constant_buffer
 {
    struct pipe_buffer *buffer;
-   unsigned size;    /** in bytes (XXX: redundant!) */
 };
 
 
index d02e51c..514b10c 100644 (file)
@@ -92,8 +92,6 @@ void st_upload_constants( struct st_context *st,
          pipe_buffer_unmap(pipe->screen, cbuf->buffer);
       }
 
-      cbuf->size = paramBytes;
-
       st->pipe->set_constant_buffer(st->pipe, id, 0, cbuf);
    }
    else {