test_shaders: Add the option to generate diff instead.

Signed-off-by: Sebastián Aedo <saedo@codeweavers.com>
This commit is contained in:
Sebastián Aedo 2021-12-09 13:29:12 -03:00
parent e9cc640334
commit 2bb051206b

View File

@ -629,13 +629,22 @@ def regression_check_reflect(shader, json_file, args):
shutil.move(json_file, reference)
else:
print('Generated reflection json in {} does not match reference {}!'.format(json_file, reference))
with open(json_file, 'r') as f:
print('')
print('Generated:')
print('======================')
print(f.read())
print('======================')
print('')
if args.diff:
diff_path = generate_diff_file(reference, glsl)
with open(diff_path, 'r') as f:
print('')
print('Diff:')
print(f.read())
print('')
remove_file(diff_path)
else:
with open(json_file, 'r') as f:
print('')
print('Generated:')
print('======================')
print(f.read())
print('======================')
print('')
# Otherwise, fail the test. Keep the shader file around so we can inspect.
if not args.keep:
@ -649,6 +658,19 @@ def regression_check_reflect(shader, json_file, args):
make_reference_dir(reference)
shutil.move(json_file, reference)
def generate_diff_file(origin, generated):
diff_destination = create_temporary()
with open(diff_destination, "w") as f:
try:
subprocess.check_call(["diff", origin, generated], stdout=f)
except subprocess.CalledProcessError as e:
# diff returns 1 when the files are different so we can safely
# ignore this case.
if e.returncode != 1:
raise e
return diff_destination
def regression_check(shader, glsl, args):
reference = reference_path(shader[0], shader[1], args.opt)
joined_path = os.path.join(shader[0], shader[1])
@ -665,13 +687,22 @@ def regression_check(shader, glsl, args):
shutil.move(glsl, reference)
else:
print('Generated source code in {} does not match reference {}!'.format(glsl, reference))
with open(glsl, 'r') as f:
print('')
print('Generated:')
print('======================')
print(f.read())
print('======================')
print('')
if args.diff:
diff_path = generate_diff_file(reference, glsl)
with open(diff_path, 'r') as f:
print('')
print('Diff:')
print(f.read())
print('')
remove_file(diff_path)
else:
with open(glsl, 'r') as f:
print('')
print('Generated:')
print('======================')
print(f.read())
print('======================')
print('')
# Otherwise, fail the test. Keep the shader file around so we can inspect.
if not args.keep:
@ -869,6 +900,9 @@ def main():
parser.add_argument('--keep',
action = 'store_true',
help = 'Leave failed GLSL shaders on disk if they fail regression. Useful for debugging.')
parser.add_argument('--diff',
action = 'store_true',
help = 'Displays a diff instead of the generated output on failure. Useful for debugging.')
parser.add_argument('--malisc',
action = 'store_true',
help = 'Use malisc offline compiler to determine static cycle counts before and after spirv-cross.')