Browse Source

Upgrade to Vulkan 1.2

Panagiotis Christopoulos Charitos 5 years ago
parent
commit
afc86f3dbe

+ 1 - 1
src/anki/gr/ConfigDefs.h

@@ -11,5 +11,5 @@ ANKI_CONFIG_OPTION(gr_maxBindlessImages, 32, 8, 1024)
 
 
 // Vulkan
 // Vulkan
 ANKI_CONFIG_OPTION(gr_diskShaderCacheMaxSize, 128_MB, 1_MB, 1_GB)
 ANKI_CONFIG_OPTION(gr_diskShaderCacheMaxSize, 128_MB, 1_MB, 1_GB)
-ANKI_CONFIG_OPTION(gr_vkminor, 1, 1, 1)
+ANKI_CONFIG_OPTION(gr_vkminor, 2, 2, 2)
 ANKI_CONFIG_OPTION(gr_vkmajor, 1, 1, 1)
 ANKI_CONFIG_OPTION(gr_vkmajor, 1, 1, 1)

+ 1 - 2
src/anki/gr/vulkan/CommandBufferImpl.inl.h

@@ -793,8 +793,7 @@ inline void CommandBufferImpl::copyBufferToBuffer(
 
 
 inline Bool CommandBufferImpl::flipViewport() const
 inline Bool CommandBufferImpl::flipViewport() const
 {
 {
-	return static_cast<const FramebufferImpl&>(*m_activeFb).hasPresentableTexture()
-		   && !!(getGrManagerImpl().getExtensions() & VulkanExtensions::KHR_MAINENANCE1);
+	return static_cast<const FramebufferImpl&>(*m_activeFb).hasPresentableTexture();
 }
 }
 
 
 inline void CommandBufferImpl::setPushConstants(const void* data, U32 dataSize)
 inline void CommandBufferImpl::setPushConstants(const void* data, U32 dataSize)

+ 0 - 4
src/anki/gr/vulkan/Common.h

@@ -57,19 +57,15 @@ enum class DescriptorType : U8
 enum class VulkanExtensions : U16
 enum class VulkanExtensions : U16
 {
 {
 	NONE = 0,
 	NONE = 0,
-	KHR_MAINENANCE1 = 1 << 0,
 	KHR_XCB_SURFACE = 1 << 1,
 	KHR_XCB_SURFACE = 1 << 1,
 	KHR_XLIB_SURFACE = 1 << 2,
 	KHR_XLIB_SURFACE = 1 << 2,
 	KHR_WIN32_SURFACE = 1 << 3,
 	KHR_WIN32_SURFACE = 1 << 3,
 	KHR_SWAPCHAIN = 1 << 4,
 	KHR_SWAPCHAIN = 1 << 4,
 	KHR_SURFACE = 1 << 5,
 	KHR_SURFACE = 1 << 5,
 	EXT_DEBUG_MARKER = 1 << 6,
 	EXT_DEBUG_MARKER = 1 << 6,
-	KHR_DEDICATED_ALLOCATION = 1 << 7,
-	EXT_SHADER_SUBGROUP_BALLOT = 1 << 8,
 	EXT_DEBUG_REPORT = 1 << 9,
 	EXT_DEBUG_REPORT = 1 << 9,
 	AMD_SHADER_INFO = 1 << 10,
 	AMD_SHADER_INFO = 1 << 10,
 	AMD_RASTERIZATION_ORDER = 1 << 11,
 	AMD_RASTERIZATION_ORDER = 1 << 11,
-	EXT_DESCRIPTOR_INDEXING = 1 << 12,
 };
 };
 ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(VulkanExtensions, inline)
 ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(VulkanExtensions, inline)
 
 

+ 1 - 34
src/anki/gr/vulkan/GrManagerImpl.cpp

@@ -513,27 +513,12 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 				m_extensions |= VulkanExtensions::KHR_SWAPCHAIN;
 				m_extensions |= VulkanExtensions::KHR_SWAPCHAIN;
 				extensionsToEnable[extensionsToEnableCount++] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
 				extensionsToEnable[extensionsToEnableCount++] = VK_KHR_SWAPCHAIN_EXTENSION_NAME;
 			}
 			}
-			else if(CString(&extensionInfos[extCount].extensionName[0]) == VK_KHR_MAINTENANCE1_EXTENSION_NAME)
-			{
-				m_extensions |= VulkanExtensions::KHR_MAINENANCE1;
-				extensionsToEnable[extensionsToEnableCount++] = VK_KHR_MAINTENANCE1_EXTENSION_NAME;
-			}
 			else if(CString(extensionInfos[extCount].extensionName) == VK_EXT_DEBUG_MARKER_EXTENSION_NAME
 			else if(CString(extensionInfos[extCount].extensionName) == VK_EXT_DEBUG_MARKER_EXTENSION_NAME
 					&& init.m_config->getBool("gr_debugMarkers"))
 					&& init.m_config->getBool("gr_debugMarkers"))
 			{
 			{
 				m_extensions |= VulkanExtensions::EXT_DEBUG_MARKER;
 				m_extensions |= VulkanExtensions::EXT_DEBUG_MARKER;
 				extensionsToEnable[extensionsToEnableCount++] = VK_EXT_DEBUG_MARKER_EXTENSION_NAME;
 				extensionsToEnable[extensionsToEnableCount++] = VK_EXT_DEBUG_MARKER_EXTENSION_NAME;
 			}
 			}
-			else if(CString(extensionInfos[extCount].extensionName) == VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME)
-			{
-				m_extensions |= VulkanExtensions::KHR_DEDICATED_ALLOCATION;
-				extensionsToEnable[extensionsToEnableCount++] = VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME;
-			}
-			else if(CString(extensionInfos[extCount].extensionName) == VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME)
-			{
-				m_extensions |= VulkanExtensions::EXT_SHADER_SUBGROUP_BALLOT;
-				extensionsToEnable[extensionsToEnableCount++] = VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME;
-			}
 			else if(CString(extensionInfos[extCount].extensionName) == VK_AMD_SHADER_INFO_EXTENSION_NAME
 			else if(CString(extensionInfos[extCount].extensionName) == VK_AMD_SHADER_INFO_EXTENSION_NAME
 					&& init.m_config->getBool("core_displayStats"))
 					&& init.m_config->getBool("core_displayStats"))
 			{
 			{
@@ -545,28 +530,10 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 				m_extensions |= VulkanExtensions::AMD_RASTERIZATION_ORDER;
 				m_extensions |= VulkanExtensions::AMD_RASTERIZATION_ORDER;
 				extensionsToEnable[extensionsToEnableCount++] = VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME;
 				extensionsToEnable[extensionsToEnableCount++] = VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME;
 			}
 			}
-			else if(CString(extensionInfos[extCount].extensionName) == VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME)
-			{
-				m_extensions |= VulkanExtensions::EXT_DESCRIPTOR_INDEXING;
-				extensionsToEnable[extensionsToEnableCount++] = VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME;
-			}
 		}
 		}
 
 
-		// Check required extensions.
-		if(!(m_extensions & VulkanExtensions::KHR_MAINENANCE1))
-		{
-			ANKI_VK_LOGE("%s is required", VK_KHR_MAINTENANCE1_EXTENSION_NAME);
-			return Error::FUNCTION_FAILED;
-		}
-		if(!(m_extensions & VulkanExtensions::EXT_DESCRIPTOR_INDEXING))
+		// Enable the bindless features required
 		{
 		{
-			ANKI_VK_LOGE("%s is required", VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME);
-			return Error::FUNCTION_FAILED;
-		}
-		else
-		{
-			// Enable the bindless features required
-
 			m_descriptorIndexingFeatures = {};
 			m_descriptorIndexingFeatures = {};
 			m_descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
 			m_descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT;
 
 

+ 1 - 1
src/anki/gr/vulkan/SwapchainFactory.cpp

@@ -57,7 +57,7 @@ Error MicroSwapchain::initInternal()
 	}
 	}
 
 
 	// Get the surface format
 	// Get the surface format
-	VkFormat surfaceFormat = VK_FORMAT_END_RANGE;
+	VkFormat surfaceFormat = VK_FORMAT_UNDEFINED;
 	VkColorSpaceKHR colorspace = VK_COLOR_SPACE_MAX_ENUM_KHR;
 	VkColorSpaceKHR colorspace = VK_COLOR_SPACE_MAX_ENUM_KHR;
 	{
 	{
 		uint32_t formatCount;
 		uint32_t formatCount;

+ 30 - 26
src/anki/gr/vulkan/TextureImpl.cpp

@@ -219,8 +219,6 @@ Bool TextureImpl::imageSupported(const TextureInitInfo& init)
 Error TextureImpl::initImage(const TextureInitInfo& init_)
 Error TextureImpl::initImage(const TextureInitInfo& init_)
 {
 {
 	TextureInitInfo init = init_;
 	TextureInitInfo init = init_;
-	Bool useDedicatedMemory = !!(init.m_usage & TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE)
-							  && !!(getGrManagerImpl().getExtensions() & VulkanExtensions::KHR_DEDICATED_ALLOCATION);
 
 
 	// Check if format is supported
 	// Check if format is supported
 	Bool supported;
 	Bool supported;
@@ -314,14 +312,6 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 	ci.pQueueFamilyIndices = &queueIdx;
 	ci.pQueueFamilyIndices = &queueIdx;
 	ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 	ci.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 
 
-	VkDedicatedAllocationImageCreateInfoNV dedicatedMemCi = {};
-	if(useDedicatedMemory)
-	{
-		dedicatedMemCi.sType = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV;
-		dedicatedMemCi.dedicatedAllocation = true;
-		ci.pNext = &dedicatedMemCi;
-	}
-
 	ANKI_VK_CHECK(vkCreateImage(getDevice(), &ci, nullptr, &m_imageHandle));
 	ANKI_VK_CHECK(vkCreateImage(getDevice(), &ci, nullptr, &m_imageHandle));
 	getGrManagerImpl().trySetVulkanHandleName(init.getName(), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, m_imageHandle);
 	getGrManagerImpl().trySetVulkanHandleName(init.getName(), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, m_imageHandle);
 #if 0
 #if 0
@@ -332,26 +322,40 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 
 
 	// Allocate memory
 	// Allocate memory
 	//
 	//
-	VkMemoryRequirements req = {};
-	vkGetImageMemoryRequirements(getDevice(), m_imageHandle, &req);
+	VkMemoryDedicatedRequirementsKHR dedicatedRequirements = {};
+	dedicatedRequirements.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR;
+
+	VkMemoryRequirements2 requirements = {};
+	requirements.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
+	requirements.pNext = &dedicatedRequirements;
+
+	VkImageMemoryRequirementsInfo2 imageRequirementsInfo = {};
+	imageRequirementsInfo.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2;
+	imageRequirementsInfo.image = m_imageHandle;
+
+	vkGetImageMemoryRequirements2(getDevice(), &imageRequirementsInfo, &requirements);
 
 
-	U32 memIdx = getGrManagerImpl().getGpuMemoryManager().findMemoryType(
-		req.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
+	U32 memIdx = getGrManagerImpl().getGpuMemoryManager().findMemoryType(requirements.memoryRequirements.memoryTypeBits,
+		VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
+		VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
 
 
 	// Fallback
 	// Fallback
 	if(memIdx == MAX_U32)
 	if(memIdx == MAX_U32)
 	{
 	{
 		memIdx = getGrManagerImpl().getGpuMemoryManager().findMemoryType(
 		memIdx = getGrManagerImpl().getGpuMemoryManager().findMemoryType(
-			req.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 0);
+			requirements.memoryRequirements.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, 0);
 	}
 	}
 
 
 	ANKI_ASSERT(memIdx != MAX_U32);
 	ANKI_ASSERT(memIdx != MAX_U32);
 
 
-	if(!useDedicatedMemory)
+	if(!dedicatedRequirements.prefersDedicatedAllocation)
 	{
 	{
 		// Allocate
 		// Allocate
-		getGrManagerImpl().getGpuMemoryManager().allocateMemory(
-			memIdx, req.size, U32(req.alignment), false, m_memHandle);
+		getGrManagerImpl().getGpuMemoryManager().allocateMemory(memIdx,
+			requirements.memoryRequirements.size,
+			U32(requirements.memoryRequirements.alignment),
+			false,
+			m_memHandle);
 
 
 		// Bind mem to image
 		// Bind mem to image
 		ANKI_TRACE_SCOPED_EVENT(VK_BIND_OBJECT);
 		ANKI_TRACE_SCOPED_EVENT(VK_BIND_OBJECT);
@@ -359,17 +363,17 @@ Error TextureImpl::initImage(const TextureInitInfo& init_)
 	}
 	}
 	else
 	else
 	{
 	{
-		VkDedicatedAllocationMemoryAllocateInfoNV dedicatedInfo = {};
-		dedicatedInfo.sType = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV;
+		VkMemoryDedicatedAllocateInfoKHR dedicatedInfo = {};
+		dedicatedInfo.sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR;
 		dedicatedInfo.image = m_imageHandle;
 		dedicatedInfo.image = m_imageHandle;
 
 
-		VkMemoryAllocateInfo memAllocCi = {};
-		memAllocCi.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
-		memAllocCi.pNext = &dedicatedInfo;
-		memAllocCi.allocationSize = req.size;
-		memAllocCi.memoryTypeIndex = memIdx;
+		VkMemoryAllocateInfo memoryAllocateInfo = {};
+		memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
+		memoryAllocateInfo.pNext = &dedicatedInfo;
+		memoryAllocateInfo.allocationSize = requirements.memoryRequirements.size;
+		memoryAllocateInfo.memoryTypeIndex = memIdx;
 
 
-		ANKI_VK_CHECK(vkAllocateMemory(getDevice(), &memAllocCi, nullptr, &m_dedicatedMem));
+		ANKI_VK_CHECK(vkAllocateMemory(getDevice(), &memoryAllocateInfo, nullptr, &m_dedicatedMem));
 		getGrManagerImpl().trySetVulkanHandleName(
 		getGrManagerImpl().trySetVulkanHandleName(
 			init.getName(), VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, ptrToNumber(m_dedicatedMem));
 			init.getName(), VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, ptrToNumber(m_dedicatedMem));
 
 

+ 1 - 0
src/anki/renderer/ShadowmapsResolve.cpp

@@ -64,6 +64,7 @@ void ShadowmapsResolve::populateRenderGraph(RenderingContext& ctx)
 
 
 	rpass.newDependency({m_runCtx.m_rt, TextureUsageBit::IMAGE_COMPUTE_WRITE});
 	rpass.newDependency({m_runCtx.m_rt, TextureUsageBit::IMAGE_COMPUTE_WRITE});
 	rpass.newDependency({m_r->getGBuffer().getDepthRt(), TextureUsageBit::SAMPLED_COMPUTE});
 	rpass.newDependency({m_r->getGBuffer().getDepthRt(), TextureUsageBit::SAMPLED_COMPUTE});
+	rpass.newDependency({m_r->getShadowMapping().getShadowmapRt(), TextureUsageBit::SAMPLED_COMPUTE});
 }
 }
 
 
 void ShadowmapsResolve::run(RenderPassWorkContext& rgraphCtx)
 void ShadowmapsResolve::run(RenderPassWorkContext& rgraphCtx)

+ 1 - 1
thirdparty

@@ -1 +1 @@
-Subproject commit 95609942304798feb9578a7668512c95705beeda
+Subproject commit 0f99da7dae3f33ee3caa74bbf7a1a828442f6f2f