[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##################################################