[Mesa-dev] [PATCH v3 04/12] nvc0: store ubo info to the driver constbuf on Kepler
Ilia Mirkin
imirkin at alum.mit.edu
Fri Apr 1 17:14:15 UTC 2016
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
On Fri, Apr 1, 2016 at 12:56 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> .../drivers/nouveau/codegen/nv50_ir_driver.h | 1 +
> src/gallium/drivers/nouveau/nvc0/nvc0_context.h | 3 +++
> src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 1 +
> src/gallium/drivers/nouveau/nvc0/nve4_compute.c | 26 +++++++++++++++++++++-
> 4 files changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h
> index 54c53c9..c7f8567 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h
> @@ -181,6 +181,7 @@ struct nv50_ir_prog_info
> uint16_t sampleInfoBase; /* base address for sample positions */
> uint8_t msInfoCBSlot; /* cX[] used for multisample info */
> uint16_t msInfoBase; /* base address for multisample info */
> + uint16_t uboInfoBase; /* base address for compute UBOs (gk104+) */
> } io;
>
> /* driver callback to assign input/output locations */
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_context.h b/src/gallium/drivers/nouveau/nvc0/nvc0_context.h
> index a753e1f..63a4d9e 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_context.h
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_context.h
> @@ -119,6 +119,9 @@
> /* 8 user clip planes, at 4 32-bits floats each */
> #define NVC0_CB_AUX_UCP_INFO 0x100
> #define NVC0_CB_AUX_UCP_SIZE (PIPE_MAX_CLIP_PLANES * 4 * 4)
> +/* 13 ubos, at 4 32-bits integer each */
> +#define NVC0_CB_AUX_UBO_INFO(i) 0x100 + (i) * 4 * 4 /* CP */
> +#define NVC0_CB_AUX_UBO_SIZE ((NVC0_MAX_PIPE_CONSTBUFS - 1) * 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)
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> index 9df99bd..db02fa2 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> @@ -543,6 +543,7 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset,
> info->io.auxCBSlot = 7;
> info->io.texBindBase = NVC0_CB_AUX_TEX_INFO(0);
> info->prop.cp.gridInfoBase = NVC0_CB_AUX_GRID_INFO;
> + info->io.uboInfoBase = NVC0_CB_AUX_UBO_INFO(0);
> }
> info->io.msInfoCBSlot = 0;
> info->io.msInfoBase = NVC0_CB_AUX_MS_INFO;
> diff --git a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> index 5f34092..b1450f8 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nve4_compute.c
> @@ -336,7 +336,31 @@ nve4_compute_validate_constbufs(struct nvc0_context *nvc0)
> PUSH_DATAp(push, nvc0->constbuf[s][0].u.data, size / 4);
> }
> else {
> - /* TODO: will be updated in the next commit */
> + struct nv04_resource *res =
> + nv04_resource(nvc0->constbuf[s][i].u.buf);
> + if (res) {
> + 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);
> +
> + res->cb_bindings[s] |= 1 << i;
> + }
> }
> }
>
> --
> 2.7.4
>
> _______________________________________________
> 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