Diligent Engine - v2.5
A major release that introduces a number of significant improvements:
- Pipeline resource signatures enable applications to define explicit shader resource layouts that allow sharing shader resource binding objects between different pipeline states.
- Multiple immediate contexts is an abstraction over multiple command queues that enables e.g. async compute and parallel rendering.
- Inline ray-tracing is a powerful extension to ray tracing that allows casting rays from regular shaders (pixel, compute, etc.).
- Ray tracing on Metal is now also supported by Diligent Engine.
- Debug groups improve debugging and profiling experience.
- Wave operations enable sharing data between threads in one shader thread group.
- Tile shaders is a special type of shader currently only available on Metal that is similar to compute shader, but processes on-chip tile memory.
- Memoryless framebuffer attachments enable memory savings on mobile platforms.
API Changes
- Added
MISC_TEXTURE_FLAG_MEMORYLESSflag (API Version 250000) - Removed
RayTracing2device feature and addedRAY_TRACING_CAP_FLAGSenum (API Version 240099) - Added tile shaders (API Version 240098)
- Added
PIPELINE_TYPE_TILEandSHADER_TYPE_TILEenum values - Added
TileShadersdevice feature - Added
TilePipelineDesc,TilePipelineStateCreateInfoandDispatchTileAttribsstructs - Added
IRenderDevice::CreateTilePipelineState,IPipelineState::GetTilePipelineDesc,
IDeviceContext::DispatchTileandIDeviceContext::GetTileSizemethods
- Added
- Removed
GetNextFenceValue,GetCompletedFenceValue, andIsFenceSignaledmethods fromIRenderDeviceD3D12andIRenderDeviceVkinterfaces
as they are now inICommandQueueinterface (API Version 240097) - Added
ICommandQueueinterface,IDeviceContext::LockCommandQueueandIDeviceContext::UnlockCommandQueuemethods,
removed fence query methods fromIRenderDeviceVk,IRenderDeviceD3D12, andIRenderDeviceMtl(API Version 240096) - Added multiple immediate device contexts and refactored adapter queries (API Version 240095)
CommandQueueMaskmember ofTextureDesc,BufferDesc,PipelineStateDesc,TopLevelASDesc,
andBottomLevelASDesc, was renamed toImmediateContextMask- Added
pContextmember toTextureDataandBufferDatastructs to indicate which context to
use for initialization. - Removed
GetDeviceCapsandGetDevicePropertiesIDeviceContextmethods and added
GetDeviceInfoandGetAdapterInfomethods; addedRenderDeviceInfostruct. - Renamed
SamplerCapstoSamplerProperties,TextureCapstoTextureProperties; addedBufferProperties,RayTracingProperties, andMeshShaderProperties` structs - Removed
DeviceLimitsstruct - Removed
DeviceCapsstruct and moved its members toGraphicsAdapterInfoandRenderDeviceInfostructs - Added
NativeFencetoDeviceFeatures - Added
CommandQueueInfostruct - Added
COMMAND_QUEUE_TYPEandQUEUE_PRIORITYenums - Renamed
ShaderVersionstruct toVersion - Reworked
GraphicsAdapterInfostruct - Added
ImmediateContextCreateInfostruct andpImmediateContextInfo,NumImmediateContextsmembers toEngineCreateInfostruct - Added
AdapterIdandGraphicsAPIVersionmembers toEngineCreateInfostruct - Removed
DIRECT3D_FEATURE_LEVELenum - Added
FENCE_TYPEenum - Renamed
IFence::ResettoIFence::Signal; addedIFence::Waitmethod - Added
IEngineFactory::EnumerateAdaptersmethod - Added
DeviceContextDescstruct andIDeviceContext::GetDescmethod - Added
IDeviceContext::Beginmethod, renamedIDeviceContext::SignalFencetoIDeviceContext::EnqueueSignal
- Added debug annotations
IDeviceContext::BeginDebugGroup,IDeviceContext::EndDebugGroup,
IDeviceContext::InsertDebugLabel(API Version 240095) - Added
DefaultVariableMergeStagesmember toPipelineResourceLayoutDescstruct (API240094) - Added
IShaderResourceVariable::SetBufferRangeandIShaderResourceVariable::SetBufferOffsetmethods,
addedDeviceLimitsstruct (API240093) - Updated API to allow explicitly flushing/invlidating mapped buffer memory range :
addedMEMORY_PROPERTIESenum,IBuffer::GetMemoryProperties(),IBuffer::FlushMappedRange(),
andIBuffer::InvalidateMappedRange()methods (API240092) - Added
IDeviceContext::SetUserData()andIDeviceContext::GetUserData()methods (API240091) - Added
SHADER_VARIABLE_FLAGSenum andSHADER_VARIABLE_FLAGS Flagsmember to ShaderResourceVariableDesc struct (API240090) - Reworked validation options (API240089)
- Added
VALIDATION_FLAGSandD3D12_VALIDATION_FLAGSenums; renamedD3D11_DEBUG_FLAGStoD3D11_VALIDATION_FLAGS - Added
VALIDATION_FLAGS ValidationFlagsandbool EnableValidationtoEngineCreateInfo - Added
D3D12_VALIDATION_FLAGS D3D12ValidationFlagstoEngineD3D12CreateInfo; removedEnableDebugLayer,EnableGPUBasedValidation,
BreakOnError,BreakOnCorruption - Added
VALIDATION_LEVELenum andSetValidationLevel()create info structs' helper functions - Removed
EngineGLCreateInfo::CreateDebugContextmember (it is replaced withEnableValidation)
- Added
- Added
MtlThreadGroupSizeX,MtlThreadGroupSizeY, andMtlThreadGroupSizeZmembers to
DispatchComputeAttribsandDispatchComputeIndirectAttribsstructs (API Version 240088) - Added InstanceDataStepRate device feature (API Version 240087)
- Added WaveOp device feature (API Version 240086)
- Added UpdateSBT command (API Version 240085)
- Removed
EngineD3D12CreateInfo::NumCommandsToFlushCmdListandEngineVkCreateInfo::NumCommandsToFlushCmdBufferas flushing
the context based on the number of commands is unreasonable (API Version 240084) - Added pipeline resource signatures, enabled inline ray tracing, added indirect draw mesh command (API Version 240083)
- Replaced
IDeviceContext::ExecuteCommandList()withIDeviceContext::ExecuteCommandLists()method that takes
an array of command lists instead of one (API Version 240082) - Added
IDeviceObject::SetUserData()andIDeviceObject::GetUserData()methods (API Version 240081)