bRequiresVendorExtensionsForAtomics

bRequiresVendorExtensionsForAtomics

#Overview

name: bRequiresVendorExtensionsForAtomics

The value of this variable can be defined or overridden in .ini config files. 4 .ini config files referencing this setting variable.

It is referenced in 3 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of bRequiresVendorExtensionsForAtomics is to indicate whether a specific shader platform requires vendor extensions to support atomic operations. This setting is related to the rendering system, specifically the shader capabilities of different graphics hardware.

This setting variable is primarily used within the RHI (Rendering Hardware Interface) module of Unreal Engine 5. It’s part of the DataDrivenShaderPlatformInfo system, which provides information about various shader platforms’ capabilities.

The value of this variable is set during the parsing of data-driven shader information. It’s parsed in the ParseDataDrivenShaderInfo function within the FGenericDataDrivenShaderPlatformInfo class.

This variable interacts with other shader platform capability flags, such as bSupportsPrimitiveShaders, bSupportsUInt64ImageAtomics, and bSupportsNanite. It’s part of a larger set of flags that describe the features and requirements of different shader platforms.

Developers must be aware that this variable is platform-specific. Its value may differ depending on the target hardware and graphics API. When developing shaders or graphics features that use atomic operations, developers should check this flag to ensure compatibility across different platforms.

Best practices when using this variable include:

  1. Always check this flag before using atomic operations in shaders that need to work across multiple platforms.
  2. Consider providing alternative implementations for platforms that don’t support vendor extensions for atomics.
  3. Use the provided GetRequiresVendorExtensionsForAtomics function to retrieve the value, rather than accessing the variable directly.
  4. Be aware of the performance implications of using vendor extensions for atomics, and optimize accordingly.
  5. Keep up-to-date with graphics hardware and driver developments, as support for atomic operations without vendor extensions may change over time.

#Setting Variables

#References In INI files

Location: <Workspace>/Engine/Config/VulkanPC/DataDrivenPlatformInfo.ini:64, section: [ShaderPlatform VULKAN_SM5]

Location: <Workspace>/Engine/Config/VulkanPC/DataDrivenPlatformInfo.ini:183, section: [ShaderPlatform VULKAN_SM6]

Location: <Workspace>/Engine/Config/Windows/DataDrivenPlatformInfo.ini:57, section: [ShaderPlatform PCD3D_SM5]

Location: <Workspace>/Engine/Config/Windows/DataDrivenPlatformInfo.ini:113, section: [ShaderPlatform PCD3D_SM6]

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Source/Runtime/RHI/Private/DataDrivenShaderPlatformInfo.cpp:232

Scope (from outer to inner):

file
function     void FGenericDataDrivenShaderPlatformInfo::ParseDataDrivenShaderInfo

Source code excerpt:

	GET_SECTION_BOOL_HELPER(bSupportsPrimitiveShaders);
	GET_SECTION_BOOL_HELPER(bSupportsUInt64ImageAtomics);
	GET_SECTION_BOOL_HELPER(bRequiresVendorExtensionsForAtomics);
	GET_SECTION_BOOL_HELPER(bSupportsNanite);
	GET_SECTION_BOOL_HELPER(bSupportsLumenGI);
	GET_SECTION_BOOL_HELPER(bSupportsSSDIndirect);
	GET_SECTION_BOOL_HELPER(bSupportsTemporalHistoryUpscale);
	GET_SECTION_BOOL_HELPER(bSupportsRTIndexFromVS);
	GET_SECTION_BOOL_HELPER(bSupportsIntrinsicWaveOnce);

#Loc: <Workspace>/Engine/Source/Runtime/RHI/Public/DataDrivenShaderPlatformInfo.h:56

Scope (from outer to inner):

file
class        class FGenericDataDrivenShaderPlatformInfo

Source code excerpt:

	uint32 bSupportsPrimitiveShaders : 1;
	uint32 bSupportsUInt64ImageAtomics : 1;
	uint32 bRequiresVendorExtensionsForAtomics : 1;
	uint32 bSupportsNanite : 1;
	uint32 bSupportsLumenGI : 1;
	uint32 bSupportsSSDIndirect : 1;
	uint32 bSupportsTemporalHistoryUpscale : 1;
	uint32 bSupportsRTIndexFromVS : 1;
	uint32 bSupportsWaveOperations : int32(ERHIFeatureSupport::NumBits);

#Loc: <Workspace>/Engine/Source/Runtime/RHI/Public/DataDrivenShaderPlatformInfo.h:479

Scope (from outer to inner):

file
class        class FGenericDataDrivenShaderPlatformInfo
function     static const bool GetRequiresVendorExtensionsForAtomics

Source code excerpt:

	{
		check(IsValid(Platform));
		return Infos[Platform].bRequiresVendorExtensionsForAtomics;
	}

	static FORCEINLINE_DEBUGGABLE const bool GetSupportsNanite(const FStaticShaderPlatform Platform)
	{
		check(IsValid(Platform));
		return Infos[Platform].bSupportsNanite;