mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-22 22:46:41 +00:00
Add support for VK_EXT_attachment_feedback_loop_layout
Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com>
This commit is contained in:
committed by
Baldur Karlsson
parent
dd47f5a341
commit
6bd7e7cc1a
@@ -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)));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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); \
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -491,6 +491,8 @@ struct VulkanCreationInfo
|
||||
VkExtent2D shadingRateTexelSize;
|
||||
|
||||
rdcarray<uint32_t> multiviews;
|
||||
|
||||
bool feedbackLoop;
|
||||
};
|
||||
rdcarray<Subpass> subpasses;
|
||||
|
||||
|
||||
@@ -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: \
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user