mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
gfxstream: Clean up the gfxstream_vk device and instance init
Reviewed-by: Serdar Kocdemir <kocdemir@google.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33449>
This commit is contained in:
parent
4e4cfa682d
commit
d926704183
2 changed files with 29 additions and 27 deletions
|
|
@ -331,25 +331,21 @@ VkResult gfxstream_vk_CreateInstance(const VkInstanceCreateInfo* pCreateInfo,
|
|||
vk_free(pAllocator, instance);
|
||||
return vk_error(NULL, result);
|
||||
}
|
||||
uint32_t initialEnabledExtensionCount = pCreateInfo->enabledExtensionCount;
|
||||
const char* const* initialPpEnabledExtensionNames = pCreateInfo->ppEnabledExtensionNames;
|
||||
|
||||
// Full local copy of pCreateInfo
|
||||
VkInstanceCreateInfo localCreateInfo = *pCreateInfo;
|
||||
std::vector<const char*> filteredExts = filteredInstanceExtensionNames(
|
||||
pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames);
|
||||
// Temporarily modify createInfo for the encoder call
|
||||
VkInstanceCreateInfo* mutableCreateInfo = (VkInstanceCreateInfo*)pCreateInfo;
|
||||
mutableCreateInfo->enabledExtensionCount = static_cast<uint32_t>(filteredExts.size());
|
||||
mutableCreateInfo->ppEnabledExtensionNames = filteredExts.data();
|
||||
localCreateInfo.enabledExtensionCount, localCreateInfo.ppEnabledExtensionNames);
|
||||
localCreateInfo.enabledExtensionCount = static_cast<uint32_t>(filteredExts.size());
|
||||
localCreateInfo.ppEnabledExtensionNames = filteredExts.data();
|
||||
|
||||
auto vkEnc = gfxstream::vk::ResourceTracker::getThreadLocalEncoder();
|
||||
result = vkEnc->vkCreateInstance(pCreateInfo, nullptr, &instance->internal_object,
|
||||
result = vkEnc->vkCreateInstance(&localCreateInfo, nullptr, &instance->internal_object,
|
||||
true /* do lock */);
|
||||
if (VK_SUCCESS != result) {
|
||||
vk_free(pAllocator, instance);
|
||||
return vk_error(NULL, result);
|
||||
}
|
||||
// Revert the createInfo the user-set data
|
||||
mutableCreateInfo->enabledExtensionCount = initialEnabledExtensionCount;
|
||||
mutableCreateInfo->ppEnabledExtensionNames = initialPpEnabledExtensionNames;
|
||||
}
|
||||
|
||||
struct vk_instance_dispatch_table dispatch_table;
|
||||
|
|
@ -446,11 +442,11 @@ VkResult gfxstream_vk_CreateDevice(VkPhysicalDevice physicalDevice,
|
|||
* and associated bugs. Mesa VK runtime also checks this, so we have to filter out before
|
||||
* reaches it.
|
||||
*/
|
||||
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT* swapchainMaintenance1Features =
|
||||
VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT* mutableSwapchainMaintenance1Features =
|
||||
vk_find_struct(const_cast<VkDeviceCreateInfo*>(pCreateInfo),
|
||||
PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT);
|
||||
if (swapchainMaintenance1Features) {
|
||||
swapchainMaintenance1Features->swapchainMaintenance1 = VK_FALSE;
|
||||
if (mutableSwapchainMaintenance1Features) {
|
||||
mutableSwapchainMaintenance1Features->swapchainMaintenance1 = VK_FALSE;
|
||||
}
|
||||
|
||||
const VkAllocationCallbacks* pMesaAllocator =
|
||||
|
|
@ -459,19 +455,17 @@ VkResult gfxstream_vk_CreateDevice(VkPhysicalDevice physicalDevice,
|
|||
pMesaAllocator, sizeof(struct gfxstream_vk_device), GFXSTREAM_DEFAULT_ALIGN, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
result = gfxstream_device ? VK_SUCCESS : VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
if (VK_SUCCESS == result) {
|
||||
uint32_t initialEnabledExtensionCount = pCreateInfo->enabledExtensionCount;
|
||||
const char* const* initialPpEnabledExtensionNames = pCreateInfo->ppEnabledExtensionNames;
|
||||
// Full local copy of pCreateInfo
|
||||
VkDeviceCreateInfo localCreateInfo = *pCreateInfo;
|
||||
|
||||
std::vector<const char*> filteredExts = filteredDeviceExtensionNames(
|
||||
pCreateInfo->enabledExtensionCount, pCreateInfo->ppEnabledExtensionNames);
|
||||
// Temporarily modify createInfo for the encoder call
|
||||
VkDeviceCreateInfo* mutableCreateInfo = (VkDeviceCreateInfo*)pCreateInfo;
|
||||
mutableCreateInfo->enabledExtensionCount = static_cast<uint32_t>(filteredExts.size());
|
||||
mutableCreateInfo->ppEnabledExtensionNames = filteredExts.data();
|
||||
localCreateInfo.enabledExtensionCount, localCreateInfo.ppEnabledExtensionNames);
|
||||
localCreateInfo.enabledExtensionCount = static_cast<uint32_t>(filteredExts.size());
|
||||
localCreateInfo.ppEnabledExtensionNames = filteredExts.data();
|
||||
|
||||
/* pNext = VkPhysicalDeviceGroupProperties */
|
||||
std::vector<VkPhysicalDevice> initialPhysicalDeviceList;
|
||||
VkPhysicalDeviceGroupProperties* mutablePhysicalDeviceGroupProperties = vk_find_struct(
|
||||
const_cast<VkDeviceCreateInfo*>(pCreateInfo), PHYSICAL_DEVICE_GROUP_PROPERTIES);
|
||||
VkPhysicalDeviceGroupProperties* mutablePhysicalDeviceGroupProperties = vk_find_struct(&localCreateInfo, PHYSICAL_DEVICE_GROUP_PROPERTIES);
|
||||
if (mutablePhysicalDeviceGroupProperties) {
|
||||
// Temporarily modify the VkPhysicalDeviceGroupProperties structure to use translated
|
||||
// VkPhysicalDevice references for the encoder call
|
||||
|
|
@ -487,12 +481,10 @@ VkResult gfxstream_vk_CreateDevice(VkPhysicalDevice physicalDevice,
|
|||
}
|
||||
|
||||
auto vkEnc = gfxstream::vk::ResourceTracker::getThreadLocalEncoder();
|
||||
result = vkEnc->vkCreateDevice(gfxstream_physicalDevice->internal_object, pCreateInfo,
|
||||
result = vkEnc->vkCreateDevice(gfxstream_physicalDevice->internal_object, &localCreateInfo,
|
||||
pAllocator, &gfxstream_device->internal_object,
|
||||
true /* do lock */);
|
||||
// Revert the createInfo the user-set data
|
||||
mutableCreateInfo->enabledExtensionCount = initialEnabledExtensionCount;
|
||||
mutableCreateInfo->ppEnabledExtensionNames = initialPpEnabledExtensionNames;
|
||||
|
||||
if (mutablePhysicalDeviceGroupProperties) {
|
||||
// Revert the physicalDevice list in VkPhysicalDeviceGroupProperties to the user-set
|
||||
// data
|
||||
|
|
|
|||
|
|
@ -80,6 +80,16 @@ typedef uint64_t zx_koid_t;
|
|||
#include "gfxstream/guest/goldfish_sync.h"
|
||||
#endif
|
||||
|
||||
#define vk_filter_struct(__start, __sType) { \
|
||||
auto* curr = reinterpret_cast<VkBaseOutStructure*>(__start); \
|
||||
while (curr != nullptr) { \
|
||||
if (curr->pNext != nullptr && curr->pNext->sType == VK_STRUCTURE_TYPE_##__sType) { \
|
||||
curr->pNext = curr->pNext->pNext; \
|
||||
} \
|
||||
curr = curr->pNext; \
|
||||
} \
|
||||
} \
|
||||
|
||||
// This should be ABI identical with the variant in ResourceTracker.h
|
||||
struct GfxStreamVkFeatureInfo {
|
||||
bool hasDirectMem;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue