[vulkan] Allow custom logic in guest to access encoder/resourcetracker

bug: 120118806

Change-Id: I8cae783cc6f17b30375d41e8e856d7acafb74dfa
diff --git a/registry/vulkan/xml/cereal/common/vulkantypes.py b/registry/vulkan/xml/cereal/common/vulkantypes.py
index d19d14b..da98429 100644
--- a/registry/vulkan/xml/cereal/common/vulkantypes.py
+++ b/registry/vulkan/xml/cereal/common/vulkantypes.py
@@ -125,6 +125,7 @@
 
 CUSTOM_CREATE_APIS = [
     "vkAllocateMemory",
+    "vkCreateDevice",
 ]
 
 EXCLUDED_APIS = [
@@ -440,7 +441,7 @@
         return res
 
     def getRetVarExpr(self):
-        if self.retType == "void":
+        if self.retType.typeName == "void":
             return None
         return "%s_%s_return" % (self.name, self.retType.typeName)
 
diff --git a/registry/vulkan/xml/cereal/encoder.py b/registry/vulkan/xml/cereal/encoder.py
index 59542d5..b6cc1ff 100644
--- a/registry/vulkan/xml/cereal/encoder.py
+++ b/registry/vulkan/xml/cereal/encoder.py
@@ -101,11 +101,18 @@
         lambda vtype: typeInfo.isHandleType(vtype.typeName)
     ))
 
+def custom_encoder_args(api):
+    params = ["this"]
+    if api.getRetVarExpr() is not None:
+        params.append(api.getRetVarExpr())
+    return params
+
 def emit_custom_create(typeInfo, api, cgen):
     if api.name in CUSTOM_CREATE_APIS:
         cgen.funcCall(
             None,
             "goldfish_" + api.name,
+            custom_encoder_args(api) + \
             [p.paramName for p in api.parameters])
 
 def emit_handlemap_destroy(typeInfo, param, cgen):
@@ -195,6 +202,9 @@
             cgen.stmt(
                 "%s->unsetHandleMapping()" % STREAM)
 
+def emit_custom_create_destroy(typeInfo, api, cgen):
+    encodingParams = EncodingParameters(api)
+
     for p in encodingParams.toCreate:
         emit_custom_create(typeInfo, api, cgen)
 
@@ -228,10 +238,15 @@
     emit_parameter_encode_do_parameter_write(typeInfo, api, cgen)
     emit_parameter_encode_read(typeInfo, api, cgen)
     emit_return_unmarshal(typeInfo, api, cgen)
+    emit_custom_create_destroy(typeInfo, api, cgen)
     emit_return(typeInfo, api, cgen)
 
 def emit_only_goldfish_custom(typeInfo, api, cgen):
-    cgen.vkApiCall(api, customPrefix="goldfish_")
+    cgen.vkApiCall( \
+        api,
+        customPrefix="goldfish_",
+        customParameters=custom_encoder_args(api) + \
+            [p.paramName for p in api.parameters])
     emit_return(typeInfo, api, cgen)
 
 ## Custom encoding definitions##################################################