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_MEMORYLESS
flag (API Version 250000) - Removed
RayTracing2
device feature and addedRAY_TRACING_CAP_FLAGS
enum (API Version 240099) - Added tile shaders (API Version 240098)
- Added
PIPELINE_TYPE_TILE
andSHADER_TYPE_TILE
enum values - Added
TileShaders
device feature - Added
TilePipelineDesc
,TilePipelineStateCreateInfo
andDispatchTileAttribs
structs - Added
IRenderDevice::CreateTilePipelineState
,IPipelineState::GetTilePipelineDesc
,
IDeviceContext::DispatchTile
andIDeviceContext::GetTileSize
methods
- Added
- Removed
GetNextFenceValue
,GetCompletedFenceValue
, andIsFenceSignaled
methods fromIRenderDeviceD3D12
andIRenderDeviceVk
interfaces
as they are now inICommandQueue
interface (API Version 240097) - Added
ICommandQueue
interface,IDeviceContext::LockCommandQueue
andIDeviceContext::UnlockCommandQueue
methods,
removed fence query methods fromIRenderDeviceVk
,IRenderDeviceD3D12
, andIRenderDeviceMtl
(API Version 240096) - Added multiple immediate device contexts and refactored adapter queries (API Version 240095)
CommandQueueMask
member ofTextureDesc
,BufferDesc
,PipelineStateDesc
,TopLevelASDesc
,
andBottomLevelASDesc
, was renamed toImmediateContextMask
- Added
pContext
member toTextureData
andBufferData
structs to indicate which context to
use for initialization. - Removed
GetDeviceCaps
andGetDeviceProperties
IDeviceContext
methods and added
GetDeviceInfo
andGetAdapterInfo
methods; addedRenderDeviceInfo
struct. - Renamed
SamplerCaps
toSamplerProperties,
TextureCapsto
TextureProperties; added
BufferProperties,
RayTracingProperties, and
MeshShaderProperties` structs - Removed
DeviceLimits
struct - Removed
DeviceCaps
struct and moved its members toGraphicsAdapterInfo
andRenderDeviceInfo
structs - Added
NativeFence
toDeviceFeatures
- Added
CommandQueueInfo
struct - Added
COMMAND_QUEUE_TYPE
andQUEUE_PRIORITY
enums - Renamed
ShaderVersion
struct toVersion
- Reworked
GraphicsAdapterInfo
struct - Added
ImmediateContextCreateInfo
struct andpImmediateContextInfo
,NumImmediateContexts
members toEngineCreateInfo
struct - Added
AdapterId
andGraphicsAPIVersion
members toEngineCreateInfo
struct - Removed
DIRECT3D_FEATURE_LEVEL
enum - Added
FENCE_TYPE
enum - Renamed
IFence::Reset
toIFence::Signal
; addedIFence::Wait
method - Added
IEngineFactory::EnumerateAdapters
method - Added
DeviceContextDesc
struct andIDeviceContext::GetDesc
method - Added
IDeviceContext::Begin
method, renamedIDeviceContext::SignalFence
toIDeviceContext::EnqueueSignal
- Added debug annotations
IDeviceContext::BeginDebugGroup
,IDeviceContext::EndDebugGroup
,
IDeviceContext::InsertDebugLabel
(API Version 240095) - Added
DefaultVariableMergeStages
member toPipelineResourceLayoutDesc
struct (API240094) - Added
IShaderResourceVariable::SetBufferRange
andIShaderResourceVariable::SetBufferOffset
methods,
addedDeviceLimits
struct (API240093) - Updated API to allow explicitly flushing/invlidating mapped buffer memory range :
addedMEMORY_PROPERTIES
enum,IBuffer::GetMemoryProperties()
,IBuffer::FlushMappedRange()
,
andIBuffer::InvalidateMappedRange()
methods (API240092) - Added
IDeviceContext::SetUserData()
andIDeviceContext::GetUserData()
methods (API240091) - Added
SHADER_VARIABLE_FLAGS
enum andSHADER_VARIABLE_FLAGS Flags
member to ShaderResourceVariableDesc struct (API240090) - Reworked validation options (API240089)
- Added
VALIDATION_FLAGS
andD3D12_VALIDATION_FLAGS
enums; renamedD3D11_DEBUG_FLAGS
toD3D11_VALIDATION_FLAGS
- Added
VALIDATION_FLAGS ValidationFlags
andbool EnableValidation
toEngineCreateInfo
- Added
D3D12_VALIDATION_FLAGS D3D12ValidationFlags
toEngineD3D12CreateInfo
; removedEnableDebugLayer
,EnableGPUBasedValidation
,
BreakOnError
,BreakOnCorruption
- Added
VALIDATION_LEVEL
enum andSetValidationLevel()
create info structs' helper functions - Removed
EngineGLCreateInfo::CreateDebugContext
member (it is replaced withEnableValidation
)
- Added
- Added
MtlThreadGroupSizeX
,MtlThreadGroupSizeY
, andMtlThreadGroupSizeZ
members to
DispatchComputeAttribs
andDispatchComputeIndirectAttribs
structs (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::NumCommandsToFlushCmdList
andEngineVkCreateInfo::NumCommandsToFlushCmdBuffer
as 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)
Samples and tutorials
New Tutorial 22 - Hybrid Rendering demonstrates how to implement a simple hybrid renderer that combines rasterization with ray tracing. The tutorial runs on DirectX12, Vulkan and Metal.