[Mesa-dev] [PATCH 01/12] nvc0: allocate an area for compute user constbufs

Samuel Pitoiset samuel.pitoiset at gmail.com
Sun Feb 7 09:51:31 UTC 2016



On 02/07/2016 10:38 AM, Michael Schellenberger Costa wrote:
> Hi,
>
> Am 06/02/2016 um 23:38 schrieb Samuel Pitoiset:
>> For compute shaders, we might need to upload uniforms.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/gallium/drivers/nouveau/nvc0/nvc0_screen.c         | 14 +++++++-------
>>   src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c | 12 ++++++------
>>   src/gallium/drivers/nouveau/nvc0/nvc0_tex.c            |  2 +-
>>   src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c            | 10 ++++++----
>>   4 files changed, 20 insertions(+), 18 deletions(-)
>>
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> index 2b12de4..84e4253 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
>> @@ -889,7 +889,7 @@ nvc0_screen_create(struct nouveau_device *dev)
>>       */
>>      nouveau_heap_init(&screen->text_heap, 0, (1 << 20) - 0x100);
>>
>> -   ret = nouveau_bo_new(dev, NV_VRAM_DOMAIN(&screen->base), 1 << 12, 6 << 16, NULL,
>> +   ret = nouveau_bo_new(dev, NV_VRAM_DOMAIN(&screen->base), 1 << 12, 7 << 16, NULL,
>>                           &screen->uniform_bo);
>
> There aren't any enums for those magic numbers here and below?

Hi,

Well, we have a bunch of magic numbers in the nvc0 driver but they are 
quite understandable though. I agree with you that it would be better to 
use some macros here and there but this is not the main intention of 
this patch.

>
>>      if (ret)
>>         goto fail;
>> @@ -901,8 +901,8 @@ nvc0_screen_create(struct nouveau_device *dev)
>>         /* auxiliary constants (6 user clip planes, base instance id) */
>>         BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>         PUSH_DATA (push, 1024);
>> -      PUSH_DATAh(push, screen->uniform_bo->offset + (5 << 16) + (i << 10));
>> -      PUSH_DATA (push, screen->uniform_bo->offset + (5 << 16) + (i << 10));
>> +      PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (i << 10));
>> +      PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (i << 10));
> The pattern (N << 16) + (M << 10)) seems repetitive, would a helper make
> sense here (Might help to avoid the magic numbers)?

cf. My comment above.

>
> Michael
>
>>         BEGIN_NVC0(push, NVC0_3D(CB_BIND(i)), 1);
>>         PUSH_DATA (push, (15 << 4) | 1);
>>         if (screen->eng3d->oclass >= NVE4_3D_CLASS) {
>> @@ -922,8 +922,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 + (5 << 16) + (6 << 10));
>> -   PUSH_DATA (push, screen->uniform_bo->offset + (5 << 16) + (6 << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>> +   PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>>      BEGIN_1IC0(push, NVC0_3D(CB_POS), 5);
>>      PUSH_DATA (push, 0);
>>      PUSH_DATAf(push, 0.0f);
>> @@ -931,8 +931,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 + (5 << 16) + (6 << 10));
>> -   PUSH_DATA (push, screen->uniform_bo->offset + (5 << 16) + (6 << 10));
>> +   PUSH_DATAh(push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>> +   PUSH_DATA (push, screen->uniform_bo->offset + (6 << 16) + (6 << 10));
>>
>>      if (screen->base.drm->version >= 0x01000101) {
>>         ret = nouveau_getparam(dev, NOUVEAU_GETPARAM_GRAPH_UNITS, &value);
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
>> index c17223a..2bb9b44 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
>> @@ -184,8 +184,8 @@ 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 + (5 << 16) + (4 << 10));
>> -    PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (5 << 16) + (4 << 10));
>> +    PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (4 << 10));
>> +    PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (4 << 10));
>>       BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 2 * ms);
>>       PUSH_DATA (push, 256 + 128);
>>       for (i = 0; i < ms; i++) {
>> @@ -318,8 +318,8 @@ nvc0_upload_uclip_planes(struct nvc0_context *nvc0, unsigned s)
>>
>>      BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
>>      PUSH_DATA (push, 1024);
>> -   PUSH_DATAh(push, bo->offset + (5 << 16) + (s << 10));
>> -   PUSH_DATA (push, bo->offset + (5 << 16) + (s << 10));
>> +   PUSH_DATAh(push, bo->offset + (6 << 16) + (s << 10));
>> +   PUSH_DATA (push, bo->offset + (6 << 16) + (s << 10));
>>      BEGIN_1IC0(push, NVC0_3D(CB_POS), PIPE_MAX_CLIP_PLANES * 4 + 1);
>>      PUSH_DATA (push, 256);
>>      PUSH_DATAp(push, &nvc0->clip.ucp[0][0], PIPE_MAX_CLIP_PLANES * 4);
>> @@ -479,8 +479,8 @@ nvc0_validate_buffers(struct nvc0_context *nvc0)
>>      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 + (5 << 16) + (s << 10));
>> -      PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (5 << 16) + (s << 10));
>> +      PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (s << 10));
>> +      PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (s << 10));
>>         BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 4 * NVC0_MAX_BUFFERS);
>>         PUSH_DATA (push, 512);
>>         for (i = 0; i < NVC0_MAX_BUFFERS; i++) {
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c b/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c
>> index 7223f5a..24bbff6 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_tex.c
>> @@ -513,7 +513,7 @@ nve4_set_tex_handles(struct nvc0_context *nvc0)
>>
>>      if (nvc0->screen->base.class_3d < NVE4_3D_CLASS)
>>         return;
>> -   address = nvc0->screen->uniform_bo->offset + (5 << 16);
>> +   address = nvc0->screen->uniform_bo->offset + (6 << 16);
>>
>>      for (s = 0; s < 5; ++s, address += (1 << 10)) {
>>         uint32_t dirty = nvc0->textures_dirty[s] | nvc0->samplers_dirty[s];
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
>> index 44aed1a..3456e2a 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
>> @@ -833,8 +833,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 + (5 << 16) + (0 << 9));
>> -   PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (5 << 16) + (0 << 9));
>> +   PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> +   PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> +   BEGIN_NVC0(push, NVC0_3D(CB_POS), 1);
>> +   PUSH_DATA (push, 256 + 128);
>>
>>      if (info->indexed) {
>>         assert(nvc0->idxbuf.buffer);
>> @@ -974,8 +976,8 @@ 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 + (5 << 16) + (0 << 9));
>> -      PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (5 << 16) + (0 << 9));
>> +      PUSH_DATAh(push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>> +      PUSH_DATA (push, nvc0->screen->uniform_bo->offset + (6 << 16) + (0 << 9));
>>         if (!info->indirect) {
>>            BEGIN_1IC0(push, NVC0_3D(CB_POS), 1 + 3);
>>            PUSH_DATA (push, 256 + 128);
>>


More information about the mesa-dev mailing list