From: Christoph Bumiller Date: Sun, 19 Dec 2010 20:38:42 +0000 (+0100) Subject: nvc0: switch to the proper constants upload path X-Git-Tag: mesa-7.11-rc1~2981^2~27 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f0f1cce9622d0bd21882071654733a6e5d41e7b0;p=platform%2Fupstream%2Fmesa.git nvc0: switch to the proper constants upload path Makes things suddenly go surprisingly fast. --- diff --git a/src/gallium/drivers/nvc0/nvc0_context.h b/src/gallium/drivers/nvc0/nvc0_context.h index 2626330..0ea18d7 100644 --- a/src/gallium/drivers/nvc0/nvc0_context.h +++ b/src/gallium/drivers/nvc0/nvc0_context.h @@ -80,7 +80,7 @@ struct nvc0_context { uint8_t num_textures[5]; uint8_t num_samplers[5]; uint16_t scissor; - uint8_t uniform_buffer_bound; /* workaround */ + uint32_t uniform_buffer_bound[5]; } state; struct nvc0_blend_stateobj *blend; diff --git a/src/gallium/drivers/nvc0/nvc0_state_validate.c b/src/gallium/drivers/nvc0/nvc0_state_validate.c index ded461b..fe40d49 100644 --- a/src/gallium/drivers/nvc0/nvc0_state_validate.c +++ b/src/gallium/drivers/nvc0/nvc0_state_validate.c @@ -263,7 +263,7 @@ nvc0_constbufs_validate(struct nvc0_context *nvc0) BEGIN_RING(chan, RING_3D(CB_BIND(s)), 1); OUT_RING (chan, (i << 4) | 0); if (i == 0) - nvc0->state.uniform_buffer_bound &= ~(1 << s); + nvc0->state.uniform_buffer_bound[s] = 0; continue; } @@ -272,14 +272,15 @@ nvc0_constbufs_validate(struct nvc0_context *nvc0) base = s << 16; bo = nvc0->screen->uniforms; - if (nvc0->state.uniform_buffer_bound & (1 << s)) + if (nvc0->state.uniform_buffer_bound[s] >= res->base.width0) rebind = FALSE; else - nvc0->state.uniform_buffer_bound |= (1 << s); + nvc0->state.uniform_buffer_bound[s] = + align(res->base.width0, 0x100); } else { bo = res->bo; } -#if 1 +#if 0 nvc0_m2mf_push_linear(nvc0, bo, NOUVEAU_BO_VRAM, base, res->base.width0, res->data); BEGIN_RING(chan, RING_3D_(0x021c), 1); @@ -290,7 +291,7 @@ nvc0_constbufs_validate(struct nvc0_context *nvc0) } else { bo = res->bo; if (i == 0) - nvc0->state.uniform_buffer_bound &= ~(1 << s); + nvc0->state.uniform_buffer_bound[s] = 0; } if (bo != nvc0->screen->uniforms)