mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-28 18:31:40 +00:00
Implement support for VK_EXT_shader_atomic_float
This commit is contained in:
@@ -2871,6 +2871,7 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
}
|
||||
break;
|
||||
}
|
||||
case Op::AtomicFAddEXT:
|
||||
case Op::AtomicIAdd:
|
||||
case Op::AtomicISub:
|
||||
case Op::AtomicSMin:
|
||||
@@ -2930,6 +2931,8 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
result.value.uv[0] |= value.value.uv[0];
|
||||
else if(opdata.op == Op::AtomicXor)
|
||||
result.value.uv[0] ^= value.value.uv[0];
|
||||
else if(opdata.op == Op::AtomicFAddEXT)
|
||||
result.value.fv[0] += value.value.fv[0];
|
||||
|
||||
// write the new value
|
||||
if(ptr.members.empty())
|
||||
@@ -3083,7 +3086,6 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
break;
|
||||
}
|
||||
|
||||
case Op::AtomicFAddEXT:
|
||||
case Op::GroupIAddNonUniformAMD:
|
||||
case Op::GroupFAddNonUniformAMD:
|
||||
case Op::GroupFMinNonUniformAMD:
|
||||
|
||||
@@ -208,7 +208,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const
|
||||
ext == "SPV_EXT_fragment_invocation_density" ||
|
||||
ext == "SPV_KHR_no_integer_wrap_decoration" || ext == "SPV_KHR_float_controls" ||
|
||||
ext == "SPV_KHR_shader_clock" || ext == "SPV_KHR_non_semantic_info" ||
|
||||
ext == "SPV_KHR_terminate_invocation")
|
||||
ext == "SPV_KHR_terminate_invocation" || ext == "SPV_EXT_shader_atomic_float_add")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -286,7 +286,7 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const
|
||||
case Capability::VulkanMemoryModel:
|
||||
case Capability::VulkanMemoryModelDeviceScope:
|
||||
case Capability::DemoteToHelperInvocationEXT:
|
||||
case Capability::Float64:
|
||||
case Capability::AtomicFloat32AddEXT:
|
||||
{
|
||||
supported = true;
|
||||
break;
|
||||
@@ -307,12 +307,10 @@ void Reflector::CheckDebuggable(bool &debuggable, rdcstr &debugStatus) const
|
||||
case Capability::StorageBuffer8BitAccess:
|
||||
case Capability::UniformAndStorageBuffer8BitAccess:
|
||||
case Capability::StoragePushConstant8:
|
||||
|
||||
// atomics
|
||||
case Capability::Float64:
|
||||
case Capability::AtomicFloat64AddEXT:
|
||||
case Capability::Int64Atomics:
|
||||
case Capability::Int64ImageEXT:
|
||||
case Capability::AtomicFloat32AddEXT:
|
||||
case Capability::AtomicFloat64AddEXT:
|
||||
|
||||
// physical pointers
|
||||
case Capability::PhysicalStorageBufferAddresses:
|
||||
|
||||
@@ -927,6 +927,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSamplerYcbcrConversionFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceScalarBlockLayoutFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicInt64Features);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderClockFeaturesKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderCorePropertiesAMD);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT);
|
||||
@@ -1242,6 +1243,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64Features);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD);
|
||||
DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT);
|
||||
|
||||
@@ -898,6 +898,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME, VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME, VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME,
|
||||
VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION,
|
||||
|
||||
@@ -313,6 +313,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, \
|
||||
VkPhysicalDeviceShaderAtomicInt64Features); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, \
|
||||
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, \
|
||||
VkPhysicalDeviceShaderCorePropertiesAMD); \
|
||||
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR, \
|
||||
@@ -671,7 +673,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_KHR: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT: \
|
||||
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL: \
|
||||
|
||||
@@ -689,6 +689,10 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, \
|
||||
VkPhysicalDeviceScalarBlockLayoutFeatures) \
|
||||
\
|
||||
/* VK_EXT_shader_atomic_float */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT, \
|
||||
VkPhysicalDeviceShaderAtomicFloatFeaturesEXT) \
|
||||
\
|
||||
/* VK_EXT_shader_demote_to_helper_invocation */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT, \
|
||||
VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT) \
|
||||
@@ -1140,9 +1144,6 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT) \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT) \
|
||||
\
|
||||
/* VK_EXT_shader_atomic_float */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT) \
|
||||
\
|
||||
/* VK_EXT_shader_image_atomic_int64 */ \
|
||||
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT) \
|
||||
\
|
||||
@@ -7692,6 +7693,33 @@ void Deserialise(const VkSamplerYcbcrConversionImageFormatProperties &el)
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(shaderBufferFloat32Atomics);
|
||||
SERIALISE_MEMBER(shaderBufferFloat32AtomicAdd);
|
||||
SERIALISE_MEMBER(shaderBufferFloat64Atomics);
|
||||
SERIALISE_MEMBER(shaderBufferFloat64AtomicAdd);
|
||||
SERIALISE_MEMBER(shaderSharedFloat32Atomics);
|
||||
SERIALISE_MEMBER(shaderSharedFloat32AtomicAdd);
|
||||
SERIALISE_MEMBER(shaderSharedFloat64Atomics);
|
||||
SERIALISE_MEMBER(shaderSharedFloat64AtomicAdd);
|
||||
SERIALISE_MEMBER(shaderImageFloat32Atomics);
|
||||
SERIALISE_MEMBER(shaderImageFloat32AtomicAdd);
|
||||
SERIALISE_MEMBER(sparseImageFloat32Atomics);
|
||||
SERIALISE_MEMBER(sparseImageFloat32AtomicAdd);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Deserialise(const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &el)
|
||||
{
|
||||
DeserialiseNext(el.pNext);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkPhysicalDeviceShaderAtomicInt64Features &el)
|
||||
{
|
||||
@@ -8962,6 +8990,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSamplerYcbcrConversionFeatures);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceScalarBlockLayoutFeatures);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicInt64Features);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderClockFeaturesKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderCorePropertiesAMD);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT);
|
||||
|
||||
@@ -2652,6 +2652,24 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
CHECK_PHYS_EXT_FEATURE(robustImageAccess);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
|
||||
BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceShaderAtomicFloatFeaturesEXT,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT);
|
||||
{
|
||||
CHECK_PHYS_EXT_FEATURE(shaderBufferFloat32Atomics);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderBufferFloat32AtomicAdd);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderBufferFloat64Atomics);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderBufferFloat64AtomicAdd);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderSharedFloat32Atomics);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderSharedFloat32AtomicAdd);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderSharedFloat64Atomics);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderSharedFloat64AtomicAdd);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderImageFloat32Atomics);
|
||||
CHECK_PHYS_EXT_FEATURE(shaderImageFloat32AtomicAdd);
|
||||
CHECK_PHYS_EXT_FEATURE(sparseImageFloat32Atomics);
|
||||
CHECK_PHYS_EXT_FEATURE(sparseImageFloat32AtomicAdd);
|
||||
}
|
||||
END_PHYS_EXT_CHECK();
|
||||
}
|
||||
|
||||
if(availFeatures.depthClamp)
|
||||
|
||||
Reference in New Issue
Block a user