mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-19 13:38:19 +02:00
intel/common has a build dependency on intel/dev so the later should not have any dependendies on the first. So here moving the definition of intel_engine_class to intel_device_info.h because it is used in intel_device_info struct and then including intel_device_info.h in intel_engine.h. Signed-off-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25233>
166 lines
5.2 KiB
Python
Executable file
166 lines
5.2 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
COPYRIGHT = """\
|
|
/*
|
|
* Copyright 2024 Intel Corporation
|
|
*
|
|
* 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, sub license, 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 NON-INFRINGEMENT.
|
|
* IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS 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.
|
|
*/
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from textwrap import indent
|
|
|
|
from mako.template import Template
|
|
from mako import exceptions
|
|
|
|
from intel_device_info import TYPES_BY_NAME, Enum
|
|
|
|
template = COPYRIGHT + """
|
|
|
|
/* DO NOT EDIT - This file generated automatically by intel_device_info_gen_h.py script */
|
|
|
|
#ifndef INTEL_DEVICE_INFO_GEN_H
|
|
#define INTEL_DEVICE_INFO_GEN_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "util/macros.h"
|
|
#include "compiler/shader_enums.h"
|
|
#include "intel/dev/intel_wa.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
<%! import intel_device_info %>
|
|
% for decl in intel_device_info.TYPES:
|
|
% if isinstance(decl, intel_device_info.Define):
|
|
${format_define(decl)}
|
|
% elif isinstance(decl, intel_device_info.Enum) and not decl.external:
|
|
|
|
enum ${decl.name} {
|
|
% for value in decl.values:
|
|
${format_enum_value(value)}
|
|
% endfor
|
|
};
|
|
% elif isinstance(decl, intel_device_info.Struct):
|
|
|
|
struct ${decl.name}
|
|
{
|
|
% for member in decl.members:
|
|
${format_struct_member(member)}
|
|
% endfor
|
|
% if decl.name == "intel_device_info":
|
|
BITSET_DECLARE(workarounds, INTEL_WA_NUM);
|
|
% endif
|
|
};
|
|
% endif
|
|
% endfor
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* INTEL_DEVICE_INFO_GEN_H */
|
|
"""
|
|
|
|
def format_enum_value(v):
|
|
"""
|
|
Routine to format the individual lines within an enum declaration.
|
|
This is inconvenient to implement with mako. Templates are an
|
|
inconvenient tool for conditionally formatting:
|
|
- inline comments
|
|
- "grouped" values as required by intel_platform
|
|
- specific values
|
|
"""
|
|
comment = ""
|
|
if v.comment:
|
|
comment = f" /* {v.comment} */"
|
|
value = ""
|
|
if v.value is not None:
|
|
value = f" = {v.value}"
|
|
decl = f"{v.name}{value},{comment}"
|
|
if v.group_begin:
|
|
decl = f"{decl}\nINTEL_PLATFORM_{v.group_begin}_START = {v.name},"
|
|
if v.group_end:
|
|
decl = f"{decl}\nINTEL_PLATFORM_{v.group_end}_END = {v.name},"
|
|
return indent(decl, " ")
|
|
|
|
def format_define(v):
|
|
"""
|
|
Routine to format the printing of a macro declaration. Conditional
|
|
inline comments are difficult to format in mako.
|
|
"""
|
|
comment = ""
|
|
if v.comment:
|
|
comment = f" /* {v.comment} */"
|
|
return f"#define {v.name} ({v.value}){comment}"
|
|
|
|
def format_struct_member(m):
|
|
"""
|
|
Routine to format the printing of a struct member. Mako templates are not
|
|
helpful in formatting the following aspects of intel_device_info structs:
|
|
- multiline vs single line comments
|
|
- optional array lengths
|
|
- enum / struct member type declarations
|
|
"""
|
|
comment = ""
|
|
if m.comment:
|
|
if "\n" in m.comment:
|
|
comment_lines = [ f" * {line}".rstrip() for line in m.comment.split('\n')]
|
|
comment_lines.insert(0, "\n/**")
|
|
comment_lines.append(" */\n")
|
|
comment = '\n'.join(comment_lines)
|
|
else:
|
|
comment = f"\n/* {m.comment} */\n"
|
|
array = ""
|
|
if m.array:
|
|
array = f"[{m.array}]"
|
|
member_type = m.member_type
|
|
if member_type in TYPES_BY_NAME:
|
|
if isinstance(TYPES_BY_NAME[member_type], Enum):
|
|
member_type = f"enum {member_type}"
|
|
else:
|
|
member_type = f"struct {member_type}"
|
|
return indent(f"{comment}{member_type} {m.name}{array};", " ")
|
|
|
|
def main():
|
|
"""print intel_device_info_gen.h at the specified path"""
|
|
if len(sys.argv) > 1:
|
|
outf = open(sys.argv[1], 'w', encoding='utf-8')
|
|
else:
|
|
outf = sys.stdout
|
|
|
|
try:
|
|
outf.write(Template(template).render(format_enum_value=format_enum_value,
|
|
format_struct_member=format_struct_member,
|
|
format_define=format_define))
|
|
except:
|
|
# provide some debug information to the user
|
|
print(exceptions.text_error_template().render(format_enum_value=format_enum_value,
|
|
format_struct_member=format_struct_member,
|
|
format_define=format_define))
|
|
sys.exit(1)
|
|
outf.close()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|