[vulkan] Allow Vulkan 1.1 from host (guest codegen, ResourceTracker
changes)
bug: 111137294
Change-Id: I18993bf3bcfae07367f204ddaa64882dbe6b1c79
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index baee1e1..24a5777 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -389,15 +389,16 @@
}
// TODO: Upgrade to 1.1
- static constexpr uint32_t kMaxApiVersion = VK_MAKE_VERSION(1, 0, 65);
+ static constexpr uint32_t kMaxApiVersion = VK_MAKE_VERSION(1, 1, 0);
static constexpr uint32_t kMinApiVersion = VK_MAKE_VERSION(1, 0, 0);
void setInstanceInfo(VkInstance instance,
uint32_t enabledExtensionCount,
- const char* const* ppEnabledExtensionNames) {
+ const char* const* ppEnabledExtensionNames,
+ uint32_t apiVersion) {
AutoLock lock(mLock);
auto& info = info_VkInstance[instance];
- info.highestApiVersion = kMaxApiVersion;
+ info.highestApiVersion = apiVersion;
if (!ppEnabledExtensionNames) return;
@@ -689,16 +690,6 @@
}
}
- VkResult on_vkEnumerateInstanceVersion(
- void*,
- VkResult,
- uint32_t* apiVersion) {
- if (apiVersion) {
- *apiVersion = kMaxApiVersion;
- }
- return VK_SUCCESS;
- }
-
VkResult on_vkEnumerateInstanceExtensionProperties(
void* context,
VkResult,
@@ -983,7 +974,7 @@
}
VkResult on_vkCreateInstance(
- void*,
+ void* context,
VkResult input_result,
const VkInstanceCreateInfo* createInfo,
const VkAllocationCallbacks*,
@@ -991,10 +982,17 @@
if (input_result != VK_SUCCESS) return input_result;
+ VkEncoder* enc = (VkEncoder*)context;
+
+ uint32_t apiVersion;
+ VkResult enumInstanceVersionRes =
+ enc->vkEnumerateInstanceVersion(&apiVersion);
+
setInstanceInfo(
*pInstance,
createInfo->enabledExtensionCount,
- createInfo->ppEnabledExtensionNames);
+ createInfo->ppEnabledExtensionNames,
+ apiVersion);
return input_result;
}
@@ -2855,13 +2853,6 @@
mImpl->setColorBufferFunctions(create, close);
}
-VkResult ResourceTracker::on_vkEnumerateInstanceVersion(
- void* context,
- VkResult input_result,
- uint32_t* apiVersion) {
- return mImpl->on_vkEnumerateInstanceVersion(context, input_result, apiVersion);
-}
-
VkResult ResourceTracker::on_vkEnumerateInstanceExtensionProperties(
void* context,
VkResult input_result,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index c899e52..57eadda 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -47,11 +47,6 @@
GOLDFISH_VK_LIST_HANDLE_TYPES(HANDLE_REGISTER_DECL)
- VkResult on_vkEnumerateInstanceVersion(
- void* context,
- VkResult input_result,
- uint32_t* apiVersion);
-
VkResult on_vkEnumerateInstanceExtensionProperties(
void* context,
VkResult input_result,
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 8eb589d..4261d71 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -9667,9 +9667,31 @@
VkResult VkEncoder::vkEnumerateInstanceVersion(
uint32_t* pApiVersion)
{
- AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion resourceEvent");
+ AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion encode");
+ mImpl->log("start vkEnumerateInstanceVersion");
+ auto stream = mImpl->stream();
+ auto countingStream = mImpl->countingStream();
+ auto resources = mImpl->resources();
+ auto pool = mImpl->pool();
+ stream->setHandleMapping(resources->unwrapMapping());
+ countingStream->rewind();
+ {
+ countingStream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
+ }
+ uint32_t packetSize_vkEnumerateInstanceVersion = 4 + 4 + (uint32_t)countingStream->bytesWritten();
+ countingStream->rewind();
+ uint32_t opcode_vkEnumerateInstanceVersion = OP_vkEnumerateInstanceVersion;
+ stream->write(&opcode_vkEnumerateInstanceVersion, sizeof(uint32_t));
+ stream->write(&packetSize_vkEnumerateInstanceVersion, sizeof(uint32_t));
+ stream->write((uint32_t*)pApiVersion, sizeof(uint32_t));
+ AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion readParams");
+ stream->read((uint32_t*)pApiVersion, sizeof(uint32_t));
+ AEMU_SCOPED_TRACE("vkEnumerateInstanceVersion returnUnmarshal");
VkResult vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
- vkEnumerateInstanceVersion_VkResult_return = mImpl->resources()->on_vkEnumerateInstanceVersion(this, VK_SUCCESS, pApiVersion);
+ stream->read(&vkEnumerateInstanceVersion_VkResult_return, sizeof(VkResult));
+ countingStream->clearPool();
+ stream->clearPool();
+ pool->freeAll();
mImpl->log("finish vkEnumerateInstanceVersion");;
return vkEnumerateInstanceVersion_VkResult_return;
}