[Mesa-dev] [PATCH 1/8] swr/rast: Split backend.cpp to improve compile time
Rowley, Timothy O
timothy.o.rowley at intel.com
Mon Jun 26 16:14:25 UTC 2017
On Jun 26, 2017, at 7:57 AM, Emil Velikov <emil.l.velikov at gmail.com<mailto:emil.l.velikov at gmail.com>> wrote:
Hi Tim,
On 22 June 2017 at 22:13, Tim Rowley <timothy.o.rowley at intel.com<mailto:timothy.o.rowley at intel.com>> wrote:
Hardcode split to four files currently. Decreases swr build
time on a quad-core by ~10%.
---
src/gallium/drivers/swr/Makefile.am | 26 +-
src/gallium/drivers/swr/Makefile.sources | 4 +
src/gallium/drivers/swr/SConscript | 19 +-
.../drivers/swr/rasterizer/codegen/gen_backends.py | 38 +-
.../drivers/swr/rasterizer/codegen/gen_common.py | 7 +
.../rasterizer/codegen/templates/gen_backend.cpp | 1 +
.../codegen/templates/gen_header_init.hpp | 43 +
src/gallium/drivers/swr/rasterizer/core/api.cpp | 7 +-
.../drivers/swr/rasterizer/core/backend.cpp | 809 +--------------
src/gallium/drivers/swr/rasterizer/core/backend.h | 1033 +------------------
.../drivers/swr/rasterizer/core/backend_clear.cpp | 281 ++++++
.../drivers/swr/rasterizer/core/backend_impl.h | 1067 ++++++++++++++++++++
.../drivers/swr/rasterizer/core/backend_sample.cpp | 345 +++++++
.../swr/rasterizer/core/backend_singlesample.cpp | 321 ++++++
14 files changed, 2160 insertions(+), 1841 deletions(-)
create mode 100644 src/gallium/drivers/swr/rasterizer/codegen/templates/gen_header_init.hpp
create mode 100644 src/gallium/drivers/swr/rasterizer/core/backend_clear.cpp
create mode 100644 src/gallium/drivers/swr/rasterizer/core/backend_impl.h
create mode 100644 src/gallium/drivers/swr/rasterizer/core/backend_sample.cpp
create mode 100644 src/gallium/drivers/swr/rasterizer/core/backend_singlesample.cpp
diff --git a/src/gallium/drivers/swr/Makefile.am b/src/gallium/drivers/swr/Makefile.am
index 6650abd..0daec90 100644
--- a/src/gallium/drivers/swr/Makefile.am
+++ b/src/gallium/drivers/swr/Makefile.am
@@ -34,6 +34,7 @@ COMMON_CXXFLAGS = \
$(LLVM_CXXFLAGS) \
$(SWR_CXX11_CXXFLAGS) \
-I$(builddir)/rasterizer/codegen \
+ -I$(builddir)/rasterizer/core \
-I$(builddir)/rasterizer/jitter \
-I$(builddir)/rasterizer/archrast \
-I$(srcdir)/rasterizer \
@@ -62,7 +63,11 @@ BUILT_SOURCES = \
rasterizer/archrast/gen_ar_event.cpp \
rasterizer/archrast/gen_ar_eventhandler.hpp \
rasterizer/archrast/gen_ar_eventhandlerfile.hpp \
- rasterizer/core/gen_BackendPixelRate0.cpp
+ rasterizer/core/backends/gen_BackendPixelRate0.cpp \
+ rasterizer/core/backends/gen_BackendPixelRate1.cpp \
+ rasterizer/core/backends/gen_BackendPixelRate2.cpp \
+ rasterizer/core/backends/gen_BackendPixelRate3.cpp \
+ rasterizer/core/backends/gen_BackendPixelRate.hpp
MKDIR_GEN = $(AM_V_at)$(MKDIR_P) $(@D)
PYTHON_GEN = $(AM_V_GEN)$(PYTHON2) $(PYTHON_FLAGS)
@@ -140,20 +145,30 @@ rasterizer/archrast/gen_ar_eventhandlerfile.hpp: rasterizer/codegen/gen_archrast
--output rasterizer/archrast/gen_ar_eventhandlerfile.hpp \
--gen_eventhandlerfile_h
+rasterizer/core/backends/gen_BackendPixelRate0.cpp \
+rasterizer/core/backends/gen_BackendPixelRate1.cpp \
+rasterizer/core/backends/gen_BackendPixelRate2.cpp \
+rasterizer/core/backends/gen_BackendPixelRate3.cpp \
+rasterizer/core/backends/gen_BackendPixelRate.hpp: \
+backend.intermediate
+
# 5 SWR_MULTISAMPLE_TYPE_COUNT
# 2 SWR_MSAA_SAMPLE_PATTERN_COUNT
# 3 SWR_INPUT_COVERAGE_COUNT
# 2 centroid
# 2 forcedSampleCount
# 2 canEarlyZ
-rasterizer/core/gen_BackendPixelRate0.cpp: rasterizer/codegen/gen_backends.py rasterizer/codegen/templates/gen_backend.cpp
+
+.INTERMEDIATE: backend.intermediate
I have limited experience with .INTERMEDIATE and it didn't seem to
bring single/incremental build times improvements.
Have you seen any on your end? If not I'll just drop it.
I’m not really familiar with .INTERMEDIATE myself; found it when googling around looking for a way to specify a code generator rule that produced multiple files. If there’s a better/cleaner way of doing this I’d like to hear about it.
+backend.intermediate: rasterizer/codegen/gen_backends.py rasterizer/codegen/templates/gen_backend.cpp rasterizer/codegen/templates/gen_header_init.hpp
$(MKDIR_GEN)
$(PYTHON_GEN) \
$(srcdir)/rasterizer/codegen/gen_backends.py \
- --outdir rasterizer/core \
+ --outdir rasterizer/core/backends \
--dim 5 2 3 2 2 2 \
- --split 0 \
- --cpp
+ --numfiles 4 \
+ --cpp \
+ --hpp
Hardcoding file names in generator scripts tends to be a bad idea. One
example is the extra code needed to generate the cmake bits :-)
One could prune that, but it's not a priority AFAICT.
I would like to be able to wildcard on the generated name, but it seems that automake wants to have a static list of filenames at invocation. Our cmake approach internally generates a cmake fragment that is included by the parent cmake, which is a little confusing but adds flexibility.
--- a/src/gallium/drivers/swr/rasterizer/codegen/gen_backends.py
+++ b/src/gallium/drivers/swr/rasterizer/codegen/gen_backends.py
@@ -1,7 +1,7 @@
# Copyright (C) 2017 Intel Corporation. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
+# copy of this software and associated documentation files (the 'Software'),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
@@ -11,7 +11,7 @@
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
@@ -31,23 +31,28 @@ from gen_common import ArgumentParser, MakoTemplateWriter
def main(args=sys.argv[1:]):
thisDir = os.path.dirname(os.path.realpath(__file__))
- parser = ArgumentParser("Generate files and initialization functions for all permutuations of BackendPixelRate.")
- parser.add_argument('--dim', help="gBackendPixelRateTable array dimensions", nargs='+', type=int, required=True)
- parser.add_argument('--outdir', help="output directory", nargs='?', type=str, default=thisDir)
- parser.add_argument('--split', help="how many lines of initialization per file [0=no split]", nargs='?', type=int, default='512')
- parser.add_argument('--cpp', help="Generate cpp file(s)", action='store_true', default=False)
- parser.add_argument('--cmake', help="Generate cmake file", action='store_true', default=False)
+ parser = ArgumentParser('Generate files and initialization functions for all permutuations of BackendPixelRate.')
+ parser.add_argument('--dim', help='gBackendPixelRateTable array dimensions', nargs='+', type=int, required=True)
+ parser.add_argument('--outdir', help='output directory', nargs='?', type=str, default=thisDir)
+ parser.add_argument('--split', help='how many lines of initialization per file [0=no split]', nargs='?', type=int, default='512')
+ parser.add_argument('--numfiles', help='how many output files to generate', nargs='?', type=int, default='0')
+ parser.add_argument('--cpp', help='Generate cpp file(s)', action='store_true', default=False)
+ parser.add_argument('--hpp', help='Generate hpp file', action='store_true', default=False)
+ parser.add_argument('--cmake', help='Generate cmake file', action='store_true', default=False)
Most of the above seem unrelated cleanups/fixes. Please keep them separate.
@@ -95,6 +102,19 @@ def main(args=sys.argv[1:]):
fileNum=fileNum,
funcList=chunkedList[fileNum])
+ if args.hpp:
+ baseHppName = os.path.join(args.outdir, backend.outHeaderName)
+ templateHpp = os.path.join(thisDir, 'templates', backend.hpp_template)
+
+ #print('Generating', filename)
[snip]
# generate gen_backend.cmake file
if args.cmake:
templateCmake = os.path.join(thisDir, 'templates', 'gen_backend.cmake')
@@ -108,7 +128,7 @@ def main(args=sys.argv[1:]):
numFiles=numFiles,
baseCppName='${RASTY_GEN_SRC_DIR}/backends/' + os.path.basename(baseCppName))
- #print("Generated %d template instantiations in %d files" % (len(output_list), numFiles))
+ #print('Generated %d template instantiations in %d files' % (len(output_list), numFiles))
Uncomment these prints or drop them? They don't seem to bring much as-is.
I’ll see about separating out the cleanups (including removing commented debug prints) into a separate changelist.
With the .INTERMEDIATE commente (2-3 lines just above it) or dropped,
the build bits are
Reviewed-by: Emil Velikov <emil.velikov at collabora.com<mailto:emil.velikov at collabora.com>>
-Emil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170626/1b10bba3/attachment-0001.html>
More information about the mesa-dev
mailing list