mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-01 12:20:56 +00:00
Implement support for VK_EXT_depth_clip_enable
This commit is contained in:
@@ -655,9 +655,16 @@ struct Rasterizer
|
||||
Rasterizer(const Rasterizer &) = default;
|
||||
|
||||
DOCUMENT(R"(``True`` if pixels outside of the near and far depth planes should be clamped and
|
||||
to ``0.0`` to ``1.0`` and not clipped.
|
||||
to ``0.0`` to ``1.0``.
|
||||
)");
|
||||
bool depthClampEnable = false;
|
||||
DOCUMENT(R"(``True`` if pixels outside of the near and far depth planes should be clipped.
|
||||
|
||||
.. note::
|
||||
In Vulkan 1.0 this value was implicitly set to the opposite of :data:`depthClampEnable`, but with
|
||||
later extensions & versions it can be set independently.
|
||||
)");
|
||||
bool depthClipEnable = true;
|
||||
DOCUMENT("``True`` if primitives should be discarded during rasterization.");
|
||||
bool rasterizerDiscardEnable = false;
|
||||
DOCUMENT(R"(``True`` if counter-clockwise polygons are front-facing.
|
||||
|
||||
@@ -690,6 +690,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevice8BitStorageFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceASTCDecodeFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConditionalRenderingFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceConservativeRasterizationPropertiesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDepthStencilResolvePropertiesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDiscardRectanglePropertiesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceDriverPropertiesKHR);
|
||||
@@ -745,6 +746,7 @@ DECLARE_REFLECTION_STRUCT(VkPipelineInputAssemblyStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineLayoutCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineMultisampleStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineRasterizationConservativeStateCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineRasterizationDepthClipStateCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineRasterizationStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineRasterizationStateStreamCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineSampleLocationsStateCreateInfoEXT);
|
||||
@@ -911,6 +913,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevice8BitStorageFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConditionalRenderingFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolvePropertiesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDiscardRectanglePropertiesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceDriverPropertiesKHR);
|
||||
@@ -966,6 +969,7 @@ DECLARE_DESERIALISE_TYPE(VkPipelineInputAssemblyStateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineLayoutCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineMultisampleStateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineRasterizationConservativeStateCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineRasterizationDepthClipStateCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineRasterizationStateCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineRasterizationStateStreamCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineSampleLocationsStateCreateInfoEXT);
|
||||
|
||||
@@ -654,6 +654,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME, VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -375,6 +375,18 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
|
||||
if(rastStream)
|
||||
rasterizationStream = rastStream->rasterizationStream;
|
||||
|
||||
// VkPipelineRasterizationStateStreamCreateInfoEXT
|
||||
|
||||
// default to the opposite of depthClampEnable
|
||||
depthClipEnable = !depthClampEnable;
|
||||
|
||||
const VkPipelineRasterizationDepthClipStateCreateInfoEXT *depthClipState =
|
||||
(const VkPipelineRasterizationDepthClipStateCreateInfoEXT *)FindNextStruct(
|
||||
pCreateInfo->pRasterizationState,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT);
|
||||
if(depthClipState)
|
||||
depthClipEnable = depthClipState->depthClipEnable != VK_FALSE;
|
||||
|
||||
// VkPipelineRasterizationConservativeStateCreateInfoEXT
|
||||
conservativeRasterizationMode = VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT;
|
||||
extraPrimitiveOverestimationSize = 0.0f;
|
||||
|
||||
@@ -217,6 +217,9 @@ struct VulkanCreationInfo
|
||||
// VkPipelineRasterizationStateStreamCreateInfoEXT
|
||||
uint32_t rasterizationStream;
|
||||
|
||||
// VkPipelineRasterizationStateStreamCreateInfoEXT
|
||||
bool depthClipEnable;
|
||||
|
||||
// VkPipelineRasterizationConservativeStateCreateInfoEXT
|
||||
VkConservativeRasterizationModeEXT conservativeRasterizationMode;
|
||||
float extraPrimitiveOverestimationSize;
|
||||
|
||||
@@ -160,6 +160,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPhysicalDeviceConservativeRasterizationPropertiesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV, \
|
||||
VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, \
|
||||
VkPhysicalDeviceDepthClipEnableFeaturesEXT) \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR, \
|
||||
VkPhysicalDeviceDepthStencilResolvePropertiesKHR); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, \
|
||||
@@ -248,6 +250,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPipelineCreationFeedbackCreateInfoEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, \
|
||||
VkPipelineColorBlendStateCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT, \
|
||||
VkPipelineRasterizationDepthClipStateCreateInfoEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, \
|
||||
VkPipelineDepthStencilStateCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT, \
|
||||
@@ -476,7 +480,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV: \
|
||||
@@ -497,7 +500,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV: \
|
||||
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV: \
|
||||
|
||||
@@ -1076,6 +1076,7 @@ void VulkanReplay::SavePipelineState()
|
||||
|
||||
// Rasterizer
|
||||
m_VulkanPipelineState.rasterizer.depthClampEnable = p.depthClampEnable;
|
||||
m_VulkanPipelineState.rasterizer.depthClipEnable = p.depthClipEnable;
|
||||
m_VulkanPipelineState.rasterizer.rasterizerDiscardEnable = p.rasterizerDiscardEnable;
|
||||
m_VulkanPipelineState.rasterizer.frontCCW = p.frontFace == VK_FRONT_FACE_COUNTER_CLOCKWISE;
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@ DECL_VKFLAG_EXT(VkSurfaceCounter, EXT);
|
||||
DECL_VKFLAG_EXT(VkSurfaceTransform, KHR);
|
||||
DECL_VKFLAG_EXT(VkSwapchainCreate, KHR);
|
||||
DECL_VKFLAG_EMPTY_EXT(VkValidationCacheCreate, EXT);
|
||||
DECL_VKFLAG_EMPTY_EXT(VkPipelineRasterizationDepthClipStateCreate, EXT);
|
||||
|
||||
// serialise a member as flags - cast to the Bits enum for serialisation so the stringification
|
||||
// picks up the bitfield and doesn't treat it as uint32_t. Then we rename the type back to the base
|
||||
@@ -448,6 +449,12 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, \
|
||||
VkDebugUtilsMessengerCreateInfoEXT) \
|
||||
\
|
||||
/* VK_EXT_depth_clip_enable */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT, \
|
||||
VkPhysicalDeviceDepthClipEnableFeaturesEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT, \
|
||||
VkPipelineRasterizationDepthClipStateCreateInfoEXT) \
|
||||
\
|
||||
/* VK_EXT_discard_rectangles */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT, \
|
||||
VkPhysicalDeviceDiscardRectanglePropertiesEXT) \
|
||||
@@ -821,10 +828,6 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* VK_EXT_depth_clip_enable */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* VK_EXT_descriptor_indexing */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT) \
|
||||
@@ -5154,6 +5157,40 @@ void Deserialise(const VkPipelineDiscardRectangleStateCreateInfoEXT &el)
|
||||
delete[] el.pDiscardRectangles;
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceDepthClipEnableFeaturesEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(depthClipEnable);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDeviceDepthClipEnableFeaturesEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPipelineRasterizationDepthClipStateCreateInfoEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER_VKFLAGS(VkPipelineRasterizationDepthClipStateCreateFlagsEXT, flags);
|
||||
|
||||
SERIALISE_MEMBER(depthClipEnable);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPipelineRasterizationDepthClipStateCreateInfoEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPipelineCreationFeedbackEXT &el)
|
||||
{
|
||||
@@ -6436,6 +6473,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice8BitStorageFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceConservativeRasterizationPropertiesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthStencilResolvePropertiesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDepthClipEnableFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDiscardRectanglePropertiesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceDriverPropertiesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceExternalBufferInfo);
|
||||
@@ -6488,6 +6526,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPipelineInputAssemblyStateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineLayoutCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineMultisampleStateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineRasterizationConservativeStateCreateInfoEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineRasterizationDepthClipStateCreateInfoEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineRasterizationStateCreateInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineRasterizationStateStreamCreateInfoEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPipelineSampleLocationsStateCreateInfoEXT);
|
||||
|
||||
@@ -1881,6 +1881,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
CHECK_PHYS_EXT_FEATURE(hostQueryReset);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceDepthClipEnableFeaturesEXT,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT);
|
||||
{
|
||||
CHECK_PHYS_EXT_FEATURE(depthClipEnable);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
}
|
||||
|
||||
if(availFeatures.depthClamp)
|
||||
|
||||
Reference in New Issue
Block a user