[3/4] nvc0: allow a non-user buffer to be bound at position 0

Submitted by Ilia Mirkin on July 26, 2019, 3:30 a.m.

Details

Message ID 20190726033030.29144-3-imirkin@alum.mit.edu
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Ilia Mirkin July 26, 2019, 3:30 a.m.
Previously the code only handled it for positions 1 and up (as would be
for UBO's in GL). It's not a lot of trouble to handle this, and vl or
vdpau want this.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111213
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: mesa-stable@lists.freedesktop.org
---
 .../drivers/nouveau/nvc0/nve4_compute.c       | 45 +++++++++++--------
 1 file changed, 27 insertions(+), 18 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
index c5e4dec20bd..a1c40d1e6b9 100644
--- a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
+++ b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
@@ -393,23 +393,24 @@  nve4_compute_validate_constbufs(struct nvc0_context *nvc0)
             uint64_t address
                = nvc0->screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s);
 
-            assert(i > 0); /* we really only want uniform buffer objects */
-
-            BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
-            PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
-            PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
-            BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
-            PUSH_DATA (push, 4 * 4);
-            PUSH_DATA (push, 0x1);
-            BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
-            PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
-
-            PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
-            PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
-            PUSH_DATA (push, nvc0->constbuf[5][i].size);
-            PUSH_DATA (push, 0);
-            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
+            /* constbufs above 0 will are fetched via ubo info in the shader */
+            if (i > 0) {
+               BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
+               PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
+               PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
+               BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
+               PUSH_DATA (push, 4 * 4);
+               PUSH_DATA (push, 0x1);
+               BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
+               PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
+
+               PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
+               PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
+               PUSH_DATA (push, nvc0->constbuf[s][i].size);
+               PUSH_DATA (push, 0);
+            }
 
+            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
             res->cb_bindings[s] |= 1 << i;
          }
       }
@@ -554,9 +555,9 @@  nve4_compute_derive_cache_split(struct nvc0_context *nvc0, uint32_t shared_size)
 static void
 nve4_compute_setup_buf_cb(struct nvc0_context *nvc0, bool gp100, void *desc)
 {
-   // only user constant buffers 1-6 can be put in the descriptor, the rest are
+   // only user constant buffers 0-6 can be put in the descriptor, the rest are
    // loaded through global memory
-   for (int i = 1; i <= 6; i++) {
+   for (int i = 0; i <= 6; i++) {
       if (nvc0->constbuf[5][i].user || !nvc0->constbuf[5][i].u.buf)
          continue;
 
@@ -609,6 +610,10 @@  nve4_compute_setup_launch_desc(struct nvc0_context *nvc0,
    if (nvc0->constbuf[5][0].user || cp->parm_size) {
       nve4_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
                                  NVC0_CB_USR_INFO(5), 1 << 16);
+
+      // Later logic will attempt to bind a real buffer at position 0. That
+      // should not happen if we've bound a user buffer.
+      assert(!nvc0->constbuf[5][0].u.buf);
    }
    nve4_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
                               NVC0_CB_AUX_INFO(5), 1 << 11);
@@ -649,6 +654,10 @@  gp100_compute_setup_launch_desc(struct nvc0_context *nvc0,
    if (nvc0->constbuf[5][0].user || cp->parm_size) {
       gp100_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
                                   NVC0_CB_USR_INFO(5), 1 << 16);
+
+      // Later logic will attempt to bind a real buffer at position 0. That
+      // should not happen if we've bound a user buffer.
+      assert(!nvc0->constbuf[5][0].u.buf);
    }
    gp100_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
                                NVC0_CB_AUX_INFO(5), 1 << 11);

Comments

Reviewed-by: Karol Herbst <kherbst@redhat.com>

On Fri, Jul 26, 2019 at 5:31 AM Ilia Mirkin <imirkin@alum.mit.edu> wrote:
>
> Previously the code only handled it for positions 1 and up (as would be
> for UBO's in GL). It's not a lot of trouble to handle this, and vl or
> vdpau want this.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111213
> Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
> Cc: mesa-stable@lists.freedesktop.org
> ---
>  .../drivers/nouveau/nvc0/nve4_compute.c       | 45 +++++++++++--------
>  1 file changed, 27 insertions(+), 18 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> index c5e4dec20bd..a1c40d1e6b9 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> @@ -393,23 +393,24 @@ nve4_compute_validate_constbufs(struct nvc0_context *nvc0)
>              uint64_t address
>                 = nvc0->screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s);
>
> -            assert(i > 0); /* we really only want uniform buffer objects */
> -
> -            BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
> -            PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> -            PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> -            BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
> -            PUSH_DATA (push, 4 * 4);
> -            PUSH_DATA (push, 0x1);
> -            BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
> -            PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
> -
> -            PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
> -            PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
> -            PUSH_DATA (push, nvc0->constbuf[5][i].size);
> -            PUSH_DATA (push, 0);
> -            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
> +            /* constbufs above 0 will are fetched via ubo info in the shader */
> +            if (i > 0) {
> +               BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
> +               PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> +               PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> +               BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
> +               PUSH_DATA (push, 4 * 4);
> +               PUSH_DATA (push, 0x1);
> +               BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
> +               PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
> +
> +               PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
> +               PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
> +               PUSH_DATA (push, nvc0->constbuf[s][i].size);
> +               PUSH_DATA (push, 0);
> +            }
>
> +            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
>              res->cb_bindings[s] |= 1 << i;
>           }
>        }
> @@ -554,9 +555,9 @@ nve4_compute_derive_cache_split(struct nvc0_context *nvc0, uint32_t shared_size)
>  static void
>  nve4_compute_setup_buf_cb(struct nvc0_context *nvc0, bool gp100, void *desc)
>  {
> -   // only user constant buffers 1-6 can be put in the descriptor, the rest are
> +   // only user constant buffers 0-6 can be put in the descriptor, the rest are
>     // loaded through global memory
> -   for (int i = 1; i <= 6; i++) {
> +   for (int i = 0; i <= 6; i++) {
>        if (nvc0->constbuf[5][i].user || !nvc0->constbuf[5][i].u.buf)
>           continue;
>
> @@ -609,6 +610,10 @@ nve4_compute_setup_launch_desc(struct nvc0_context *nvc0,
>     if (nvc0->constbuf[5][0].user || cp->parm_size) {
>        nve4_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
>                                   NVC0_CB_USR_INFO(5), 1 << 16);
> +
> +      // Later logic will attempt to bind a real buffer at position 0. That
> +      // should not happen if we've bound a user buffer.
> +      assert(!nvc0->constbuf[5][0].u.buf);
>     }
>     nve4_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
>                                NVC0_CB_AUX_INFO(5), 1 << 11);
> @@ -649,6 +654,10 @@ gp100_compute_setup_launch_desc(struct nvc0_context *nvc0,
>     if (nvc0->constbuf[5][0].user || cp->parm_size) {
>        gp100_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
>                                    NVC0_CB_USR_INFO(5), 1 << 16);
> +
> +      // Later logic will attempt to bind a real buffer at position 0. That
> +      // should not happen if we've bound a user buffer.
> +      assert(!nvc0->constbuf[5][0].u.buf);
>     }
>     gp100_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
>                                 NVC0_CB_AUX_INFO(5), 1 << 11);
> --
> 2.21.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Thanks! I had to make a small update to the asserts:

assert(nvc0->constbuf[5][0].user || !nvc0->constbuf[5][0].u.buf);

u.buf is not valid to check when .user is set. (in fact it aliases
with the "data" pointer)

Let me know if you want me to resend.

On Fri, Jul 26, 2019 at 5:51 AM Karol Herbst <kherbst@redhat.com> wrote:
>
> Reviewed-by: Karol Herbst <kherbst@redhat.com>
>
> On Fri, Jul 26, 2019 at 5:31 AM Ilia Mirkin <imirkin@alum.mit.edu> wrote:
> >
> > Previously the code only handled it for positions 1 and up (as would be
> > for UBO's in GL). It's not a lot of trouble to handle this, and vl or
> > vdpau want this.
> >
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111213
> > Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
> > Cc: mesa-stable@lists.freedesktop.org
> > ---
> >  .../drivers/nouveau/nvc0/nve4_compute.c       | 45 +++++++++++--------
> >  1 file changed, 27 insertions(+), 18 deletions(-)
> >
> > diff --git a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> > index c5e4dec20bd..a1c40d1e6b9 100644
> > --- a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> > +++ b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> > @@ -393,23 +393,24 @@ nve4_compute_validate_constbufs(struct nvc0_context *nvc0)
> >              uint64_t address
> >                 = nvc0->screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s);
> >
> > -            assert(i > 0); /* we really only want uniform buffer objects */
> > -
> > -            BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
> > -            PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > -            PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > -            BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
> > -            PUSH_DATA (push, 4 * 4);
> > -            PUSH_DATA (push, 0x1);
> > -            BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
> > -            PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
> > -
> > -            PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
> > -            PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
> > -            PUSH_DATA (push, nvc0->constbuf[5][i].size);
> > -            PUSH_DATA (push, 0);
> > -            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
> > +            /* constbufs above 0 will are fetched via ubo info in the shader */
> > +            if (i > 0) {
> > +               BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
> > +               PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > +               PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > +               BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
> > +               PUSH_DATA (push, 4 * 4);
> > +               PUSH_DATA (push, 0x1);
> > +               BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
> > +               PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
> > +
> > +               PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
> > +               PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
> > +               PUSH_DATA (push, nvc0->constbuf[s][i].size);
> > +               PUSH_DATA (push, 0);
> > +            }
> >
> > +            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
> >              res->cb_bindings[s] |= 1 << i;
> >           }
> >        }
> > @@ -554,9 +555,9 @@ nve4_compute_derive_cache_split(struct nvc0_context *nvc0, uint32_t shared_size)
> >  static void
> >  nve4_compute_setup_buf_cb(struct nvc0_context *nvc0, bool gp100, void *desc)
> >  {
> > -   // only user constant buffers 1-6 can be put in the descriptor, the rest are
> > +   // only user constant buffers 0-6 can be put in the descriptor, the rest are
> >     // loaded through global memory
> > -   for (int i = 1; i <= 6; i++) {
> > +   for (int i = 0; i <= 6; i++) {
> >        if (nvc0->constbuf[5][i].user || !nvc0->constbuf[5][i].u.buf)
> >           continue;
> >
> > @@ -609,6 +610,10 @@ nve4_compute_setup_launch_desc(struct nvc0_context *nvc0,
> >     if (nvc0->constbuf[5][0].user || cp->parm_size) {
> >        nve4_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
> >                                   NVC0_CB_USR_INFO(5), 1 << 16);
> > +
> > +      // Later logic will attempt to bind a real buffer at position 0. That
> > +      // should not happen if we've bound a user buffer.
> > +      assert(!nvc0->constbuf[5][0].u.buf);
> >     }
> >     nve4_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
> >                                NVC0_CB_AUX_INFO(5), 1 << 11);
> > @@ -649,6 +654,10 @@ gp100_compute_setup_launch_desc(struct nvc0_context *nvc0,
> >     if (nvc0->constbuf[5][0].user || cp->parm_size) {
> >        gp100_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
> >                                    NVC0_CB_USR_INFO(5), 1 << 16);
> > +
> > +      // Later logic will attempt to bind a real buffer at position 0. That
> > +      // should not happen if we've bound a user buffer.
> > +      assert(!nvc0->constbuf[5][0].u.buf);
> >     }
> >     gp100_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
> >                                 NVC0_CB_AUX_INFO(5), 1 << 11);
> > --
> > 2.21.0
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
On Fri, Jul 26, 2019 at 2:59 PM Ilia Mirkin <imirkin@alum.mit.edu> wrote:
>
> Thanks! I had to make a small update to the asserts:
>
> assert(nvc0->constbuf[5][0].user || !nvc0->constbuf[5][0].u.buf);
>
> u.buf is not valid to check when .user is set. (in fact it aliases
> with the "data" pointer)
>
> Let me know if you want me to resend.
>

no, that's fine..

> On Fri, Jul 26, 2019 at 5:51 AM Karol Herbst <kherbst@redhat.com> wrote:
> >
> > Reviewed-by: Karol Herbst <kherbst@redhat.com>
> >
> > On Fri, Jul 26, 2019 at 5:31 AM Ilia Mirkin <imirkin@alum.mit.edu> wrote:
> > >
> > > Previously the code only handled it for positions 1 and up (as would be
> > > for UBO's in GL). It's not a lot of trouble to handle this, and vl or
> > > vdpau want this.
> > >
> > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111213
> > > Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
> > > Cc: mesa-stable@lists.freedesktop.org
> > > ---
> > >  .../drivers/nouveau/nvc0/nve4_compute.c       | 45 +++++++++++--------
> > >  1 file changed, 27 insertions(+), 18 deletions(-)
> > >
> > > diff --git a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> > > index c5e4dec20bd..a1c40d1e6b9 100644
> > > --- a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> > > +++ b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> > > @@ -393,23 +393,24 @@ nve4_compute_validate_constbufs(struct nvc0_context *nvc0)
> > >              uint64_t address
> > >                 = nvc0->screen->uniform_bo->offset + NVC0_CB_AUX_INFO(s);
> > >
> > > -            assert(i > 0); /* we really only want uniform buffer objects */
> > > -
> > > -            BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
> > > -            PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > > -            PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > > -            BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
> > > -            PUSH_DATA (push, 4 * 4);
> > > -            PUSH_DATA (push, 0x1);
> > > -            BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
> > > -            PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
> > > -
> > > -            PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
> > > -            PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
> > > -            PUSH_DATA (push, nvc0->constbuf[5][i].size);
> > > -            PUSH_DATA (push, 0);
> > > -            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
> > > +            /* constbufs above 0 will are fetched via ubo info in the shader */
> > > +            if (i > 0) {
> > > +               BEGIN_NVC0(push, NVE4_CP(UPLOAD_DST_ADDRESS_HIGH), 2);
> > > +               PUSH_DATAh(push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > > +               PUSH_DATA (push, address + NVC0_CB_AUX_UBO_INFO(i - 1));
> > > +               BEGIN_NVC0(push, NVE4_CP(UPLOAD_LINE_LENGTH_IN), 2);
> > > +               PUSH_DATA (push, 4 * 4);
> > > +               PUSH_DATA (push, 0x1);
> > > +               BEGIN_1IC0(push, NVE4_CP(UPLOAD_EXEC), 1 + 4);
> > > +               PUSH_DATA (push, NVE4_COMPUTE_UPLOAD_EXEC_LINEAR | (0x20 << 1));
> > > +
> > > +               PUSH_DATA (push, res->address + nvc0->constbuf[s][i].offset);
> > > +               PUSH_DATAh(push, res->address + nvc0->constbuf[s][i].offset);
> > > +               PUSH_DATA (push, nvc0->constbuf[s][i].size);
> > > +               PUSH_DATA (push, 0);
> > > +            }
> > >
> > > +            BCTX_REFN(nvc0->bufctx_cp, CP_CB(i), res, RD);
> > >              res->cb_bindings[s] |= 1 << i;
> > >           }
> > >        }
> > > @@ -554,9 +555,9 @@ nve4_compute_derive_cache_split(struct nvc0_context *nvc0, uint32_t shared_size)
> > >  static void
> > >  nve4_compute_setup_buf_cb(struct nvc0_context *nvc0, bool gp100, void *desc)
> > >  {
> > > -   // only user constant buffers 1-6 can be put in the descriptor, the rest are
> > > +   // only user constant buffers 0-6 can be put in the descriptor, the rest are
> > >     // loaded through global memory
> > > -   for (int i = 1; i <= 6; i++) {
> > > +   for (int i = 0; i <= 6; i++) {
> > >        if (nvc0->constbuf[5][i].user || !nvc0->constbuf[5][i].u.buf)
> > >           continue;
> > >
> > > @@ -609,6 +610,10 @@ nve4_compute_setup_launch_desc(struct nvc0_context *nvc0,
> > >     if (nvc0->constbuf[5][0].user || cp->parm_size) {
> > >        nve4_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
> > >                                   NVC0_CB_USR_INFO(5), 1 << 16);
> > > +
> > > +      // Later logic will attempt to bind a real buffer at position 0. That
> > > +      // should not happen if we've bound a user buffer.
> > > +      assert(!nvc0->constbuf[5][0].u.buf);
> > >     }
> > >     nve4_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
> > >                                NVC0_CB_AUX_INFO(5), 1 << 11);
> > > @@ -649,6 +654,10 @@ gp100_compute_setup_launch_desc(struct nvc0_context *nvc0,
> > >     if (nvc0->constbuf[5][0].user || cp->parm_size) {
> > >        gp100_cp_launch_desc_set_cb(desc, 0, screen->uniform_bo,
> > >                                    NVC0_CB_USR_INFO(5), 1 << 16);
> > > +
> > > +      // Later logic will attempt to bind a real buffer at position 0. That
> > > +      // should not happen if we've bound a user buffer.
> > > +      assert(!nvc0->constbuf[5][0].u.buf);
> > >     }
> > >     gp100_cp_launch_desc_set_cb(desc, 7, screen->uniform_bo,
> > >                                 NVC0_CB_AUX_INFO(5), 1 << 11);
> > > --
> > > 2.21.0
> > >
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev