[Mesa-dev] [PATCH 4/5] nvc0: avoid using magic numbers for the uniform_bo offsets

Samuel Pitoiset samuel.pitoiset at gmail.com
Thu Mar 17 08:44:02 UTC 2016



On 03/17/2016 01:02 AM, Pierre Moreau wrote:
> Hello,
>
> On 09:55 PM - Mar 15 2016, Samuel Pitoiset wrote:
>> Instead make use of constants to improve readability.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/gallium/drivers/nouveau/nvc0/nvc0_compute.c    | 13 +++++-----
>>   src/gallium/drivers/nouveau/nvc0/nvc0_context.h    | 22 +++++++++++++++++
>>   src/gallium/drivers/nouveau/nvc0/nvc0_program.c    | 12 +++++-----
>>   src/gallium/drivers/nouveau/nvc0/nvc0_screen.c     | 12 +++++-----
>>   src/gallium/drivers/nouveau/nvc0/nvc0_screen.h     |  2 +-
>>   .../drivers/nouveau/nvc0/nvc0_state_validate.c     | 28 ++++++++++++----------
>>   src/gallium/drivers/nouveau/nvc0/nvc0_tex.c        |  9 ++++---
>>   src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c        | 14 ++++++-----
>>   8 files changed, 69 insertions(+), 43 deletions(-)
>>
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_compute.c b/src/gallium/drivers/nouveau/nvc0/nvc0_compute.c
>> index ffbb16f..6aaa7ce 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_compute.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_compute.c
>> @@ -153,7 +153,7 @@ nvc0_compute_validate_constbufs(struct nvc0_context *nvc0)
>>
>>         if (nvc0->constbuf[s][i].user) {
>>            struct nouveau_bo *bo = nvc0->screen->uniform_bo;
>> -         const unsigned base = s << 16;
>> +         const unsigned base = NVC0_CB_USR_INFO(s);
>>            const unsigned size = nvc0->constbuf[s][0].size;
>>            assert(i == 0); /* we really only want OpenGL uniforms here */
>>            assert(nvc0->constbuf[s][0].u.data);
>> @@ -207,8 +207,8 @@ nvc0_compute_validate_driverconst(struct nvc0_context *nvc0)
>>
>>      BEGIN_NVC0(push, NVC0_CP(CB_SIZE), 3);
>>      PUSH_DATA (push, 1024);
>> -   PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (5 << 10));
>> -   PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (5 << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(5));
>> +   PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(5));
>>      BEGIN_NVC0(push, NVC0_CP(CB_BIND), 1);
>>      PUSH_DATA (push, (15 << 8) | 1);
>>
>> @@ -219,15 +219,16 @@ static void
>>   nvc0_compute_validate_buffers(struct nvc0_context *nvc0)
>>   {
>>      struct nouveau_pushbuf *push = nvc0->base.pushbuf;
>> +   struct nvc0_screen *screen = nvc0->screen;
>
> Why define `screen` and not `offset`? You would *save* more characters. It's
> not like you are reusing screen otherwise in this function. Sure the same
> pattern comes back multiple times in various functions, but you should be able
> to do the same factorisation in those as well.

Because I prefer to see PUSH_DATA with uniform_bo with git grep. :-)
That might help.

>
>>      const int s = 5;
>>      int i;
>>
>>      BEGIN_NVC0(push, NVC0_CP(CB_SIZE), 3);
>>      PUSH_DATA (push, 1024);
>> -   PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (s << 10));
>> -   PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (s << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>> +   PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>>      BEGIN_1IC0(push, NVC0_CP(CB_POS), 1 + 4 * NVC0_MAX_BUFFERS);
>> -   PUSH_DATA (push, 512);
>> +   PUSH_DATA (push, NVC0_CB_AUX_BUF_INFO(0));
>>
>>      for (i = 0; i < NVC0_MAX_BUFFERS; i++) {
>>         if (nvc0->buffers[s][i].buffer) {
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_context.h b/src/gallium/drivers/nouveau/nvc0/nvc0_context.h
>> index 54afe88..c63d138 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_context.h
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_context.h
>> @@ -98,6 +98,28 @@
>>   #define NVC0_BIND_M2MF          0
>>   #define NVC0_BIND_FENCE         1
>>
>> +/* 6 user uniform buffers, at 64K each */
>> +#define NVC0_CB_USR_INFO(s)         (s << 16)
>> +#define NVC0_CB_USR_SIZE            (6 << 16)
>> +/* 6 driver constbuts, at 1K each */
>> +#define NVC0_CB_AUX_INFO(s)         NVC0_CB_USR_SIZE + (s << 10)
>> +#define NVC0_CB_AUX_SIZE            (6 << 10)
>> +/* 32 textures handles, at 1 32-bits integer each */
>> +#define NVC0_CB_AUX_TEX_INFO(i)     0x020 + (i) * 4
>> +#define NVC0_CB_AUX_TEX_SIZE        (32 * 4)
>> +/* 8 user clip planes, at 4 32-bits floats each */
>> +#define NVC0_CB_AUX_UCP_INFO        0x100
>
> This one (and the following ones) seems to be placed in memory one after the
> other. Wouldn't it be better to define them relative to each other, rather than
> hardcoding the value. It blurs how they are layout in memory, and makes it more
> prone to errors if one decides to insert something in between two, or do some
> other modifications.
>
>> +#define NVC0_CB_AUX_UCP_SIZE        (PIPE_MAX_CLIP_PLANES * 4 * 4)
>> +/* 8 sets of 32-bits integer pairs sample offsets */
>> +#define NVC0_CB_AUX_SAMPLE_INFO     0x180 /* FP */
>> +#define NVC0_CB_AUX_SAMPLE_SIZE     (8 * 4 * 2)
>> +/* draw parameters (index bais, base instance, drawid) */
>> +#define NVC0_CB_AUX_DRAW_INFO       0x180 /* VP */
>
> What is the status of this one? Is the region from 0x180 and after considered
> as the `AUX_DRAW_INFO`, and has a subpart named as `AUX_SAMPLE_INFO`, or should
> one of those be at 0x180 and the other at 0x1c0, both with a size of 0x40?

Nope because it's different shader types, so they use a separate area in 
the uniform_bo and we can reuse the same offset.

>
> Apart from these nitpicks, this is
> Acked-by: Pierre Moreau <pierre.morrow at free.fr>
>
> Pierre
>
>> +/* 32 user buffers, at 4 32-bits integers each */
>> +#define NVC0_CB_AUX_BUF_INFO(i)     0x200 + (i) * 4 * 4
>> +#define NVC0_CB_AUX_BUF_SIZE        (NVC0_MAX_BUFFERS * 4 * 4)
>> +/* 4 32-bits floats for the vertex runout, put at the end */
>> +#define NVC0_CB_AUX_RUNOUT_INFO     NVC0_CB_USR_SIZE + NVC0_CB_AUX_SIZE
>>
>>   struct nvc0_blitctx;
>>
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
>> index 48e3475..b7c6faf 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
>> @@ -535,8 +535,8 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset,
>>
>>      info->io.genUserClip = prog->vp.num_ucps;
>>      info->io.auxCBSlot = 15;
>> -   info->io.ucpBase = 256;
>> -   info->io.drawInfoBase = 256 + 128;
>> +   info->io.ucpBase = NVC0_CB_AUX_UCP_INFO;
>> +   info->io.drawInfoBase = NVC0_CB_AUX_DRAW_INFO;
>>
>>      if (prog->type == PIPE_SHADER_COMPUTE) {
>>         if (chipset >= NVISA_GK104_CHIPSET) {
>> @@ -545,17 +545,17 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset,
>>            info->io.suInfoBase = NVE4_CP_INPUT_SUF(0);
>>            info->prop.cp.gridInfoBase = NVE4_CP_INPUT_GRID_INFO(0);
>>         } else {
>> -         info->io.suInfoBase = 512;
>> +         info->io.suInfoBase = NVC0_CB_AUX_BUF_INFO(0);
>>         }
>>         info->io.msInfoCBSlot = 0;
>>         info->io.msInfoBase = NVE4_CP_INPUT_MS_OFFSETS;
>>      } else {
>>         if (chipset >= NVISA_GK104_CHIPSET) {
>> -         info->io.texBindBase = 0x20;
>> +         info->io.texBindBase = NVC0_CB_AUX_TEX_INFO(0);
>>            info->io.suInfoBase = 0; /* TODO */
>>         }
>> -      info->io.sampleInfoBase = 256 + 128;
>> -      info->io.suInfoBase = 512;
>> +      info->io.sampleInfoBase = NVC0_CB_AUX_SAMPLE_INFO;
>> +      info->io.suInfoBase = NVC0_CB_AUX_BUF_INFO(0);
>>         info->io.msInfoCBSlot = 15;
>>         info->io.msInfoBase = 0; /* TODO */
>>      }
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> index d316235..741b5ce 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> @@ -922,8 +922,8 @@ nvc0_screen_create(struct nouveau_device *dev)
>>      for (i = 0; i < 5; ++i) {
>>         BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>         PUSH_DATA (push, 1024);
>> -      PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (i << 10));
>> -      PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (i << 10));
>> +      PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(i));
>> +      PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(i));
>>         BEGIN_NVC0(push, NVC0_3D(CB_BIND(i)), 1);
>>         PUSH_DATA (push, (15 << 4) | 1);
>>         if (screen->eng3d->oclass < NVE4_3D_CLASS) {
>> @@ -937,8 +937,8 @@ nvc0_screen_create(struct nouveau_device *dev)
>>      /* return { 0.0, 0.0, 0.0, 0.0 } for out-of-bounds vtxbuf access */
>>      BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>      PUSH_DATA (push, 256);
>> -   PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>> -   PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_RUNOUT_INFO);
>> +   PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_RUNOUT_INFO);
>>      BEGIN_1IC0(push, NVC0_3D(CB_POS), 5);
>>      PUSH_DATA (push, 0);
>>      PUSH_DATAf(push, 0.0f);
>> @@ -946,8 +946,8 @@ nvc0_screen_create(struct nouveau_device *dev)
>>      PUSH_DATAf(push, 0.0f);
>>      PUSH_DATAf(push, 0.0f);
>>      BEGIN_NVC0(push, NVC0_3D(VERTEX_RUNOUT_ADDRESS_HIGH), 2);
>> -   PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>> -   PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_RUNOUT_INFO);
>> +   PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_RUNOUT_INFO);
>>
>>      if (screen->base.drm->version >= 0x01000101) {
>>         ret = nouveau_getparam(dev, NOUVEAU_GETPARAM_GRAPH_UNITS, &value);
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.h b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.h
>> index 8487abc..46b692d 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.h
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.h
>> @@ -66,7 +66,7 @@ struct nvc0_screen {
>>
>>      struct nouveau_bo *text;
>>      struct nouveau_bo *parm;       /* for COMPUTE */
>> -   struct nouveau_bo *uniform_bo; /* for 3D */
>> +   struct nouveau_bo *uniform_bo;
>>      struct nouveau_bo *tls;
>>      struct nouveau_bo *txc; /* TIC (offset 0) and TSC (65536) */
>>      struct nouveau_bo *poly_cache;
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
>> index c0ed5c0..9c64482 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
>> @@ -72,6 +72,7 @@ nvc0_validate_fb(struct nvc0_context *nvc0)
>>   {
>>       struct nouveau_pushbuf *push = nvc0->base.pushbuf;
>>       struct pipe_framebuffer_state *fb = &nvc0->framebuffer;
>> +    struct nvc0_screen *screen = nvc0->screen;
>>       unsigned i, ms;
>>       unsigned ms_mode = NVC0_3D_MULTISAMPLE_MODE_MS1;
>>       bool serialize = false;
>> @@ -183,10 +184,10 @@ nvc0_validate_fb(struct nvc0_context *nvc0)
>>       ms = 1 << ms_mode;
>>       BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>       PUSH_DATA (push, 1024);
>> -    PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (4 << 10));
>> -    PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (4 << 10));
>> +    PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(4));
>> +    PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(4));
>>       BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 2 * ms);
>> -    PUSH_DATA (push, 256 + 128);
>> +    PUSH_DATA (push, NVC0_CB_AUX_SAMPLE_INFO);
>>       for (i = 0; i < ms; i++) {
>>          float xy[2];
>>          nvc0->base.pipe.get_sample_position(&nvc0->base.pipe, ms, i, xy);
>> @@ -313,14 +314,14 @@ static inline void
>>   nvc0_upload_uclip_planes(struct nvc0_context *nvc0, unsigned s)
>>   {
>>      struct nouveau_pushbuf *push = nvc0->base.pushbuf;
>> -   struct nouveau_bo *bo = nvc0->screen->uniform_bo;
>> +   struct nvc0_screen *screen = nvc0->screen;
>>
>>      BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>      PUSH_DATA (push, 1024);
>> -   PUSH_DATAh(push, bo->offset + (6 << 16) + (s << 10));
>> -   PUSH_DATA (push, bo->offset + (6 << 16) + (s << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>> +   PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>>      BEGIN_1IC0(push, NVC0_3D(CB_POS), PIPE_MAX_CLIP_PLANES * 4 + 1);
>> -   PUSH_DATA (push, 256);
>> +   PUSH_DATA (push, NVC0_CB_AUX_UCP_INFO);
>>      PUSH_DATAp(push, &nvc0->clip.ucp[0][0], PIPE_MAX_CLIP_PLANES * 4);
>>   }
>>
>> @@ -424,7 +425,7 @@ nvc0_constbufs_validate(struct nvc0_context *nvc0)
>>
>>            if (nvc0->constbuf[s][i].user) {
>>               struct nouveau_bo *bo = nvc0->screen->uniform_bo;
>> -            const unsigned base = s << 16;
>> +            const unsigned base = NVC0_CB_USR_INFO(s);
>>               const unsigned size = nvc0->constbuf[s][0].size;
>>               assert(i == 0); /* we really only want OpenGL uniforms here */
>>               assert(nvc0->constbuf[s][0].u.data);
>> @@ -478,15 +479,16 @@ static void
>>   nvc0_validate_buffers(struct nvc0_context *nvc0)
>>   {
>>      struct nouveau_pushbuf *push = nvc0->base.pushbuf;
>> +   struct nvc0_screen *screen = nvc0->screen;
>>      int i, s;
>>
>>      for (s = 0; s < 5; s++) {
>>         BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>         PUSH_DATA (push, 1024);
>> -      PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (s << 10));
>> -      PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (s << 10));
>> +      PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>> +      PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>>         BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 4 * NVC0_MAX_BUFFERS);
>> -      PUSH_DATA (push, 512);
>> +      PUSH_DATA (push, NVC0_CB_AUX_BUF_INFO(0));
>>         for (i = 0; i < NVC0_MAX_BUFFERS; i++) {
>>            if (nvc0->buffers[s][i].buffer) {
>>               struct nv04_resource *res =
>> @@ -550,8 +552,8 @@ nvc0_validate_driverconst(struct nvc0_context *nvc0)
>>      for (i = 0; i < 5; ++i) {
>>         BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>         PUSH_DATA (push, 1024);
>> -      PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (i << 10));
>> -      PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (i << 10));
>> +      PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(i));
>> +      PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(i));
>>         BEGIN_NVC0(push, NVC0_3D(CB_BIND(i)), 1);
>>         PUSH_DATA (push, (15 << 4) | 1);
>>      }
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c b/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c
>> index 5333240..ce6a6dc 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c
>> @@ -707,21 +707,20 @@ void
>>   nve4_set_tex_handles(struct nvc0_context *nvc0)
>>   {
>>      struct nouveau_pushbuf *push = nvc0->base.pushbuf;
>> -   uint64_t address;
>> +   struct nvc0_screen *screen = nvc0->screen;
>>      unsigned s;
>>
>>      if (nvc0->screen->base.class_3d < NVE4_3D_CLASS)
>>         return;
>> -   address = nvc0->screen->uniform_bo->offset + (6 << 16);
>>
>> -   for (s = 0; s < 5; ++s, address += (1 << 10)) {
>> +   for (s = 0; s < 5; ++s) {
>>         uint32_t dirty = nvc0->textures_dirty[s] | nvc0->samplers_dirty[s];
>>         if (!dirty)
>>            continue;
>>         BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>         PUSH_DATA (push, 1024);
>> -      PUSH_DATAh(push, address);
>> -      PUSH_DATA (push, address);
>> +      PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>> +      PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s));
>>         do {
>>            int i = ffs(dirty) - 1;
>>            dirty &= ~(1 << i);
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
>> index e0e0ad2..4d9cd57 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
>> @@ -820,6 +820,7 @@ nvc0_draw_indirect(struct nvc0_context *nvc0, const struct pipe_draw_info *info)
>>      struct nv04_resource *buf_count = nv04_resource(info->indirect_params);
>>      unsigned size, macro, count = info->indirect_count, drawid = info->drawid;
>>      uint32_t offset = buf->offset + info->indirect_offset;
>> +   struct nvc0_screen *screen = nvc0->screen;
>>
>>      PUSH_SPACE(push, 7);
>>
>> @@ -833,10 +834,10 @@ nvc0_draw_indirect(struct nvc0_context *nvc0, const struct pipe_draw_info *info)
>>      /* Queue things up to let the macros write params to the driver constbuf */
>>      BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>      PUSH_DATA (push, 512);
>> -   PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> -   PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(0));
>> +   PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(0));
>>      BEGIN_NVC0(push, NVC0_3D(CB_POS), 1);
>> -   PUSH_DATA (push, 256 + 128);
>> +   PUSH_DATA (push, NVC0_CB_AUX_DRAW_INFO);
>>
>>      if (info->indexed) {
>>         assert(nvc0->idxbuf.buffer);
>> @@ -934,6 +935,7 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
>>   {
>>      struct nvc0_context *nvc0 = nvc0_context(pipe);
>>      struct nouveau_pushbuf *push = nvc0->base.pushbuf;
>> +   struct nvc0_screen *screen = nvc0->screen;
>>      int s;
>>
>>      /* NOTE: caller must ensure that (min_index + index_bias) is >= 0 */
>> @@ -975,11 +977,11 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
>>         PUSH_SPACE(push, 9);
>>         BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>         PUSH_DATA (push, 512);
>> -      PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> -      PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> +      PUSH_DATAh(push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(0));
>> +      PUSH_DATA (push, screen->uniform_bo->offset + NVC0_CB_AUX_INFO(0));
>>         if (!info->indirect) {
>>            BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 3);
>> -         PUSH_DATA (push, 256 + 128);
>> +         PUSH_DATA (push, NVC0_CB_AUX_DRAW_INFO);
>>            PUSH_DATA (push, info->index_bias);
>>            PUSH_DATA (push, info->start_instance);
>>            PUSH_DATA (push, info->drawid);
>> --
>> 2.7.3
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list