swr/rast: split gen_knobs templates into .h/.cpp
authorTim Rowley <timothy.o.rowley@intel.com>
Mon, 31 Jul 2017 22:22:12 +0000 (17:22 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Wed, 2 Aug 2017 16:39:33 +0000 (11:39 -0500)
Switch to a 1:1 mapping template:generated for future maintenance.

Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/Makefile.am
src/gallium/drivers/swr/SConscript
src/gallium/drivers/swr/rasterizer/codegen/gen_knobs.py
src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp
src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.h [new file with mode: 0644]

index 73fe904a7d59ba20e1d851d7b6f05b612f412fd7..b20f128bd2bdb8017ff88f5101f690115a857e84 100644 (file)
@@ -115,7 +115,7 @@ rasterizer/codegen/gen_knobs.cpp: rasterizer/codegen/gen_knobs.py rasterizer/cod
                --output rasterizer/codegen/gen_knobs.cpp \
                --gen_cpp
 
-rasterizer/codegen/gen_knobs.h: rasterizer/codegen/gen_knobs.py rasterizer/codegen/knob_defs.py rasterizer/codegen/templates/gen_knobs.cpp rasterizer/codegen/gen_common.py
+rasterizer/codegen/gen_knobs.h: rasterizer/codegen/gen_knobs.py rasterizer/codegen/knob_defs.py rasterizer/codegen/templates/gen_knobs.h rasterizer/codegen/gen_common.py
        $(MKDIR_GEN)
        $(PYTHON_GEN) \
                $(srcdir)/rasterizer/codegen/gen_knobs.py \
@@ -347,5 +347,6 @@ EXTRA_DIST = \
        rasterizer/codegen/templates/gen_builder.hpp \
        rasterizer/codegen/templates/gen_header_init.hpp \
        rasterizer/codegen/templates/gen_knobs.cpp \
+       rasterizer/codegen/templates/gen_knobs.h \
        rasterizer/codegen/templates/gen_llvm.hpp \
        rasterizer/codegen/templates/gen_rasterizer.cpp
index c578d7a648f48ded906b277b8a8380bc5fbe4c05..b394cbc17e349a982e4062ab265d4113b9935709 100644 (file)
@@ -54,7 +54,7 @@ env.CodeGenerate(
     command = python_cmd + ' $SCRIPT --output $TARGET --gen_h'
 )
 Depends('rasterizer/codegen/gen_knobs.h',
-        swrroot + 'rasterizer/codegen/templates/gen_knobs.cpp')
+        swrroot + 'rasterizer/codegen/templates/gen_knobs.h')
 
 env.CodeGenerate(
     target = 'rasterizer/jitter/gen_state_llvm.h',
index 2c271c7f5c54554bdc559a2260f002e10e81f21c..33f62a28ceb23b285137956e8f6d05bfa04d41fe 100644 (file)
@@ -37,27 +37,25 @@ def main(args=sys.argv[1:]):
     args = parser.parse_args()
 
     cur_dir = os.path.dirname(os.path.abspath(__file__))
-    template_file = os.path.join(cur_dir, 'templates', 'gen_knobs.cpp')
+    template_cpp = os.path.join(cur_dir, 'templates', 'gen_knobs.cpp')
+    template_h = os.path.join(cur_dir, 'templates', 'gen_knobs.h')
 
     if args.gen_h:
         MakoTemplateWriter.to_file(
-            template_file,
+            template_h,
             args.output,
             cmdline=sys.argv,
             filename='gen_knobs',
-            knobs=knob_defs.KNOBS,
-            includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
-            gen_header=True)
+            knobs=knob_defs.KNOBS)
 
     if args.gen_cpp:
         MakoTemplateWriter.to_file(
-            template_file,
+            template_cpp,
             args.output,
             cmdline=sys.argv,
             filename='gen_knobs',
             knobs=knob_defs.KNOBS,
-            includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
-            gen_header=False)
+            includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'])
 
     return 0
 
index a9506434c62c0fc5840fc4718354060ca7856c9f..2f4c47a92e8f3b61c8a6fa84c4fa1c358669fced 100644 (file)
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 *
-% if gen_header:
-* @file ${filename}.h
-% else:
 * @file ${filename}.cpp
-% endif 
 *
 * @brief Dynamic Knobs for Core.
 *
 *
 ******************************************************************************/
 <% calc_max_knob_len(knobs) %>
-%if gen_header:
-#pragma once
-#include <string>
-
-struct KnobBase
-{
-private:
-    // Update the input string.
-    static void autoExpandEnvironmentVariables(std::string &text);
-
-protected:
-    // Leave input alone and return new string.
-    static std::string expandEnvironmentVariables(std::string const &input)
-    {
-        std::string text = input;
-        autoExpandEnvironmentVariables(text);
-        return text;
-    }
-
-    template <typename T>
-    static T expandEnvironmentVariables(T const &input)
-    {
-        return input;
-    }
-};
-
-template <typename T>
-struct Knob : KnobBase
-{
-public:
-    const   T&  Value() const               { return m_Value; }
-    const   T&  Value(T const &newValue)
-    {
-        m_Value = expandEnvironmentVariables(newValue);
-        return Value();
-    }
-
-protected:
-    Knob(T const &defaultValue) :
-        m_Value(expandEnvironmentVariables(defaultValue))
-    {
-    }
-
-private:
-    T m_Value;
-};
-
-#define DEFINE_KNOB(_name, _type, _default)                     \\
-
-    struct Knob_##_name : Knob<_type>                           \\
-
-    {                                                           \\
-
-        Knob_##_name() : Knob<_type>(_default) { }              \\
-
-        static const char* Name() { return "KNOB_" #_name; }    \\
-
-    } _name;
-
-#define GET_KNOB(_name)             g_GlobalKnobs._name.Value()
-#define SET_KNOB(_name, _newValue)  g_GlobalKnobs._name.Value(_newValue)
-
-struct GlobalKnobs
-{
-    % for knob in knobs:
-    //-----------------------------------------------------------
-    // KNOB_${knob[0]}
-    //
-    % for line in knob[1]['desc']:
-    // ${line}
-    % endfor
-    % if knob[1].get('choices'):
-    <%
-    choices = knob[1].get('choices')
-    _max_len = calc_max_name_len(choices) %>//
-    % for i in range(len(choices)):
-    //     ${choices[i]['name']}${space_name(choices[i]['name'], _max_len)} = ${format(choices[i]['value'], '#010x')}
-    % endfor
-    % endif
-    //
-    % if knob[1]['type'] == 'std::string':
-    DEFINE_KNOB(${knob[0]}, ${knob[1]['type']}, "${repr(knob[1]['default'])[1:-1]}");
-    % else:
-    DEFINE_KNOB(${knob[0]}, ${knob[1]['type']}, ${knob[1]['default']});
-    % endif
-
-    % endfor
-    GlobalKnobs();
-    std::string ToString(const char* optPerLinePrefix="");
-};
-extern GlobalKnobs g_GlobalKnobs;
-
-#undef DEFINE_KNOB
-
-% for knob in knobs:
-#define KNOB_${knob[0]}${space_knob(knob[0])} GET_KNOB(${knob[0]})
-% endfor
-
-% else:
 % for inc in includes:
 #include <${inc}>
 % endfor
@@ -233,9 +130,6 @@ std::string GlobalKnobs::ToString(const char* optPerLinePrefix)
 
     return str.str();
 }
-
-% endif
-
 <%!
     # Globally available python 
     max_len = 0
@@ -262,6 +156,4 @@ std::string GlobalKnobs::ToString(const char* optPerLinePrefix)
     def space_name(name, max_len):
         name_len = len(name)
         return ' '*(max_len - name_len)
-
-
 %>
diff --git a/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.h b/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.h
new file mode 100644 (file)
index 0000000..b02870b
--- /dev/null
@@ -0,0 +1,157 @@
+/******************************************************************************
+* Copyright (C) 2015-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"),
+* 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
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice (including the next
+* 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
+* 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
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+* IN THE SOFTWARE.
+*
+* @file ${filename}.h
+*
+* @brief Dynamic Knobs for Core.
+*
+* ======================= AUTO GENERATED: DO NOT EDIT !!! ====================
+*
+* Generation Command Line:
+*  ${'\n*    '.join(cmdline)}
+*
+******************************************************************************/
+<% calc_max_knob_len(knobs) %>
+#pragma once
+#include <string>
+
+struct KnobBase
+{
+private:
+    // Update the input string.
+    static void autoExpandEnvironmentVariables(std::string &text);
+
+protected:
+    // Leave input alone and return new string.
+    static std::string expandEnvironmentVariables(std::string const &input)
+    {
+        std::string text = input;
+        autoExpandEnvironmentVariables(text);
+        return text;
+    }
+
+    template <typename T>
+    static T expandEnvironmentVariables(T const &input)
+    {
+        return input;
+    }
+};
+
+template <typename T>
+struct Knob : KnobBase
+{
+public:
+    const   T&  Value() const               { return m_Value; }
+    const   T&  Value(T const &newValue)
+    {
+        m_Value = expandEnvironmentVariables(newValue);
+        return Value();
+    }
+
+protected:
+    Knob(T const &defaultValue) :
+        m_Value(expandEnvironmentVariables(defaultValue))
+    {
+    }
+
+private:
+    T m_Value;
+};
+
+#define DEFINE_KNOB(_name, _type, _default)                     \\
+
+    struct Knob_##_name : Knob<_type>                           \\
+
+    {                                                           \\
+
+        Knob_##_name() : Knob<_type>(_default) { }              \\
+
+        static const char* Name() { return "KNOB_" #_name; }    \\
+
+    } _name;
+
+#define GET_KNOB(_name)             g_GlobalKnobs._name.Value()
+#define SET_KNOB(_name, _newValue)  g_GlobalKnobs._name.Value(_newValue)
+
+struct GlobalKnobs
+{
+    % for knob in knobs:
+    //-----------------------------------------------------------
+    // KNOB_${knob[0]}
+    //
+    % for line in knob[1]['desc']:
+    // ${line}
+    % endfor
+    % if knob[1].get('choices'):
+    <%
+    choices = knob[1].get('choices')
+    _max_len = calc_max_name_len(choices) %>//
+    % for i in range(len(choices)):
+    //     ${choices[i]['name']}${space_name(choices[i]['name'], _max_len)} = ${format(choices[i]['value'], '#010x')}
+    % endfor
+    % endif
+    //
+    % if knob[1]['type'] == 'std::string':
+    DEFINE_KNOB(${knob[0]}, ${knob[1]['type']}, "${repr(knob[1]['default'])[1:-1]}");
+    % else:
+    DEFINE_KNOB(${knob[0]}, ${knob[1]['type']}, ${knob[1]['default']});
+    % endif
+
+    % endfor
+    GlobalKnobs();
+    std::string ToString(const char* optPerLinePrefix="");
+};
+extern GlobalKnobs g_GlobalKnobs;
+
+#undef DEFINE_KNOB
+
+% for knob in knobs:
+#define KNOB_${knob[0]}${space_knob(knob[0])} GET_KNOB(${knob[0]})
+% endfor
+
+<%!
+    # Globally available python 
+    max_len = 0
+    def calc_max_knob_len(knobs):
+        global max_len
+        max_len = 0
+        for knob in knobs:
+            if len(knob[0]) > max_len: max_len = len(knob[0])
+        max_len += len('KNOB_ ')
+        if max_len % 4: max_len += 4 - (max_len % 4)
+
+    def space_knob(knob):
+        knob_len = len('KNOB_' + knob)
+        return ' '*(max_len - knob_len)
+
+    def calc_max_name_len(choices_array):
+        _max_len = 0
+        for choice in choices_array:
+            if len(choice['name']) > _max_len: _max_len = len(choice['name'])
+
+        if _max_len % 4: _max_len += 4 - (_max_len % 4)
+        return _max_len
+
+    def space_name(name, max_len):
+        name_len = len(name)
+        return ' '*(max_len - name_len)
+%>