If we have more programs than what we can store, aubinator_error_decode will assert. Instead let's have a rolling window of programs.
Signed-off-by: Lionel Landwerlin <[email protected]> --- src/intel/tools/aubinator_error_decode.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/intel/tools/aubinator_error_decode.c b/src/intel/tools/aubinator_error_decode.c index 636f56a3365..42cc6994353 100644 --- a/src/intel/tools/aubinator_error_decode.c +++ b/src/intel/tools/aubinator_error_decode.c @@ -47,6 +47,8 @@ #define GREEN_HEADER CSI "1;42m" #define NORMAL CSI "0m" +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + /* options */ static bool option_full_decode = true; @@ -300,7 +302,7 @@ static void decode(struct gen_spec *spec, enabled[1] ? "SIMD16 fragment shader" : enabled[2] ? "SIMD32 fragment shader" : NULL; - programs[num_programs++] = (struct program) { + programs[num_programs++ % ARRAY_SIZE(programs)] = (struct program) { .type = type, .command = inst->name, .command_offset = offset, @@ -309,7 +311,7 @@ static void decode(struct gen_spec *spec, }; } else { if (enabled[0]) /* SIMD8 */ { - programs[num_programs++] = (struct program) { + programs[num_programs++ % ARRAY_SIZE(programs)] = (struct program) { .type = "SIMD8 fragment shader", .command = inst->name, .command_offset = offset, @@ -319,7 +321,7 @@ static void decode(struct gen_spec *spec, }; } if (enabled[1]) /* SIMD16 */ { - programs[num_programs++] = (struct program) { + programs[num_programs++ % ARRAY_SIZE(programs)] = (struct program) { .type = "SIMD16 fragment shader", .command = inst->name, .command_offset = offset, @@ -328,7 +330,7 @@ static void decode(struct gen_spec *spec, }; } if (enabled[2]) /* SIMD32 */ { - programs[num_programs++] = (struct program) { + programs[num_programs++ % ARRAY_SIZE(programs)] = (struct program) { .type = "SIMD32 fragment shader", .command = inst->name, .command_offset = offset, @@ -375,7 +377,7 @@ static void decode(struct gen_spec *spec, NULL; if (is_enabled) { - programs[num_programs++] = (struct program) { + programs[num_programs++ % ARRAY_SIZE(programs)] = (struct program) { .type = type, .command = inst->name, .command_offset = offset, @@ -384,8 +386,6 @@ static void decode(struct gen_spec *spec, }; } } - - assert(num_programs < MAX_NUM_PROGRAMS); } } @@ -593,7 +593,7 @@ read_data_file(FILE *file) if (strcmp(buffer_name, "user") == 0) { printf("Disassembly of programs in instruction buffer at " "0x%08"PRIx64":\n", gtt_offset); - for (int i = 0; i < num_programs; i++) { + for (int i = 0; i < MIN(ARRAY_SIZE(programs), num_programs); i++) { if (programs[i].instruction_base_address == gtt_offset) { printf("\n%s (specified by %s at batch offset " "0x%08"PRIx64") at offset 0x%08"PRIx64"\n", -- 2.14.1 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
