gallium: remove redundant size from the constant buffer
reuse the size of the actual buffer
This commit is contained in:
@@ -535,13 +535,13 @@ static void i915_set_constant_buffer(struct pipe_context *pipe,
|
|||||||
*/
|
*/
|
||||||
if (buf) {
|
if (buf) {
|
||||||
void *mapped;
|
void *mapped;
|
||||||
if (buf->size &&
|
if (buf->buffer && buf->buffer->size &&
|
||||||
(mapped = ws->buffer_map(ws, buf->buffer,
|
(mapped = ws->buffer_map(ws, buf->buffer,
|
||||||
PIPE_BUFFER_USAGE_CPU_READ))) {
|
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);
|
ws->buffer_unmap(ws, buf->buffer);
|
||||||
i915->current.num_user_constants[shader]
|
i915->current.num_user_constants[shader]
|
||||||
= buf->size / (4 * sizeof(float));
|
= buf->buffer->size / (4 * sizeof(float));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
i915->current.num_user_constants[shader] = 0;
|
i915->current.num_user_constants[shader] = 0;
|
||||||
|
@@ -257,13 +257,13 @@ static void upload_constant_buffer(struct brw_context *brw)
|
|||||||
if (brw->vs.prog_data->num_consts) {
|
if (brw->vs.prog_data->num_consts) {
|
||||||
/* map the vertex constant buffer and copy to curbe: */
|
/* map the vertex constant buffer and copy to curbe: */
|
||||||
void *data = ws->buffer_map(ws, cbuffer->buffer, 0);
|
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
|
* represents size of consts + immediates. so if we'll
|
||||||
* have both we'll copy over the end of the buffer
|
* have both we'll copy over the end of the buffer
|
||||||
* with the subsequent memcpy */
|
* with the subsequent memcpy */
|
||||||
memcpy(&buf[offset], data, cbuffer->size);
|
memcpy(&buf[offset], data, cbuffer->buffer->size);
|
||||||
ws->buffer_unmap(ws, cbuffer->buffer);
|
ws->buffer_unmap(ws, cbuffer->buffer);
|
||||||
offset += cbuffer->size;
|
offset += cbuffer->buffer->size;
|
||||||
}
|
}
|
||||||
/*immediates*/
|
/*immediates*/
|
||||||
if (brw->vs.prog_data->num_imm) {
|
if (brw->vs.prog_data->num_imm) {
|
||||||
|
@@ -467,11 +467,12 @@ nv10_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
|||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
void *mapped;
|
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] =
|
nv10->constbuf_nr[shader] =
|
||||||
buf->size / (4 * sizeof(float));
|
buf->buffer->size / (4 * sizeof(float));
|
||||||
ws->buffer_unmap(ws, buf->buffer);
|
ws->buffer_unmap(ws, buf->buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -460,11 +460,12 @@ nv20_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
|||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
void *mapped;
|
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] =
|
nv20->constbuf_nr[shader] =
|
||||||
buf->size / (4 * sizeof(float));
|
buf->buffer->size / (4 * sizeof(float));
|
||||||
ws->buffer_unmap(ws, buf->buffer);
|
ws->buffer_unmap(ws, buf->buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -592,7 +592,7 @@ nv30_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
|||||||
struct nv30_context *nv30 = nv30_context(pipe);
|
struct nv30_context *nv30 = nv30_context(pipe);
|
||||||
|
|
||||||
nv30->constbuf[shader] = buf->buffer;
|
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) {
|
if (shader == PIPE_SHADER_VERTEX) {
|
||||||
nv30->dirty |= NV30_NEW_VERTPROG;
|
nv30->dirty |= NV30_NEW_VERTPROG;
|
||||||
|
@@ -607,7 +607,7 @@ nv40_set_constant_buffer(struct pipe_context *pipe, uint shader, uint index,
|
|||||||
struct nv40_context *nv40 = nv40_context(pipe);
|
struct nv40_context *nv40 = nv40_context(pipe);
|
||||||
|
|
||||||
nv40->constbuf[shader] = buf->buffer;
|
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) {
|
if (shader == PIPE_SHADER_VERTEX) {
|
||||||
nv40->dirty |= NV40_NEW_VERTPROG;
|
nv40->dirty |= NV40_NEW_VERTPROG;
|
||||||
|
@@ -49,14 +49,14 @@ softpipe_map_constant_buffers(struct softpipe_context *sp)
|
|||||||
struct pipe_winsys *ws = sp->pipe.winsys;
|
struct pipe_winsys *ws = sp->pipe.winsys;
|
||||||
uint i;
|
uint i;
|
||||||
for (i = 0; i < PIPE_SHADER_TYPES; 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,
|
sp->mapped_constants[i] = ws->buffer_map(ws, sp->constants[i].buffer,
|
||||||
PIPE_BUFFER_USAGE_CPU_READ);
|
PIPE_BUFFER_USAGE_CPU_READ);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_set_mapped_constant_buffer(sp->draw,
|
draw_set_mapped_constant_buffer(sp->draw,
|
||||||
sp->mapped_constants[PIPE_SHADER_VERTEX],
|
sp->mapped_constants[PIPE_SHADER_VERTEX],
|
||||||
sp->constants[PIPE_SHADER_VERTEX].size);
|
sp->constants[PIPE_SHADER_VERTEX].buffer->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -73,7 +73,7 @@ softpipe_unmap_constant_buffers(struct softpipe_context *sp)
|
|||||||
draw_set_mapped_constant_buffer(sp->draw, NULL, 0);
|
draw_set_mapped_constant_buffer(sp->draw, NULL, 0);
|
||||||
|
|
||||||
for (i = 0; i < 2; i++) {
|
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);
|
ws->buffer_unmap(ws, sp->constants[i].buffer);
|
||||||
sp->mapped_constants[i] = NULL;
|
sp->mapped_constants[i] = NULL;
|
||||||
}
|
}
|
||||||
|
@@ -155,7 +155,6 @@ softpipe_set_constant_buffer(struct pipe_context *pipe,
|
|||||||
winsys_buffer_reference(ws,
|
winsys_buffer_reference(ws,
|
||||||
&softpipe->constants[shader].buffer,
|
&softpipe->constants[shader].buffer,
|
||||||
buf ? buf->buffer : NULL);
|
buf ? buf->buffer : NULL);
|
||||||
softpipe->constants[shader].size = buf ? buf->size : 0;
|
|
||||||
|
|
||||||
softpipe->dirty |= SP_NEW_CONSTANTS;
|
softpipe->dirty |= SP_NEW_CONSTANTS;
|
||||||
}
|
}
|
||||||
|
@@ -223,7 +223,6 @@ void trace_dump_constant_buffer(const struct pipe_constant_buffer *state)
|
|||||||
trace_dump_struct_begin("pipe_constant_buffer");
|
trace_dump_struct_begin("pipe_constant_buffer");
|
||||||
|
|
||||||
trace_dump_member(ptr, state, buffer);
|
trace_dump_member(ptr, state, buffer);
|
||||||
trace_dump_member(uint, state, size);
|
|
||||||
|
|
||||||
trace_dump_struct_end();
|
trace_dump_struct_end();
|
||||||
}
|
}
|
||||||
|
@@ -162,7 +162,6 @@ struct pipe_clip_state
|
|||||||
struct pipe_constant_buffer
|
struct pipe_constant_buffer
|
||||||
{
|
{
|
||||||
struct pipe_buffer *buffer;
|
struct pipe_buffer *buffer;
|
||||||
unsigned size; /** in bytes (XXX: redundant!) */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -92,8 +92,6 @@ void st_upload_constants( struct st_context *st,
|
|||||||
pipe_buffer_unmap(pipe->screen, cbuf->buffer);
|
pipe_buffer_unmap(pipe->screen, cbuf->buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
cbuf->size = paramBytes;
|
|
||||||
|
|
||||||
st->pipe->set_constant_buffer(st->pipe, id, 0, cbuf);
|
st->pipe->set_constant_buffer(st->pipe, id, 0, cbuf);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Reference in New Issue
Block a user