vbo: Clean up recalculate_input_bindings.

Now the gl_array_object's layout matches the one used in
recalculate_input_bindings. Make use of this and remove the
bind_array_obj function.

Signed-off-by: Mathias Froehlich <Mathias.Froehlich@web.de>
Reviewed-by: Brian Paul <brianp@vmare.com>
This commit is contained in:
Mathias Fröhlich 2011-11-01 11:53:46 +01:00
parent a5608a5098
commit 91d950bad1
2 changed files with 17 additions and 46 deletions

View File

@ -136,12 +136,6 @@ struct vbo_exec_context
} eval; } eval;
struct { struct {
/* These just mirror the current arrayobj (todo: make arrayobj
* look like this and remove the mirror):
*/
const struct gl_client_array *legacy_array[VERT_ATTRIB_FF_MAX];
const struct gl_client_array *generic_array[VERT_ATTRIB_GENERIC_MAX];
/* Arrays and current values manipulated according to program /* Arrays and current values manipulated according to program
* mode, etc. These are the attributes as seen by vertex * mode, etc. These are the attributes as seen by vertex
* programs: * programs:

View File

@ -332,6 +332,7 @@ print_draw_arrays(struct gl_context *ctx,
{ {
struct vbo_context *vbo = vbo_context(ctx); struct vbo_context *vbo = vbo_context(ctx);
struct vbo_exec_context *exec = &vbo->exec; struct vbo_exec_context *exec = &vbo->exec;
struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
int i; int i;
printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n", printf("vbo_exec_DrawArrays(mode 0x%x, start %d, count %d):\n",
@ -347,7 +348,7 @@ print_draw_arrays(struct gl_context *ctx,
exec->array.inputs[i]->Size, exec->array.inputs[i]->Size,
stride, stride,
/*exec->array.inputs[i]->Enabled,*/ /*exec->array.inputs[i]->Enabled,*/
exec->array.legacy_array[i]->Enabled, arrayObj->VertexAttrib[VERT_ATTRIB_FF(i)].Enabled,
exec->array.inputs[i]->Ptr, exec->array.inputs[i]->Ptr,
bufName); bufName);
@ -371,30 +372,6 @@ print_draw_arrays(struct gl_context *ctx,
} }
/**
* Bind the VBO executor to the current vertex array object prior
* to drawing.
*
* Just translate the arrayobj into a sane layout.
*/
static void
bind_array_obj(struct gl_context *ctx)
{
struct vbo_context *vbo = vbo_context(ctx);
struct vbo_exec_context *exec = &vbo->exec;
struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
GLuint i;
for (i = 0; i < VERT_ATTRIB_FF_MAX; i++)
exec->array.legacy_array[i] = &arrayObj->VertexAttrib[VERT_ATTRIB_FF(i)];
for (i = 0; i < VERT_ATTRIB_GENERIC_MAX; i++) {
assert(i < Elements(exec->array.generic_array));
exec->array.generic_array[i] = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(i)];
}
}
/** /**
* Set the vbo->exec->inputs[] pointers to point to the enabled * Set the vbo->exec->inputs[] pointers to point to the enabled
* vertex arrays. This depends on the current vertex program/shader * vertex arrays. This depends on the current vertex program/shader
@ -408,6 +385,7 @@ recalculate_input_bindings(struct gl_context *ctx)
{ {
struct vbo_context *vbo = vbo_context(ctx); struct vbo_context *vbo = vbo_context(ctx);
struct vbo_exec_context *exec = &vbo->exec; struct vbo_exec_context *exec = &vbo->exec;
struct gl_client_array *vertexAttrib = ctx->Array.ArrayObj->VertexAttrib;
const struct gl_client_array **inputs = &exec->array.inputs[0]; const struct gl_client_array **inputs = &exec->array.inputs[0];
GLbitfield64 const_inputs = 0x0; GLbitfield64 const_inputs = 0x0;
GLuint i; GLuint i;
@ -420,8 +398,8 @@ recalculate_input_bindings(struct gl_context *ctx)
* are available as per-vertex attributes. * are available as per-vertex attributes.
*/ */
for (i = 0; i < VERT_ATTRIB_FF_MAX; i++) { for (i = 0; i < VERT_ATTRIB_FF_MAX; i++) {
if (exec->array.legacy_array[i]->Enabled) if (vertexAttrib[VERT_ATTRIB_FF(i)].Enabled)
inputs[i] = exec->array.legacy_array[i]; inputs[i] = &vertexAttrib[VERT_ATTRIB_FF(i)];
else { else {
inputs[i] = &vbo->legacy_currval[i]; inputs[i] = &vbo->legacy_currval[i];
const_inputs |= VERT_BIT(i); const_inputs |= VERT_BIT(i);
@ -457,10 +435,10 @@ recalculate_input_bindings(struct gl_context *ctx)
*/ */
for (i = 0; i < VERT_ATTRIB_FF_MAX; i++) { for (i = 0; i < VERT_ATTRIB_FF_MAX; i++) {
if (i < VERT_ATTRIB_GENERIC_MAX if (i < VERT_ATTRIB_GENERIC_MAX
&& exec->array.generic_array[i]->Enabled) && vertexAttrib[VERT_ATTRIB_GENERIC(i)].Enabled)
inputs[i] = exec->array.generic_array[i]; inputs[i] = &vertexAttrib[VERT_ATTRIB_GENERIC(i)];
else if (exec->array.legacy_array[i]->Enabled) else if (vertexAttrib[VERT_ATTRIB_FF(i)].Enabled)
inputs[i] = exec->array.legacy_array[i]; inputs[i] = &vertexAttrib[VERT_ATTRIB_FF(i)];
else { else {
inputs[i] = &vbo->legacy_currval[i]; inputs[i] = &vbo->legacy_currval[i];
const_inputs |= VERT_BIT_FF(i); const_inputs |= VERT_BIT_FF(i);
@ -486,18 +464,18 @@ recalculate_input_bindings(struct gl_context *ctx)
* generic attributes in the generic slots and materials are not * generic attributes in the generic slots and materials are not
* available as per-vertex attributes. * available as per-vertex attributes.
*/ */
if (exec->array.generic_array[0]->Enabled) if (vertexAttrib[VERT_ATTRIB_GENERIC0].Enabled)
inputs[0] = exec->array.generic_array[0]; inputs[0] = &vertexAttrib[VERT_ATTRIB_GENERIC0];
else if (exec->array.legacy_array[0]->Enabled) else if (vertexAttrib[VERT_ATTRIB_POS].Enabled)
inputs[0] = exec->array.legacy_array[0]; inputs[0] = &vertexAttrib[VERT_ATTRIB_POS];
else { else {
inputs[0] = &vbo->legacy_currval[0]; inputs[0] = &vbo->legacy_currval[0];
const_inputs |= VERT_BIT_POS; const_inputs |= VERT_BIT_POS;
} }
for (i = 1; i < VERT_ATTRIB_FF_MAX; i++) { for (i = 1; i < VERT_ATTRIB_FF_MAX; i++) {
if (exec->array.legacy_array[i]->Enabled) if (vertexAttrib[VERT_ATTRIB_FF(i)].Enabled)
inputs[i] = exec->array.legacy_array[i]; inputs[i] = &vertexAttrib[VERT_ATTRIB_FF(i)];
else { else {
inputs[i] = &vbo->legacy_currval[i]; inputs[i] = &vbo->legacy_currval[i];
const_inputs |= VERT_BIT_FF(i); const_inputs |= VERT_BIT_FF(i);
@ -505,8 +483,8 @@ recalculate_input_bindings(struct gl_context *ctx)
} }
for (i = 1; i < VERT_ATTRIB_GENERIC_MAX; i++) { for (i = 1; i < VERT_ATTRIB_GENERIC_MAX; i++) {
if (exec->array.generic_array[i]->Enabled) if (vertexAttrib[VERT_ATTRIB_GENERIC(i)].Enabled)
inputs[VERT_ATTRIB_GENERIC(i)] = exec->array.generic_array[i]; inputs[VERT_ATTRIB_GENERIC(i)] = &vertexAttrib[VERT_ATTRIB_GENERIC(i)];
else { else {
inputs[VERT_ATTRIB_GENERIC(i)] = &vbo->generic_currval[i]; inputs[VERT_ATTRIB_GENERIC(i)] = &vbo->generic_currval[i];
const_inputs |= VERT_BIT_GENERIC(i); const_inputs |= VERT_BIT_GENERIC(i);
@ -536,7 +514,6 @@ vbo_bind_arrays(struct gl_context *ctx)
return; return;
} }
bind_array_obj(ctx);
recalculate_input_bindings(ctx); recalculate_input_bindings(ctx);
ctx->Array.RebindArrays = GL_FALSE; ctx->Array.RebindArrays = GL_FALSE;
} }