radv,aco: use per-attribute vertex descriptors for robustness
We have to use a different num_records for each attribute to correctly implement robust buffer access. fossil-db (GFX10.3, robustBufferAccess enabled): Totals from 60059 (41.06% of 146267) affected shaders: VGPRs: 2169040 -> 2169024 (-0.00%); split: -0.02%, +0.02% CodeSize: 79473128 -> 81156016 (+2.12%); split: -0.00%, +2.12% MaxWaves: 1635360 -> 1635258 (-0.01%); split: +0.00%, -0.01% Instrs: 15559040 -> 15793205 (+1.51%); split: -0.01%, +1.52% Latency: 90954792 -> 91308768 (+0.39%); split: -0.30%, +0.69% InvThroughput: 14937873 -> 14958761 (+0.14%); split: -0.04%, +0.18% VClause: 444280 -> 412074 (-7.25%); split: -9.22%, +1.97% SClause: 588545 -> 644141 (+9.45%); split: -0.54%, +9.99% Copies: 1010395 -> 1011232 (+0.08%); split: -0.44%, +0.53% Branches: 274279 -> 274282 (+0.00%); split: -0.00%, +0.00% PreSGPRs: 1431171 -> 1405056 (-1.82%); split: -2.89%, +1.07% PreVGPRs: 1575253 -> 1575259 (+0.00%) Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7871>
This commit is contained in:
@@ -447,13 +447,14 @@ static void
|
||||
radv_dump_vertex_descriptors(struct radv_pipeline *pipeline, FILE *f)
|
||||
{
|
||||
void *ptr = (uint64_t *)pipeline->device->trace_id_ptr;
|
||||
uint32_t count = pipeline->num_vertex_bindings;
|
||||
uint32_t count = util_last_bit(pipeline->vb_desc_usage_mask);
|
||||
uint32_t *vb_ptr = &((uint32_t *)ptr)[3];
|
||||
|
||||
if (!count)
|
||||
return;
|
||||
|
||||
fprintf(f, "Num vertex bindings: %d\n", count);
|
||||
fprintf(f, "Num vertex %s: %d\n",
|
||||
pipeline->use_per_attribute_vb_descs ? "attributes" : "bindings", count);
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
uint32_t *desc = &((uint32_t *)vb_ptr)[i * 4];
|
||||
uint64_t va = 0;
|
||||
|
Reference in New Issue
Block a user