From 89b7df552badea9560765dff337232bca213781f Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 11 Apr 2019 13:27:22 -0700 Subject: [PATCH] v3d: Add and use a define for the number of channels in a QPU invocation. A shader invocation always executes 16 channels together, so we often end up multiplying things by this magic 16 number. Give it a name. --- src/broadcom/common/v3d_limits.h | 5 +++++ src/broadcom/compiler/vir.c | 2 +- src/broadcom/compiler/vir_register_allocate.c | 5 +++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/broadcom/common/v3d_limits.h b/src/broadcom/common/v3d_limits.h index e21ee246eff..77684762203 100644 --- a/src/broadcom/common/v3d_limits.h +++ b/src/broadcom/common/v3d_limits.h @@ -24,6 +24,11 @@ #ifndef V3D_LIMITS_H #define V3D_LIMITS_H +/* Number of channels a QPU thread executes in parallel. Also known as + * gl_SubGroupSizeARB. + */ +#define V3D_CHANNELS 16 + #define V3D_MAX_FS_INPUTS 64 #define V3D_MAX_VS_INPUTS 64 diff --git a/src/broadcom/compiler/vir.c b/src/broadcom/compiler/vir.c index 4f83f03c7b2..551542f33bb 100644 --- a/src/broadcom/compiler/vir.c +++ b/src/broadcom/compiler/vir.c @@ -628,7 +628,7 @@ v3d_vs_set_prog_data(struct v3d_compile *c, * batches. */ assert(c->devinfo->vpm_size); - int sector_size = 16 * sizeof(uint32_t) * 8; + int sector_size = V3D_CHANNELS * sizeof(uint32_t) * 8; int vpm_size_in_sectors = c->devinfo->vpm_size / sector_size; int half_vpm = vpm_size_in_sectors / 2; int vpm_output_sectors = half_vpm - prog_data->vpm_input_size; diff --git a/src/broadcom/compiler/vir_register_allocate.c b/src/broadcom/compiler/vir_register_allocate.c index a55b23f74ed..1ffb37f1a38 100644 --- a/src/broadcom/compiler/vir_register_allocate.c +++ b/src/broadcom/compiler/vir_register_allocate.c @@ -205,7 +205,7 @@ v3d_spill_reg(struct v3d_compile *c, int spill_temp) if (!is_uniform) { uint32_t spill_offset = c->spill_size; - c->spill_size += 16 * sizeof(uint32_t); + c->spill_size += V3D_CHANNELS * sizeof(uint32_t); if (spill_offset == 0) v3d_setup_spill_base(c); @@ -624,7 +624,8 @@ v3d_register_allocate(struct v3d_compile *c, bool *spilled) * conformance tests to make sure that spilling works. */ int force_register_spills = 0; - if (c->spill_size < 16 * sizeof(uint32_t) * force_register_spills) { + if (c->spill_size < + V3D_CHANNELS * sizeof(uint32_t) * force_register_spills) { int node = v3d_choose_spill_node(c, g, temp_to_node); if (node != -1) { v3d_spill_reg(c, map[node].temp); -- 2.30.2