Add support for VK_EXT_attachment_feedback_loop_layout

Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
This commit is contained in:
Danylo Piliaiev
2022-08-18 15:54:33 +01:00
committed by Baldur Karlsson
parent dd47f5a341
commit 6bd7e7cc1a
12 changed files with 67 additions and 10 deletions
@@ -2584,9 +2584,12 @@ void VulkanPipelineStateViewer::setState()
}
else
{
ui->renderpass->setText(QFormatStr("Render Pass: %1 (Subpass %2)")
.arg(ToQStr(state.currentPass.renderpass.resourceId))
.arg(state.currentPass.renderpass.subpass));
QString text = QFormatStr("Render Pass: %1 (Subpass %2)")
.arg(ToQStr(state.currentPass.renderpass.resourceId))
.arg(state.currentPass.renderpass.subpass);
if(state.currentPass.renderpass.feedbackLoop)
text += tr(" (Feedback Loop)");
ui->renderpass->setText(text);
ui->framebuffer->setText(
QFormatStr("Framebuffer: %1").arg(ToQStr(state.currentPass.framebuffer.resourceId)));
}
+3
View File
@@ -992,6 +992,9 @@ struct RenderPass
DOCUMENT("Whether or not dynamic rendering is currently suspended.");
bool suspended = false;
DOCUMENT("Whether or not there is a potential feedback loop.");
bool feedbackLoop = false;
DOCUMENT("The index of the current active subpass.");
uint32_t subpass;
+1 -1
View File
@@ -25,6 +25,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_EXT_4444_formats`
* `VK_EXT_acquire_xlib_display`
* `VK_EXT_astc_decode_mode`
* `VK_EXT_attachment_feedback_loop_layout`
* `VK_EXT_buffer_device_address`
* `VK_EXT_calibrated_timestamps`
* `VK_EXT_color_write_enable`
@@ -230,7 +231,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi
## EXT Extensions
* `VK_EXT_acquire_drm_display`
* `VK_EXT_attachment_feedback_loop_layout`
* `VK_EXT_blend_operation_advanced`
* `VK_EXT_border_color_swizzle`
* `VK_EXT_depth_clip_control`
+2
View File
@@ -943,6 +943,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevice16BitStorageFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevice4444FormatsFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevice8BitStorageFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceASTCDecodeFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceBufferDeviceAddressFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceBufferDeviceAddressFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceCoherentMemoryFeaturesAMD);
@@ -1320,6 +1321,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevice16BitStorageFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevice4444FormatsFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceCoherentMemoryFeaturesAMD);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceColorWriteEnableFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceComputeShaderDerivativesFeaturesNV);
+4
View File
@@ -876,6 +876,10 @@ static const VkExtensionProperties supportedExtensions[] = {
{
VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION,
},
{
VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_EXTENSION_NAME,
VK_EXT_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_SPEC_VERSION,
},
{
VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION,
},
+4 -2
View File
@@ -537,7 +537,8 @@
DeclExt(EXT_extended_dynamic_state2); \
DeclExt(EXT_vertex_input_dynamic_state); \
DeclExt(KHR_dynamic_rendering); \
DeclExt(KHR_fragment_shading_rate);
DeclExt(KHR_fragment_shading_rate); \
DeclExt(EXT_attachment_feedback_loop_layout);
// for simplicity and since the check itself is platform agnostic,
// these aren't protected in platform defines
@@ -645,7 +646,8 @@
CheckExt(EXT_extended_dynamic_state2, VK13); \
CheckExt(EXT_vertex_input_dynamic_state, VKXX); \
CheckExt(KHR_dynamic_rendering, VK13); \
CheckExt(KHR_fragment_shading_rate, VKXX);
CheckExt(KHR_fragment_shading_rate, VKXX); \
CheckExt(EXT_attachment_feedback_loop_layout, VKXX);
#define HookInitVulkanInstanceExts_PhysDev() \
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
+10
View File
@@ -1260,6 +1260,8 @@ void VulkanCreationInfo::RenderPass::Init(VulkanResourceManager *resourceMan,
dst.shadingRateLayout = VK_IMAGE_LAYOUT_UNDEFINED;
dst.shadingRateTexelSize = VkExtent2D({1, 1});
dst.feedbackLoop = false;
if(multiview && multiview->subpassCount > 0)
{
uint32_t mask = multiview->pViewMasks[subp];
@@ -1270,6 +1272,14 @@ void VulkanCreationInfo::RenderPass::Init(VulkanResourceManager *resourceMan,
}
}
}
for(uint32_t i = 0; i < pCreateInfo->dependencyCount; i++)
{
if(pCreateInfo->pDependencies[i].dependencyFlags & VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT)
{
subpasses[pCreateInfo->pDependencies[i].dstSubpass].feedbackLoop = true;
}
}
}
void VulkanCreationInfo::RenderPass::Init(VulkanResourceManager *resourceMan,
+2
View File
@@ -491,6 +491,8 @@ struct VulkanCreationInfo
VkExtent2D shadingRateTexelSize;
rdcarray<uint32_t> multiviews;
bool feedbackLoop;
};
rdcarray<Subpass> subpasses;
+2 -1
View File
@@ -205,6 +205,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDevice8BitStorageFeatures); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, \
VkPhysicalDeviceASTCDecodeFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, \
VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, \
VkPhysicalDeviceBufferDeviceAddressFeaturesEXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, \
@@ -798,7 +800,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT: \
+3
View File
@@ -1577,6 +1577,7 @@ void VulkanReplay::SavePipelineState(uint32_t eventId)
rpState.dynamic = true;
rpState.suspended = dyn.suspended;
rpState.feedbackLoop = false;
rpState.resourceId = ResourceId();
rpState.subpass = 0;
rpState.fragmentDensityOffsets.clear();
@@ -1763,6 +1764,8 @@ void VulkanReplay::SavePipelineState(uint32_t eventId)
ret.currentPass.renderpass.multiviews =
c.m_RenderPass[state.GetRenderPass()].subpasses[state.subpass].multiviews;
ret.currentPass.renderpass.feedbackLoop =
c.m_RenderPass[state.GetRenderPass()].subpasses[state.subpass].feedbackLoop;
ResourceId fb = state.GetFramebuffer();
+22 -3
View File
@@ -559,6 +559,10 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, \
VkPhysicalDeviceASTCDecodeFeaturesEXT) \
\
/* VK_EXT_attachment_feedback_loop_layout */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT, \
VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT) \
\
/* VK_EXT_buffer_device_address */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT, \
VkBufferDeviceAddressCreateInfoEXT) \
@@ -1328,9 +1332,6 @@ SERIALISE_VK_HANDLES();
PNEXT_UNSUPPORTED( \
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD) \
\
/* VK_EXT_attachment_feedback_loop_layout */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT) \
\
/* VK_EXT_blend_operation_advanced */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT) \
@@ -7615,6 +7616,23 @@ void Deserialise(const VkExternalMemoryImageCreateInfoNV &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT &el)
{
RDCASSERT(ser.IsReading() ||
el.sType ==
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(attachmentFeedbackLoopLayout);
}
template <>
void Deserialise(const VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderImageFootprintFeaturesNV &el)
{
@@ -10645,6 +10663,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderIntegerDotProductProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderTerminateInvocationFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSparseImageFormatInfo2);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSubgroupSizeControlFeatures);
@@ -2345,6 +2345,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(
VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT);
{
CHECK_PHYS_EXT_FEATURE(attachmentFeedbackLoopLayout);
}
END_PHYS_EXT_CHECK();
BEGIN_PHYS_EXT_CHECK(
VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR);