mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-25 07:56:33 +00:00
Add support for VK_EXT_image_view_min_lod
This commit is contained in:
@@ -611,6 +611,16 @@ void VulkanPipelineStateViewer::setEmptyRow(RDTreeWidgetItem *node)
|
||||
node->setForegroundColor(QColor(0, 0, 0));
|
||||
}
|
||||
|
||||
float minLOD(const VKPipe::Attachment &view)
|
||||
{
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
float minLOD(const VKPipe::BindingElement &view)
|
||||
{
|
||||
return view.minLOD;
|
||||
}
|
||||
|
||||
template <typename bindType>
|
||||
bool VulkanPipelineStateViewer::setViewDetails(RDTreeWidgetItem *node, const bindType &view,
|
||||
TextureDescription *tex, bool stageBitsIncluded,
|
||||
@@ -684,6 +694,11 @@ bool VulkanPipelineStateViewer::setViewDetails(RDTreeWidgetItem *node, const bin
|
||||
}
|
||||
}
|
||||
|
||||
if(minLOD(view) != 0.0f)
|
||||
{
|
||||
text += tr("Clamped to a minimum LOD of %1\n").arg(minLOD(view));
|
||||
}
|
||||
|
||||
if(includeSampleLocations && state.multisample.rasterSamples > 1 &&
|
||||
!state.multisample.sampleLocations.customLocations.isEmpty())
|
||||
{
|
||||
|
||||
@@ -179,7 +179,7 @@ set's inline block data.
|
||||
float maxAnisotropy = 0.0f;
|
||||
DOCUMENT("For samplers - the :class:`CompareFunction` for comparison samplers.");
|
||||
CompareFunction compareFunction = CompareFunction::AlwaysTrue;
|
||||
DOCUMENT("For samplers - the minimum mip level that can be used.");
|
||||
DOCUMENT("For samplers and image views - the minimum mip level that can be used.");
|
||||
float minLOD = 0.0f;
|
||||
DOCUMENT("For samplers - the maximum mip level that can be used.");
|
||||
float maxLOD = 0.0f;
|
||||
|
||||
@@ -62,6 +62,7 @@ Maintainers can update this file by updating vk.xml in this folder and running `
|
||||
* `VK_EXT_headless_surface`
|
||||
* `VK_EXT_host_query_reset`
|
||||
* `VK_EXT_image_robustness`
|
||||
* `VK_EXT_image_view_min_lod`
|
||||
* `VK_EXT_index_type_uint8`
|
||||
* `VK_EXT_inline_uniform_block`
|
||||
* `VK_EXT_line_rasterization`
|
||||
@@ -255,7 +256,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi
|
||||
* `VK_EXT_image_compression_control`
|
||||
* `VK_EXT_image_compression_control_swapchain`
|
||||
* `VK_EXT_image_drm_format_modifier`
|
||||
* `VK_EXT_image_view_min_lod`
|
||||
* `VK_EXT_legacy_dithering`
|
||||
* `VK_EXT_mesh_shader`
|
||||
* `VK_EXT_metal_objects`
|
||||
|
||||
@@ -1106,6 +1106,7 @@ DECLARE_REFLECTION_STRUCT(VkImageSwapchainCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewASTCDecodeModeEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewUsageCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewMinLodCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkImportFenceFdInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkImportMemoryFdInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkImportSemaphoreFdInfoKHR);
|
||||
@@ -1185,6 +1186,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageFormatInfo2);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImagelessFramebufferFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageRobustnessFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageViewImageFormatInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageViewMinLodFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceIndexTypeUint8FeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceInlineUniformBlockFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceInlineUniformBlockProperties);
|
||||
@@ -1510,6 +1512,7 @@ DECLARE_DESERIALISE_TYPE(VkImageSwapchainCreateInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageViewASTCDecodeModeEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageViewCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageViewUsageCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageViewMinLodCreateInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkImportFenceFdInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkImportMemoryFdInfoKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkImportSemaphoreFdInfoKHR);
|
||||
@@ -1586,6 +1589,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageFormatInfo2);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImagelessFramebufferFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageRobustnessFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageViewImageFormatInfoEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageViewMinLodFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceIndexTypeUint8FeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceInlineUniformBlockFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceInlineUniformBlockProperties);
|
||||
|
||||
@@ -1008,6 +1008,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME, VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION,
|
||||
},
|
||||
|
||||
@@ -2090,6 +2090,16 @@ void VulkanCreationInfo::ImageView::Init(VulkanResourceManager *resourceMan, Vul
|
||||
range.layerCount = info.m_Image[image].arrayLayers - range.baseArrayLayer;
|
||||
|
||||
componentMapping = pCreateInfo->components;
|
||||
|
||||
minLOD = 0.0f;
|
||||
|
||||
const VkImageViewMinLodCreateInfoEXT *minLODInfo =
|
||||
(const VkImageViewMinLodCreateInfoEXT *)FindNextStruct(
|
||||
pCreateInfo, VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT);
|
||||
if(minLODInfo)
|
||||
{
|
||||
minLOD = minLODInfo->minLod;
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanCreationInfo::ShaderModule::Init(VulkanResourceManager *resourceMan,
|
||||
|
||||
@@ -713,6 +713,9 @@ struct VulkanCreationInfo
|
||||
VkFormat format;
|
||||
VkImageSubresourceRange range;
|
||||
VkComponentMapping componentMapping;
|
||||
|
||||
// VkImageViewMinLodCreateInfoEXT
|
||||
float minLOD;
|
||||
};
|
||||
std::unordered_map<ResourceId, ImageView> m_ImageView;
|
||||
|
||||
|
||||
@@ -183,6 +183,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, VkImageResolve2); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, VkImageStencilUsageCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, VkImageViewASTCDecodeModeEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT, VkImageViewMinLodCreateInfoEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, VkImageViewUsageCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, VkInstanceCreateInfo); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, VkMemoryAllocateFlagsInfo); \
|
||||
@@ -312,6 +313,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPhysicalDeviceImageRobustnessFeatures) \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, \
|
||||
VkPhysicalDeviceIndexTypeUint8FeaturesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, \
|
||||
VkPhysicalDeviceImageViewMinLodFeaturesEXT) \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES, \
|
||||
VkPhysicalDeviceInlineUniformBlockFeatures); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES, \
|
||||
@@ -836,7 +839,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM: \
|
||||
case VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA: \
|
||||
case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT: \
|
||||
@@ -903,7 +905,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT: \
|
||||
|
||||
@@ -2153,6 +2153,8 @@ void VulkanReplay::SavePipelineState(uint32_t eventId)
|
||||
|
||||
// temporary hack, store image layout enum in byteOffset as it's not used for images
|
||||
destSlots.binds[a].byteOffset = convert(srcel.imageLayout);
|
||||
|
||||
destSlots.binds[a].minLOD = c.m_ImageView[viewid].minLOD;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2162,6 +2164,7 @@ void VulkanReplay::SavePipelineState(uint32_t eventId)
|
||||
destSlots.binds[a].firstSlice = 0;
|
||||
destSlots.binds[a].numMips = 1;
|
||||
destSlots.binds[a].numSlices = 1;
|
||||
destSlots.binds[a].minLOD = 0.0f;
|
||||
}
|
||||
}
|
||||
else if(descriptorType == DescriptorSlotType::UniformTexelBuffer ||
|
||||
|
||||
@@ -724,6 +724,11 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, \
|
||||
VkPhysicalDeviceImageRobustnessFeatures) \
|
||||
\
|
||||
/* VK_EXT_image_view_min_lod */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT, \
|
||||
VkPhysicalDeviceImageViewMinLodFeaturesEXT) \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT, VkImageViewMinLodCreateInfoEXT) \
|
||||
\
|
||||
/* VK_EXT_index_type_uint8 */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT, \
|
||||
VkPhysicalDeviceIndexTypeUint8FeaturesEXT) \
|
||||
@@ -1471,10 +1476,6 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT) \
|
||||
\
|
||||
/* VK_EXT_image_view_min_lod */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT) \
|
||||
\
|
||||
/* VK_EXT_legacy_dithering */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT) \
|
||||
\
|
||||
@@ -9336,6 +9337,37 @@ void Deserialise(const VkPhysicalDeviceIndexTypeUint8FeaturesEXT &el)
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceImageViewMinLodFeaturesEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(minLod);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDeviceImageViewMinLodFeaturesEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkImageViewMinLodCreateInfoEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(minLod);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkImageViewMinLodCreateInfoEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceInlineUniformBlockFeatures &el)
|
||||
{
|
||||
|
||||
@@ -3058,6 +3058,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
CHECK_PHYS_EXT_FEATURE(depthClampZeroOne);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceImageViewMinLodFeaturesEXT,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT);
|
||||
{
|
||||
CHECK_PHYS_EXT_FEATURE(minLod);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
}
|
||||
|
||||
if(availFeatures.depthClamp)
|
||||
|
||||
Reference in New Issue
Block a user