r600: Stop using ArrayID to look up atomic counters.
Even if you find a matching array ID, you still need to offset by Index compared to .start, so the ArrayID lookup didn't help. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15824>
This commit is contained in:
@@ -36,7 +36,6 @@ KHR-GLES31.core.layout_binding.image2D_layout_binding_imageLoad_FragmentShader,F
|
||||
KHR-GLES31.core.shader_atomic_counters.advanced-usage-many-dispatches,Fail
|
||||
KHR-GLES31.core.shader_atomic_counters.advanced-usage-many-draw-calls2,Fail
|
||||
KHR-GLES31.core.shader_atomic_counters.advanced-usage-multi-stage,Fail
|
||||
KHR-GLES31.core.shader_atomic_counters.advanced-usage-multidim-array-small,Fail
|
||||
|
||||
KHR-GLES31.core.shader_image_load_store.basic-allFormats-loadStoreComputeStage,Fail
|
||||
KHR-GLES31.core.shader_image_load_store.basic-allTargets-loadStoreCS,Fail
|
||||
|
||||
@@ -87,7 +87,6 @@ void print_shader_info(FILE *f , int id, struct r600_shader *shader)
|
||||
PRINT_UINT_ARRAY_ELM(atomics, end);
|
||||
PRINT_UINT_ARRAY_ELM(atomics, buffer_id);
|
||||
PRINT_UINT_ARRAY_ELM(atomics, hw_idx);
|
||||
PRINT_UINT_ARRAY_ELM(atomics, array_id);
|
||||
}
|
||||
|
||||
PRINT_UINT_MEMBER(nhwatomic_ranges);
|
||||
|
||||
@@ -1206,7 +1206,6 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
|
||||
ctx->shader->atomics[i].start = d->Range.First;
|
||||
ctx->shader->atomics[i].end = d->Range.Last;
|
||||
ctx->shader->atomics[i].hw_idx = ctx->shader->atomic_base + ctx->shader->nhwatomic;
|
||||
ctx->shader->atomics[i].array_id = d->Array.ArrayID;
|
||||
ctx->shader->atomics[i].buffer_id = d->Dim.Index2D;
|
||||
ctx->shader->nhwatomic_ranges++;
|
||||
ctx->shader->nhwatomic += count;
|
||||
@@ -8665,23 +8664,16 @@ static int find_hw_atomic_counter(struct r600_shader_ctx *ctx,
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (src->Register.Indirect) {
|
||||
for (i = 0; i < ctx->shader->nhwatomic_ranges; i++) {
|
||||
if (src->Indirect.ArrayID == ctx->shader->atomics[i].array_id)
|
||||
return ctx->shader->atomics[i].hw_idx;
|
||||
}
|
||||
} else {
|
||||
uint32_t index = src->Register.Index;
|
||||
for (i = 0; i < ctx->shader->nhwatomic_ranges; i++) {
|
||||
if (ctx->shader->atomics[i].buffer_id != (unsigned)src->Dimension.Index)
|
||||
continue;
|
||||
if (index > ctx->shader->atomics[i].end)
|
||||
continue;
|
||||
if (index < ctx->shader->atomics[i].start)
|
||||
continue;
|
||||
uint32_t offset = (index - ctx->shader->atomics[i].start);
|
||||
return ctx->shader->atomics[i].hw_idx + offset;
|
||||
}
|
||||
uint32_t index = src->Register.Index;
|
||||
for (i = 0; i < ctx->shader->nhwatomic_ranges; i++) {
|
||||
if (ctx->shader->atomics[i].buffer_id != (unsigned)src->Dimension.Index)
|
||||
continue;
|
||||
if (index > ctx->shader->atomics[i].end)
|
||||
continue;
|
||||
if (index < ctx->shader->atomics[i].start)
|
||||
continue;
|
||||
uint32_t offset = (index - ctx->shader->atomics[i].start);
|
||||
return ctx->shader->atomics[i].hw_idx + offset;
|
||||
}
|
||||
assert(0);
|
||||
return -1;
|
||||
|
||||
@@ -61,7 +61,6 @@ struct r600_shader_atomic {
|
||||
unsigned start, end;
|
||||
unsigned buffer_id;
|
||||
unsigned hw_idx;
|
||||
unsigned array_id;
|
||||
};
|
||||
|
||||
struct r600_shader {
|
||||
|
||||
Reference in New Issue
Block a user