mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
synced 2024-11-22 23:04:35 +00:00
VmaReplay: added command line option --VK_KHR_dedicated_allocation.
This commit is contained in:
parent
f17013e699
commit
33c1e8ddef
@ -37,6 +37,7 @@ enum CMD_LINE_OPT
|
||||
CMD_LINE_OPT_LINES,
|
||||
CMD_LINE_OPT_PHYSICAL_DEVICE,
|
||||
CMD_LINE_OPT_USER_DATA,
|
||||
CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION,
|
||||
};
|
||||
|
||||
static enum class VERBOSITY
|
||||
@ -47,6 +48,13 @@ static enum class VERBOSITY
|
||||
COUNT,
|
||||
} g_Verbosity = VERBOSITY::DEFAULT;
|
||||
|
||||
enum class VULKAN_EXTENSION_REQUEST
|
||||
{
|
||||
DISABLED,
|
||||
ENABLED,
|
||||
DEFAULT
|
||||
};
|
||||
|
||||
enum class OBJECT_TYPE { BUFFER, IMAGE };
|
||||
|
||||
enum class VMA_FUNCTION
|
||||
@ -109,6 +117,7 @@ static size_t g_IterationCount = 1;
|
||||
static uint32_t g_PhysicalDeviceIndex = 0;
|
||||
static RangeSequence<size_t> g_LineRanges;
|
||||
static bool g_UserDataEnabled = true;
|
||||
VULKAN_EXTENSION_REQUEST g_VK_KHR_dedicated_allocation_request = VULKAN_EXTENSION_REQUEST::DEFAULT;
|
||||
|
||||
static bool ValidateFileVersion()
|
||||
{
|
||||
@ -274,8 +283,6 @@ static const char* const VALIDATION_LAYER_NAME = "VK_LAYER_LUNARG_standard_valid
|
||||
|
||||
static bool g_MemoryAliasingWarningEnabled = true;
|
||||
static bool g_EnableValidationLayer = true;
|
||||
static bool VK_KHR_get_memory_requirements2_enabled = false;
|
||||
static bool VK_KHR_dedicated_allocation_enabled = false;
|
||||
|
||||
static VKAPI_ATTR VkBool32 VKAPI_CALL MyDebugReportCallback(
|
||||
VkDebugReportFlagsEXT flags,
|
||||
@ -828,6 +835,9 @@ int Player::InitVulkan()
|
||||
VkPhysicalDeviceFeatures enabledFeatures;
|
||||
InitVulkanFeatures(enabledFeatures, supportedFeatures);
|
||||
|
||||
bool VK_KHR_get_memory_requirements2_available = false;
|
||||
bool VK_KHR_dedicated_allocation_available = false;
|
||||
|
||||
// Determine list of device extensions to enable.
|
||||
std::vector<const char*> enabledDeviceExtensions;
|
||||
//enabledDeviceExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
||||
@ -846,18 +856,43 @@ int Player::InitVulkan()
|
||||
{
|
||||
if(strcmp(properties[i].extensionName, VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME) == 0)
|
||||
{
|
||||
enabledDeviceExtensions.push_back(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME);
|
||||
VK_KHR_get_memory_requirements2_enabled = true;
|
||||
VK_KHR_get_memory_requirements2_available = true;
|
||||
}
|
||||
else if(strcmp(properties[i].extensionName, VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME) == 0)
|
||||
{
|
||||
enabledDeviceExtensions.push_back(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME);
|
||||
VK_KHR_dedicated_allocation_enabled = true;
|
||||
VK_KHR_dedicated_allocation_available = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const bool dedicatedAllocationAvailable =
|
||||
VK_KHR_get_memory_requirements2_available && VK_KHR_dedicated_allocation_available;
|
||||
|
||||
bool dedicatedAllocationEnabled = false;
|
||||
switch(g_VK_KHR_dedicated_allocation_request)
|
||||
{
|
||||
case VULKAN_EXTENSION_REQUEST::DISABLED:
|
||||
break;
|
||||
case VULKAN_EXTENSION_REQUEST::DEFAULT:
|
||||
dedicatedAllocationEnabled = dedicatedAllocationAvailable;
|
||||
break;
|
||||
case VULKAN_EXTENSION_REQUEST::ENABLED:
|
||||
dedicatedAllocationEnabled = dedicatedAllocationAvailable;
|
||||
if(!dedicatedAllocationAvailable)
|
||||
{
|
||||
printf("WARNING: VK_KHR_dedicated_allocation extension cannot be enabled.\n");
|
||||
}
|
||||
break;
|
||||
default: assert(0);
|
||||
}
|
||||
|
||||
if(dedicatedAllocationEnabled)
|
||||
{
|
||||
enabledDeviceExtensions.push_back(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME);
|
||||
enabledDeviceExtensions.push_back(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO };
|
||||
deviceCreateInfo.enabledExtensionCount = (uint32_t)enabledDeviceExtensions.size();
|
||||
deviceCreateInfo.ppEnabledExtensionNames = !enabledDeviceExtensions.empty() ? enabledDeviceExtensions.data() : nullptr;
|
||||
@ -878,7 +913,7 @@ int Player::InitVulkan()
|
||||
allocatorInfo.physicalDevice = m_PhysicalDevice;
|
||||
allocatorInfo.device = m_Device;
|
||||
|
||||
if(VK_KHR_dedicated_allocation_enabled)
|
||||
if(dedicatedAllocationEnabled)
|
||||
{
|
||||
allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;
|
||||
}
|
||||
@ -1946,6 +1981,8 @@ static void PrintCommandLineSyntax()
|
||||
" --PhysicalDevice <Index> - Choice of Vulkan physical device. Default: 0.\n"
|
||||
" --UserData <Value> - 0 to disable or 1 to enable setting pUserData during playback.\n"
|
||||
" Default is 1. Affects both creation of buffers and images, as well as calls to vmaSetAllocationUserData.\n"
|
||||
" --VK_KHR_dedicated_allocation <Value> - 0 to disable or 1 to enable this extension.\n"
|
||||
" By defalut the extension is silently enabled if available.\n"
|
||||
);
|
||||
}
|
||||
|
||||
@ -2102,6 +2139,7 @@ static int main2(int argc, char** argv)
|
||||
cmdLineParser.RegisterOpt(CMD_LINE_OPT_LINES, "Lines", true);
|
||||
cmdLineParser.RegisterOpt(CMD_LINE_OPT_PHYSICAL_DEVICE, "PhysicalDevice", true);
|
||||
cmdLineParser.RegisterOpt(CMD_LINE_OPT_USER_DATA, "UserData", true);
|
||||
cmdLineParser.RegisterOpt(CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION, "VK_KHR_dedicated_allocation", true);
|
||||
|
||||
CmdLineParser::RESULT res;
|
||||
while((res = cmdLineParser.ReadNext()) != CmdLineParser::RESULT_END)
|
||||
@ -2154,6 +2192,22 @@ static int main2(int argc, char** argv)
|
||||
return RESULT_ERROR_COMMAND_LINE;
|
||||
}
|
||||
break;
|
||||
case CMD_LINE_OPT_VK_KHR_DEDICATED_ALLOCATION:
|
||||
{
|
||||
bool newValue;
|
||||
if(StrRangeToBool(StrRange(cmdLineParser.GetParameter()), newValue))
|
||||
{
|
||||
g_VK_KHR_dedicated_allocation_request = newValue ?
|
||||
VULKAN_EXTENSION_REQUEST::ENABLED :
|
||||
VULKAN_EXTENSION_REQUEST::DISABLED;
|
||||
}
|
||||
else
|
||||
{
|
||||
PrintCommandLineSyntax();
|
||||
return RESULT_ERROR_COMMAND_LINE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user