mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-19 13:06:38 +00:00
Add support for VK_EXT_separate_stencil_usage
This commit is contained in:
@@ -653,6 +653,7 @@ DECLARE_REFLECTION_STRUCT(VkImageFormatProperties2);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageMemoryBarrier);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageMemoryRequirementsInfo2);
|
||||
DECLARE_REFLECTION_STRUCT(VkImagePlaneMemoryRequirementsInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageStencilUsageCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageSparseMemoryRequirementsInfo2);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageSwapchainCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewASTCDecodeModeEXT);
|
||||
@@ -865,6 +866,7 @@ DECLARE_DESERIALISE_TYPE(VkImageFormatProperties2);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageMemoryBarrier);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageMemoryRequirementsInfo2);
|
||||
DECLARE_DESERIALISE_TYPE(VkImagePlaneMemoryRequirementsInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageStencilUsageCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageSparseMemoryRequirementsInfo2);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageSwapchainCreateInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageViewASTCDecodeModeEXT);
|
||||
|
||||
@@ -696,6 +696,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME, VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -133,6 +133,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, VkImageFormatProperties2); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, \
|
||||
VkImagePlaneMemoryRequirementsInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT, \
|
||||
VkImageStencilUsageCreateInfoEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, VkImageViewASTCDecodeModeEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, VkImageViewUsageCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, VkInstanceCreateInfo); \
|
||||
@@ -450,7 +452,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID: \
|
||||
case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX: \
|
||||
|
||||
@@ -493,6 +493,10 @@ SERIALISE_VK_HANDLES();
|
||||
VkPhysicalDeviceSampleLocationsPropertiesEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT, VkMultisamplePropertiesEXT) \
|
||||
\
|
||||
/* VK_EXT_separate_stencil_usage */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT, \
|
||||
VkImageStencilUsageCreateInfoEXT) \
|
||||
\
|
||||
/* VK_EXT_transform_feedback */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT, \
|
||||
VkPhysicalDeviceTransformFeedbackFeaturesEXT) \
|
||||
@@ -828,9 +832,6 @@ SERIALISE_VK_HANDLES();
|
||||
/* VK_EXT_scalar_block_layout */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT) \
|
||||
\
|
||||
/* VK_EXT_separate_stencil_usage */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* VK_EXT_validation_features */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT) \
|
||||
\
|
||||
@@ -4177,6 +4178,21 @@ void Deserialise(const VkMultisamplePropertiesEXT &el)
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkImageStencilUsageCreateInfoEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(stencilUsage);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkImageStencilUsageCreateInfoEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceTransformFeedbackFeaturesEXT &el)
|
||||
{
|
||||
@@ -6185,6 +6201,7 @@ INSTANTIATE_SERIALISE_TYPE(VkImageFormatProperties2);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageMemoryBarrier);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageMemoryRequirementsInfo2);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImagePlaneMemoryRequirementsInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageStencilUsageCreateInfoEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageSparseMemoryRequirementsInfo2);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageSwapchainCreateInfoKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageViewASTCDecodeModeEXT);
|
||||
|
||||
@@ -1357,6 +1357,23 @@ bool WrappedVulkan::Serialise_vkCreateImage(SerialiserType &ser, VkDevice device
|
||||
APIProps.SparseResources = true;
|
||||
}
|
||||
|
||||
// we search for the separate stencil usage struct now that it's in patchable memory
|
||||
VkImageStencilUsageCreateInfoEXT *separateStencilUsage =
|
||||
(VkImageStencilUsageCreateInfoEXT *)FindNextStruct(
|
||||
&CreateInfo, VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT);
|
||||
if(separateStencilUsage)
|
||||
{
|
||||
separateStencilUsage->stencilUsage |= VK_IMAGE_USAGE_SAMPLED_BIT |
|
||||
VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
separateStencilUsage->stencilUsage &= ~VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT;
|
||||
|
||||
if(CreateInfo.samples != VK_SAMPLE_COUNT_1_BIT)
|
||||
{
|
||||
separateStencilUsage->stencilUsage |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||
}
|
||||
}
|
||||
|
||||
VkImageCreateInfo patched = CreateInfo;
|
||||
|
||||
byte *tempMem = GetTempMemory(GetNextPatchSize(patched.pNext));
|
||||
@@ -1487,6 +1504,27 @@ VkResult WrappedVulkan::vkCreateImage(VkDevice device, const VkImageCreateInfo *
|
||||
|
||||
UnwrapNextChain(m_State, "VkImageCreateInfo", tempMem, (VkBaseInStructure *)&createInfo_adjusted);
|
||||
|
||||
// we search for the separate stencil usage struct now that it's in patchable memory
|
||||
VkImageStencilUsageCreateInfoEXT *separateStencilUsage =
|
||||
(VkImageStencilUsageCreateInfoEXT *)FindNextStruct(
|
||||
&createInfo_adjusted, VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT);
|
||||
if(separateStencilUsage)
|
||||
{
|
||||
separateStencilUsage->stencilUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
|
||||
|
||||
if(IsCaptureMode(m_State))
|
||||
{
|
||||
createInfo_adjusted.usage |= VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
createInfo_adjusted.usage &= ~VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT;
|
||||
}
|
||||
|
||||
if(createInfo_adjusted.samples != VK_SAMPLE_COUNT_1_BIT)
|
||||
{
|
||||
separateStencilUsage->stencilUsage |=
|
||||
VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||
}
|
||||
}
|
||||
|
||||
VkResult ret;
|
||||
SERIALISE_TIME_CALL(
|
||||
ret = ObjDisp(device)->CreateImage(Unwrap(device), &createInfo_adjusted, pAllocator, pImage));
|
||||
|
||||
Reference in New Issue
Block a user