From 1df7cd871224adeca1d0491c061a16fe4e6d28bc Mon Sep 17 00:00:00 2001 From: Adrienne Walker Date: Wed, 18 Apr 2018 13:46:25 -0700 Subject: Reland "Add stub gpu workaround generators" This is a reland of 94d25b970b97c68ddd0b4ceb71f2233aac05e6b5 Original change's description: > Add stub gpu workaround generators > > Like https://chromium-review.googlesource.com/c/chromium/src/+/1005362, > this patch adds a way for Chrome and Skia to share a set of driver > workaround names so that they can be turned on by Chrome (or Skia) as > needed. > > To avoid weird cross-repository dependencies, the generator script is > duplicated in Skia. > > This patch just adds a few dummy workaround names to make sure the build > process is working. The followup to this is to add workaround init > to GrContext/GrContextOptions and to start implementing individual > workarounds. > > Implementing these workarounds is to support Chrome's "out of process > raster" which will use Ganesh without a command buffer, and so will not > have the workarounds that the command buffer provides. > > Bug: chromium:829614 > Change-Id: I40745a777a95805995991fedb81657ae418b52d9 > Reviewed-on: https://skia-review.googlesource.com/120608 > Reviewed-by: Brian Salomon > Commit-Queue: Adrienne Walker Bug: chromium:829614 Change-Id: Idb3309ffa894f7585ee493388b56565e9d4a3101 Reviewed-on: https://skia-review.googlesource.com/122800 Auto-Submit: Adrienne Walker Commit-Queue: Brian Salomon Reviewed-by: Brian Salomon --- tools/build_workaround_header.py | 69 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 tools/build_workaround_header.py (limited to 'tools/build_workaround_header.py') diff --git a/tools/build_workaround_header.py b/tools/build_workaround_header.py new file mode 100755 index 0000000000..b8558326ad --- /dev/null +++ b/tools/build_workaround_header.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# Copyright (c) 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""code generator for gpu workaround definitions""" + +import os +import os.path +import sys +from optparse import OptionParser + +_LICENSE = """// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +""" + +_DO_NOT_EDIT_WARNING = ("// This file is auto-generated from\n" + + "// " + __file__ + "\n" + + "// DO NOT EDIT!\n\n") + +def merge_files_into_workarounds(files): + workarounds = set() + for filename in files: + with open(filename, 'r') as f: + workarounds.update([workaround.strip() for workaround in f]) + return sorted(list(workarounds)) + + +def write_header(filename, workarounds): + max_workaround_len = len(max(workarounds, key=len)) + + with open(filename, 'w') as f: + f.write(_LICENSE) + f.write(_DO_NOT_EDIT_WARNING) + + indent = ' ' + macro = 'GPU_OP' + + # length of max string passed to write + 1 + max_len = len(indent) + len(macro) + 1 + max_workaround_len + 1 + 1 + write = lambda line: f.write(line + ' ' * (max_len - len(line)) + '\\\n') + + write('#define GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)') + for w in workarounds: + write(indent + macro + '(' + w.upper() + ',') + write(indent + ' ' * (len(macro) + 1) + w + ')') + + # one extra line to consume the the last \ + f.write('// The End\n') + + +def main(argv): + usage = "usage: %prog [options] file1 file2 file3 etc" + parser = OptionParser(usage=usage) + parser.add_option( + "--output-file", + dest="output_file", + default="gpu_driver_bug_workaround_autogen.h", + help="the name of the header file to write") + + (options, _) = parser.parse_args(args=argv) + + workarounds = merge_files_into_workarounds(parser.largs) + write_header(options.output_file, workarounds) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) -- cgit v1.2.3