aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--layers/CMakeLists.txt7
-rwxr-xr-xxgl-generate.py105
2 files changed, 36 insertions, 76 deletions
diff --git a/layers/CMakeLists.txt b/layers/CMakeLists.txt
index 9e294f9a..b589ba0d 100644
--- a/layers/CMakeLists.txt
+++ b/layers/CMakeLists.txt
@@ -1,15 +1,14 @@
cmake_minimum_required (VERSION 2.8.11)
# NOTE : Initially generating helper files to both source and BIN dir to support checked-in and generated layers, need a better way to do this.
-add_custom_command(OUTPUT generic_layer.c xgl_enum_string_helper.h xgl_struct_string_helper.h api_dump.c
- COMMAND ${PROJECT_SOURCE_DIR}/xgl-generate.py generic-layer > generic_layer.c
+add_custom_command(OUTPUT xgl_enum_string_helper.h xgl_struct_string_helper.h api_dump.c
+ COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py generic-layer > generic_layer.c
COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_enum_string_helper ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${CMAKE_BINARY_DIR}/layers
COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_struct_wrappers ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${CMAKE_BINARY_DIR}/layers
COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_enum_string_helper ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${PROJECT_SOURCE_DIR}/layers
COMMAND ${PROJECT_SOURCE_DIR}/xgl-helper.py --gen_struct_wrappers ${PROJECT_SOURCE_DIR}/include/xgl.h --abs_out_dir ${PROJECT_SOURCE_DIR}/layers
COMMAND ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py api-dump > api_dump.c
- DEPENDS ${PROJECT_SOURCE_DIR}/xgl-generate.py
- ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py
+ DEPENDS ${PROJECT_SOURCE_DIR}/xgl-layer-generate.py
${PROJECT_SOURCE_DIR}/xgl-helper.py
${PROJECT_SOURCE_DIR}/xgl.py)
diff --git a/xgl-generate.py b/xgl-generate.py
index e8b35a33..9f58dd36 100755
--- a/xgl-generate.py
+++ b/xgl-generate.py
@@ -108,71 +108,44 @@ class Subcommand(object):
%s;
};""" % ";\n ".join(entries)
- def _generate_dispatch_entrypoints(self, qual="", unwrap=False, layer=False):
+ def _generate_dispatch_entrypoints(self, qual="", unwrap=False):
if qual:
qual += " "
funcs = []
for proto in self.protos:
- if not layer:
- if not xgl.is_dispatchable(proto):
- continue
- decl = proto.c_func(prefix="xgl", attr="XGLAPI")
- stmt = "(*disp)->%s" % proto.c_call()
- if proto.ret != "XGL_VOID":
- stmt = "return " + stmt
- if proto.name == "CreateDevice" and qual == "LOADER_EXPORT ":
- funcs.append("%s%s\n"
- "{\n"
- " ActivateLayers(%s, %s);\n"
- " XGL_BASE_LAYER_OBJECT* wrapped_obj = (XGL_BASE_LAYER_OBJECT*)%s;\n"
- " const XGL_LAYER_DISPATCH_TABLE * const *disp =\n"
- " (const XGL_LAYER_DISPATCH_TABLE * const *) wrapped_obj->baseObject;\n"
- " %s = wrapped_obj->nextObject;\n"
- " %s;\n"
- "}" % (qual, decl, proto.params[0].name, proto.params[1].name, proto.params[0].name, proto.params[0].name, stmt))
- elif proto.params[0].ty != "XGL_PHYSICAL_GPU":
- funcs.append("%s%s\n"
- "{\n"
- " const XGL_LAYER_DISPATCH_TABLE * const *disp =\n"
- " (const XGL_LAYER_DISPATCH_TABLE * const *) %s;\n"
- " %s;\n"
- "}" % (qual, decl, proto.params[0].name, stmt))
- else:
- funcs.append("%s%s\n"
- "{\n"
- " XGL_BASE_LAYER_OBJECT* wrapped_obj = (XGL_BASE_LAYER_OBJECT*)%s;\n"
- " const XGL_LAYER_DISPATCH_TABLE * const *disp =\n"
- " (const XGL_LAYER_DISPATCH_TABLE * const *) wrapped_obj->baseObject;\n"
- " %s = wrapped_obj->nextObject;\n"
- " %s;\n"
- "}" % (qual, decl, proto.params[0].name, proto.params[0].name, stmt))
- elif proto.name != "GetProcAddr" and proto.name != "InitAndEnumerateGpus":
- decl = proto.c_func(prefix="xgl", attr="XGLAPI")
- param0_name = proto.params[0].name
- ret_val = ''
- stmt = ''
- if proto.ret != "XGL_VOID":
- ret_val = "XGL_RESULT result = "
- stmt = " return result;\n"
- if proto.params[0].ty != "XGL_PHYSICAL_GPU":
- funcs.append('%s%s\n'
- '{\n'
- ' %snextTable.%s;\n'
- '%s'
- '}' % (qual, decl, ret_val, proto.c_call(), stmt))
- else:
- c_call = proto.c_call().replace("(" + proto.params[0].name, "((XGL_PHYSICAL_GPU)gpuw->nextObject", 1)
- funcs.append('%s%s\n'
- '{\n'
- ' XGL_BASE_LAYER_OBJECT* gpuw = (XGL_BASE_LAYER_OBJECT *) %s;\n'
- ' printf("At start of layered %s\\n");\n'
- ' pCurObj = gpuw;\n'
- ' pthread_once(&tabOnce, initLayerTable);\n'
- ' %snextTable.%s;\n'
- ' printf("Completed layered %s\\n");\n'
- '%s'
- '}' % (qual, decl, proto.params[0].name, proto.name, ret_val, c_call, proto.name, stmt))
+ if not xgl.is_dispatchable(proto):
+ continue
+ decl = proto.c_func(prefix="xgl", attr="XGLAPI")
+ stmt = "(*disp)->%s" % proto.c_call()
+ if proto.ret != "XGL_VOID":
+ stmt = "return " + stmt
+ if proto.name == "CreateDevice" and qual == "LOADER_EXPORT ":
+ funcs.append("%s%s\n"
+ "{\n"
+ " ActivateLayers(%s, %s);\n"
+ " XGL_BASE_LAYER_OBJECT* wrapped_obj = (XGL_BASE_LAYER_OBJECT*)%s;\n"
+ " const XGL_LAYER_DISPATCH_TABLE * const *disp =\n"
+ " (const XGL_LAYER_DISPATCH_TABLE * const *) wrapped_obj->baseObject;\n"
+ " %s = wrapped_obj->nextObject;\n"
+ " %s;\n"
+ "}" % (qual, decl, proto.params[0].name, proto.params[1].name, proto.params[0].name, proto.params[0].name, stmt))
+ elif proto.params[0].ty != "XGL_PHYSICAL_GPU":
+ funcs.append("%s%s\n"
+ "{\n"
+ " const XGL_LAYER_DISPATCH_TABLE * const *disp =\n"
+ " (const XGL_LAYER_DISPATCH_TABLE * const *) %s;\n"
+ " %s;\n"
+ "}" % (qual, decl, proto.params[0].name, stmt))
+ else:
+ funcs.append("%s%s\n"
+ "{\n"
+ " XGL_BASE_LAYER_OBJECT* wrapped_obj = (XGL_BASE_LAYER_OBJECT*)%s;\n"
+ " const XGL_LAYER_DISPATCH_TABLE * const *disp =\n"
+ " (const XGL_LAYER_DISPATCH_TABLE * const *) wrapped_obj->baseObject;\n"
+ " %s = wrapped_obj->nextObject;\n"
+ " %s;\n"
+ "}" % (qual, decl, proto.params[0].name, proto.params[0].name, stmt))
return "\n\n".join(funcs)
@@ -244,17 +217,6 @@ class LayerDispatchSubcommand(Subcommand):
def generate_body(self):
return self._generate_layer_dispatch_table()
-class GenericLayerSubcommand(Subcommand):
- def generate_header(self):
- return '#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <assert.h>\n#include <pthread.h>\n#include "xglLayer.h"\n\nstatic XGL_LAYER_DISPATCH_TABLE nextTable;\nstatic XGL_BASE_LAYER_OBJECT *pCurObj;\nstatic pthread_once_t tabOnce = PTHREAD_ONCE_INIT;\n'
-
- def generate_body(self):
- body = [self._generate_layer_dispatch_table(),
- self._generate_dispatch_entrypoints("XGL_LAYER_EXPORT", True, True),
- self._generate_layer_gpa_function()]
-
- return "\n\n".join(body)
-
class IcdDispatchTableSubcommand(Subcommand):
def generate_body(self):
return self._generate_icd_dispatch_table()
@@ -340,7 +302,6 @@ def main():
"loader": LoaderSubcommand,
"layer-funcs" : LayerFuncsSubcommand,
"layer-dispatch" : LayerDispatchSubcommand,
- "generic-layer" : GenericLayerSubcommand,
"icd-dispatch-table": IcdDispatchTableSubcommand,
"icd-dispatch-entrypoints": IcdDispatchEntrypointsSubcommand,
"icd-dispatch-dummy-impl": IcdDispatchDummyImplSubcommand,