Releases: DiligentGraphics/DiligentCore
Diligent Engine - v2.5.6
This release significantly enhances Diligent Engine by introducing the WebGPU backend, making the web a first-class citizen in the Diligent Engine ecosystem. WebGPU is a modern graphics API specifically designed for the web, offering several key advantages over WebGL. These enhancements are now fully leveraged by Diligent Engine.
For full release notes, please visit Diligent Engine - v2.5.6 Release Notes.
API Changes
- Implemented WebGPU backend
- Added
EngineWebGPUCreateInfo - Added
IEngineFactoryWebGPUinterface - Added
RENDER_DEVICE_TYPE_WEBGPU,SHADER_SOURCE_LANGUAGE_WGSL,SHADER_VARIABLE_FLAG_UNFILTERABLE_FLOAT_TEXTURE_WEBGPU,
SHADER_VARIABLE_FLAG_NON_FILTERING_SAMPLER_WEBGPUenum values - Added
WEB_GPU_BINDING_TYPEenum,WebGPUResourceAttribsstruct, and
WebGPUResourceAttribs WebGPUAttribsmember toPipelineResourceDescstruct - Added WebGPU-specific interfaces (
IRenderDeviceWebGPU,IDeviceContextWebGPU, etc.)
- Added
- Enabled asynchronous shdare and pipeline state compilation (API255001)
- Added
AsyncShaderCompilationrender device feature - Added
pAsyncShaderCompilationThreadPoolandNumAsyncShaderCompilerThreadsmembers toEngineCreateInfostruct - Added
SHADER_COMPILE_FLAG_ASYNCHRONOUSandPSO_CREATE_FLAG_ASYNCHRONOUSflags - Added
SHADER_STATUSandPIPELINE_STATE_STATUSenums - Added
IShader::GetStatusandIPipelineState::GetStatusmethods
- Added
Diligent Engine - v2.5.5
This release packs a lot of new features and improvements - see complete list in the main repository.
API Changes
- Added
MultiDrawandMultiDrawIndexedcommands (API254006) - Added
SerializationDeviceGLInfostruct (API254005)- The
ValidateShadersmember allows disabling time-consuming shader compilation
- The
- Replaced
AnisotropicFilteringSupportedmember ofSamplerPropertiesstruct withMaxAnisotropy(API254004) - Added
TextureSubresourceViewsdevice feature (API254003) - Added device context rendering statistics (API254002)
- Added
DeviceContextStatsstruct - Added
IDeviceContext::ClearStatsandIDeviceContext::GetStatsmethods
- Added
IDeviceContext::TransitionShaderResources: removed unusedpPipelineStateparameter (API254001)
Diligent Engine - v2.5.4
Besides a number of API improvements (such as read-only depth buffers, texture component swizzle, shader constant buffer reflection) and bug fixes, this release enables the Dot Net support. Applications targeting Dot Net can use the NuGet package that implements the Core Diligent API.
A new tutorial demonstrates how to use the Diligent Engine in a Dot Net application.
API Changes
- Use thread group count X/Y/Z for mesh draw commands (API253012)
- Added
ShaderMacroArraystruct (API253011)- The
Macrosmember ofShaderCreateInfostruct is now of typeShaderMacroArray
- The
- Replaced
ResourceMappingDescwithResourceMappingCreateInfo(API253010)- Use
ResourceMappingCreateInfo::NumEntriesto define the number of entries instead of the trailing null entry
- Use
- Removed
ShaderCreateInfo::ppConversionStream(API253009) - Removed
ppCompilerOutputmember of theShaderCreateInfostruct and added it as parameter to theIRenderDevice::CreateShadermethod (API253008) - Added
IPipelineStateGL::GetGLProgramHandleandIShaderGL::GetGLShaderHandlemethods (API253007) - Enabled read-only depth-stencil buffers (API253006)
- Added
TEXTURE_VIEW_READ_ONLY_DEPTH_STENCILview type - Added
UseReadOnlyDSVmember toGraphicsPipelineDescstruct
- Added
- Added
PSO_CACHE_FLAGSenum andPipelineStateCacheDesc::Flagsmember (API253005) - Archiver and render state cache: added content version (API253004)
- Added
RenderDeviceShaderVersionInfostruct andRenderDeviceInfo::MaxShaderVersionmember (API253003) - Added texture component swizzle (API253002)
- Added
TEXTURE_COMPONENT_SWIZZLEenum andTextureComponentMappingstruct - Added
Swizzlemember toTextureViewDescstruct - Added
TextureComponentSwizzlemember toDeviceFeaturesstruct
- Added
- Added shader constant buffer reflection API (API253001)
- Added
SHADER_CODE_BASIC_TYPEandSHADER_CODE_VARIABLE_CLASSenums - Added
ShaderCodeVariableDescandShaderCodeBufferDescstructs - Added
IShader::GetConstantBufferDescmethod
- Added
Diligent Engine - v2.5.3
This release introduces a new major feature - render state cache.
The cache object (IRenderStateCache) provides methods to create shaders and pipeline states that are identical to the methods of the render device. However, for each call the cache attempts to find the object data (e.g. compiled shader bytecode, pipeline state data etc.) to avoid expensive operations (such as shader compilation). If the data is not found, the object is created and its data is added to the cache. The cache data can be requested from the cache, stored in a file and loaded next time.
Another major capability of the render state cache is hot shader reloading. The cache stores all data required to create shader objects, and when Reload method is called, the cache automatically detects which shaders need to be recompiled and which pipeline states need to be updated. The pipelines are updated transparently for the application.
A new tutorial demonstrates how to use the render state cache.
API Changes
- Added
RENDER_STATE_CACHE_LOG_LEVELenum, replacedEnableLoggingmember ofRenderStateCacheCreateInfostruct withLoggingLevel(API252009) - Added
IPipelineResourceSignature::CopyStaticResourcesandIPipelineState::CopyStaticResourcesmethods (API252008) - Added render state cache (
IRenderStateCacheinterface and related data types) (API252007) - Moved
UseCombinedTextureSamplersandCombinedSamplerSuffixmembers fromShaderCreateInfotoShaderDesc(API252006) - Added
IntanceLayerCountandppInstanceLayerNamesmembers to EngineVkCreateInfo struct (API252005) - Added
IgnoreDebugMessageCountandppIgnoreDebugMessageNamestoEngineVkCreateInfostruct (API252004) - Refactored archiver API (removed
IDeviceObjectArchiveandIArchive; enabled dearchiver
to load multiple archives to allow storing signatures and pipelines separately) (API252003) - Added
SET_SHADER_RESOURCES_FLAGSenum andFlagsparameter toIShaderResourceVariable::Set
andIShaderResourceVariable::SetArraymethods (API252002) - Added primitive topologies with adjacency (API252001)
Diligent Engine - v2.5.2
This release introduces an API for packaging render state objects (shaders, pipeline states, resource singatures, render passes) into archives. An object archive contains data optimized for run-time loading performance (shaders are compiled into optimized byte code and patched to match resource signatures, if necessary; internal pipeline resource layouts are initialized; all objects are verified for compatibility and correctness etc.). One archive may contain data for multiple backends (e.g. Direct3D12, Vulkan, OpenGL).
The two key new interfaces are IArchiver that packs resource states into an archive, and IDearchiver that unpacks the states from the archive at run time.
Among other improvements are bug fixes, pipeline state cache support and samplers with unnormalized coordinates.
Diligent Engine - v2.5.1
This release introduces the following major features:
- Variable rate shading gives applications control over the frequency at which pixel shading is performed, allowing applications to trade quality for performance and power savings.
- Sparse (aka partially resident or tiled) resources are large virtual resources only partially baked by the physical memory. Spare resources are very useful for handling large scenes such as open environments, terrain, in mega texturing techniques, etc.
- Emscripten platform support allows applications built with Diligent Engine to run in web browsers.
API Changes
- Added subsampled render targets for VRS (API Version 250011)
- Added sparse resources (API Version 250010)
- Updated API to use 64bit offsets for GPU memory (API Version 250009)
- Reworked draw indirect command attributes (moved buffers into the attribs structs), removed DrawMeshIndirectCount (API Version 250008)
- Enabled indirect multidraw commands (API Version 250007)
- Enabled variable rate shading (API Version 250006)
- Added
TransferQueueTimestampQueriesfeature (API Version 250005) - Added
RESOURCE_STATE_COMMONstate; addedSTATE_TRANSITION_FLAGSenum and replaced
StateTransitionDesc::UpdateResourceStatewithSTATE_TRANSITION_FLAGS Flags(API Version 250004) - Added
ComputeShaderPropertiesstruct (API Version 250003) - Added
IShaderResourceBinding::CheckResourcesmethod andSHADER_RESOURCE_VARIABLE_TYPE_FLAGSenum (API Version 250002) - Removed
IShaderResourceVariable::IsBoundwithIShaderResourceVariable::Get(API Version 250001)
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)
v2.2.a
- Implemented PSO compatibility: if two pipeline states share the same shader resource layout, they can use SRB objects interchangeably
- Fixed the following issues:
v2.2
- Enabled MacOS and iOS
v2.1.b
- Removed legacy Visual Studio solution and project files
- Added API reference