mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 21:30:53 +00:00
Implement extension VK_KHR_maintenance2. Closes #818
This commit is contained in:
@@ -423,6 +423,9 @@ struct Tessellation
|
||||
{
|
||||
DOCUMENT("The number of control points in each input patch.");
|
||||
uint32_t numControlPoints = 0;
|
||||
|
||||
DOCUMENT("``True`` if the tessellation domain origin is upper-left, ``False`` if lower-left.");
|
||||
bool domainOriginUpperLeft = true;
|
||||
};
|
||||
|
||||
DOCUMENT("Describes a combined viewport and scissor region.");
|
||||
|
||||
@@ -618,6 +618,10 @@ DECLARE_REFLECTION_STRUCT(VkDescriptorUpdateTemplateCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkBindBufferMemoryInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkBindImageMemoryInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineRasterizationConservativeStateCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineTessellationDomainOriginStateCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewUsageCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkInputAttachmentAspectReference);
|
||||
DECLARE_REFLECTION_STRUCT(VkRenderPassInputAttachmentAspectCreateInfoKHR);
|
||||
|
||||
DECLARE_DESERIALISE_TYPE(VkDeviceCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkBufferCreateInfo);
|
||||
@@ -658,6 +662,9 @@ DECLARE_DESERIALISE_TYPE(VkDebugMarkerMarkerInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkBindBufferMemoryInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkBindImageMemoryInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineRasterizationConservativeStateCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineTessellationDomainOriginStateCreateInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageViewUsageCreateInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkRenderPassInputAttachmentAspectCreateInfoKHR);
|
||||
|
||||
DECLARE_REFLECTION_ENUM(VkFlagWithNoBits);
|
||||
DECLARE_REFLECTION_ENUM(VkQueueFlagBits);
|
||||
@@ -724,3 +731,4 @@ DECLARE_REFLECTION_ENUM(VkColorSpaceKHR);
|
||||
DECLARE_REFLECTION_ENUM(VkPresentModeKHR);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorUpdateTemplateType);
|
||||
DECLARE_REFLECTION_ENUM(VkConservativeRasterizationModeEXT);
|
||||
DECLARE_REFLECTION_ENUM(VkTessellationDomainOriginKHR);
|
||||
@@ -637,6 +637,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_KHR_MAINTENANCE1_EXTENSION_NAME, VK_KHR_MAINTENANCE1_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_MAINTENANCE2_EXTENSION_NAME, VK_KHR_MAINTENANCE2_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -298,6 +298,7 @@
|
||||
CheckExt(NV_external_memory_win32, VKXX); \
|
||||
CheckExt(NV_win32_keyed_mutex, VKXX); \
|
||||
CheckExt(KHR_maintenance1, VK11); \
|
||||
CheckExt(KHR_maintenance2, VK11); \
|
||||
CheckExt(EXT_display_control, VKXX); \
|
||||
CheckExt(KHR_external_memory, VK11); \
|
||||
CheckExt(KHR_external_memory_win32, VKXX); \
|
||||
|
||||
@@ -228,6 +228,15 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
|
||||
else
|
||||
patchControlPoints = 0;
|
||||
|
||||
tessellationDomainOrigin = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT;
|
||||
|
||||
const VkPipelineTessellationDomainOriginStateCreateInfoKHR *tessDomain =
|
||||
(const VkPipelineTessellationDomainOriginStateCreateInfoKHR *)FindNextStruct(
|
||||
pCreateInfo->pTessellationState,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO);
|
||||
if(tessDomain)
|
||||
tessellationDomainOrigin = tessDomain->domainOrigin;
|
||||
|
||||
if(pCreateInfo->pViewportState)
|
||||
viewportCount = pCreateInfo->pViewportState->viewportCount;
|
||||
else
|
||||
@@ -421,6 +430,8 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
|
||||
|
||||
patchControlPoints = 0;
|
||||
|
||||
tessellationDomainOrigin = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT;
|
||||
|
||||
viewportCount = 0;
|
||||
|
||||
// VkPipelineRasterStateCreateInfo
|
||||
|
||||
@@ -174,6 +174,9 @@ struct VulkanCreationInfo
|
||||
// VkPipelineTessellationStateCreateInfo
|
||||
uint32_t patchControlPoints;
|
||||
|
||||
// VkPipelineTessellationDomainOriginStateCreateInfoKHR
|
||||
VkTessellationDomainOriginKHR tessellationDomainOrigin;
|
||||
|
||||
// VkPipelineViewportStateCreateInfo
|
||||
uint32_t viewportCount;
|
||||
vector<VkViewport> viewports;
|
||||
|
||||
@@ -910,6 +910,9 @@ void VulkanReplay::SavePipelineState()
|
||||
// Tessellation
|
||||
m_VulkanPipelineState.tessellation.numControlPoints = p.patchControlPoints;
|
||||
|
||||
m_VulkanPipelineState.tessellation.domainOriginUpperLeft =
|
||||
p.tessellationDomainOrigin == VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT;
|
||||
|
||||
// Viewport/Scissors
|
||||
size_t numViewScissors = p.viewportCount;
|
||||
m_VulkanPipelineState.viewportScissor.viewportScissors.resize(numViewScissors);
|
||||
|
||||
@@ -120,51 +120,58 @@ void DoSerialiseViaResourceId(SerialiserType &ser, type &el)
|
||||
SERIALISE_VK_HANDLES();
|
||||
|
||||
// pNext structure type dispatch
|
||||
#define HANDLE_PNEXT() \
|
||||
/* we can ignore all external memory extension structs entirely. We don't need to */ \
|
||||
/* serialise or replay it as we won't actually use external memory and will just create */ \
|
||||
/* normal memory to replay with. */ \
|
||||
\
|
||||
/* VK_NV_external_memory / VK_NV_external_memory_win32 */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV) \
|
||||
\
|
||||
/* VK_NV_win32_keyed_mutex */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV) \
|
||||
\
|
||||
/* VK_KHR_external_memory / ..._fd / .._win32 */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR) \
|
||||
\
|
||||
/* VK_KHR_external_semaphore / .._fd / ..._win32 */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR) \
|
||||
\
|
||||
/* we don't create real swapchains on replay, so we can ignore surface counters */ \
|
||||
/* VK_EXT_display_control */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* for now we don't serialise dedicated memory on replay as it's only a performance */ \
|
||||
/* hint, and is only required in conjunction with shared memory (which we don't */ \
|
||||
/* replay). In future it might be helpful to serialise this for informational purposes. */ \
|
||||
\
|
||||
/* VK_NV_dedicated_allocation */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV) \
|
||||
\
|
||||
/* VK_KHR_dedicated_allocation */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR) \
|
||||
\
|
||||
/* VK_EXT_conservative_rasterization */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT, \
|
||||
VkPipelineRasterizationConservativeStateCreateInfoEXT)
|
||||
#define HANDLE_PNEXT() \
|
||||
/* we can ignore all external memory extension structs entirely. We don't need to */ \
|
||||
/* serialise or replay it as we won't actually use external memory and will just create */ \
|
||||
/* normal memory to replay with. */ \
|
||||
\
|
||||
/* VK_NV_external_memory / VK_NV_external_memory_win32 */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV) \
|
||||
\
|
||||
/* VK_NV_win32_keyed_mutex */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV) \
|
||||
\
|
||||
/* VK_KHR_external_memory / ..._fd / .._win32 */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR) \
|
||||
\
|
||||
/* VK_KHR_external_semaphore / .._fd / ..._win32 */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR) \
|
||||
\
|
||||
/* we don't create real swapchains on replay, so we can ignore surface counters */ \
|
||||
/* VK_EXT_display_control */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* for now we don't serialise dedicated memory on replay as it's only a performance */ \
|
||||
/* hint, and is only required in conjunction with shared memory (which we don't */ \
|
||||
/* replay). In future it might be helpful to serialise this for informational purposes. */ \
|
||||
\
|
||||
/* VK_NV_dedicated_allocation */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV) \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV) \
|
||||
\
|
||||
/* VK_KHR_dedicated_allocation */ \
|
||||
PNEXT_IGNORE(VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR) \
|
||||
\
|
||||
/* VK_EXT_conservative_rasterization */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT, \
|
||||
VkPipelineRasterizationConservativeStateCreateInfoEXT) \
|
||||
\
|
||||
/* VK_KHR_maintenance2 */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR, \
|
||||
VkPipelineTessellationDomainOriginStateCreateInfoKHR) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR, VkImageViewUsageCreateInfoKHR) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR, \
|
||||
VkRenderPassInputAttachmentAspectCreateInfoKHR)
|
||||
|
||||
template <typename SerialiserType>
|
||||
static void SerialiseNext(SerialiserType &ser, VkStructureType &sType, const void *&pNext)
|
||||
@@ -1981,7 +1988,7 @@ void DoSerialise(SerialiserType &ser, VkClearRect &el)
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkClearAttachment &el)
|
||||
{
|
||||
SERIALISE_MEMBER(aspectMask);
|
||||
SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask);
|
||||
SERIALISE_MEMBER(colorAttachment);
|
||||
SERIALISE_MEMBER(clearValue);
|
||||
}
|
||||
@@ -2230,6 +2237,63 @@ void Deserialise(const VkPipelineRasterizationConservativeStateCreateInfoEXT &el
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPipelineTessellationDomainOriginStateCreateInfoKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(domainOrigin);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPipelineTessellationDomainOriginStateCreateInfoKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkImageViewUsageCreateInfoKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER_TYPED(VkImageUsageFlagBits, usage);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkImageViewUsageCreateInfoKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkInputAttachmentAspectReference &el)
|
||||
{
|
||||
SERIALISE_MEMBER(subpass);
|
||||
SERIALISE_MEMBER(inputAttachmentIndex);
|
||||
SERIALISE_MEMBER_TYPED(VkImageAspectFlagBits, aspectMask);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkRenderPassInputAttachmentAspectCreateInfoKHR &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(aspectReferenceCount);
|
||||
SERIALISE_MEMBER_ARRAY(pAspectReferences, aspectReferenceCount);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkRenderPassInputAttachmentAspectCreateInfoKHR &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
delete[] el.pAspectReferences;
|
||||
}
|
||||
|
||||
INSTANTIATE_SERIALISE_TYPE(VkOffset2D);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkExtent2D);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkMemoryType);
|
||||
|
||||
@@ -1700,6 +1700,17 @@ std::string DoStringise(const VkConservativeRasterizationModeEXT &el)
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkTessellationDomainOriginKHR &el)
|
||||
{
|
||||
BEGIN_ENUM_STRINGISE(VkTessellationDomainOriginKHR);
|
||||
{
|
||||
STRINGISE_ENUM(VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT)
|
||||
STRINGISE_ENUM(VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT)
|
||||
}
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkExtent3D &el)
|
||||
{
|
||||
|
||||
@@ -1871,8 +1871,9 @@ template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VKPipe::Tessellation &el)
|
||||
{
|
||||
SERIALISE_MEMBER(numControlPoints);
|
||||
SERIALISE_MEMBER(domainOriginUpperLeft);
|
||||
|
||||
SIZE_CHECK(4);
|
||||
SIZE_CHECK(8);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
|
||||
Reference in New Issue
Block a user