Skip to content

Releases: DiligentGraphics/DiligentCore

Diligent Engine - v2.5.6

02 Sep 05:11
Compare
Choose a tag to compare

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 IEngineFactoryWebGPU interface
    • Added RENDER_DEVICE_TYPE_WEBGPU, SHADER_SOURCE_LANGUAGE_WGSL, SHADER_VARIABLE_FLAG_UNFILTERABLE_FLOAT_TEXTURE_WEBGPU,
      SHADER_VARIABLE_FLAG_NON_FILTERING_SAMPLER_WEBGPU enum values
    • Added WEB_GPU_BINDING_TYPE enum, WebGPUResourceAttribs struct, and
      WebGPUResourceAttribs WebGPUAttribs member to PipelineResourceDesc struct
    • Added WebGPU-specific interfaces (IRenderDeviceWebGPU, IDeviceContextWebGPU, etc.)
  • Enabled asynchronous shdare and pipeline state compilation (API255001)
    • Added AsyncShaderCompilation render device feature
    • Added pAsyncShaderCompilationThreadPool and NumAsyncShaderCompilerThreads members to EngineCreateInfo struct
    • Added SHADER_COMPILE_FLAG_ASYNCHRONOUS and PSO_CREATE_FLAG_ASYNCHRONOUS flags
    • Added SHADER_STATUS and PIPELINE_STATE_STATUS enums
    • Added IShader::GetStatus and IPipelineState::GetStatus methods

Diligent Engine - v2.5.5

06 May 05:16
Compare
Choose a tag to compare

This release packs a lot of new features and improvements - see complete list in the main repository.

API Changes

  • Added MultiDraw and MultiDrawIndexed commands (API254006)
  • Added SerializationDeviceGLInfo struct (API254005)
    • The ValidateShaders member allows disabling time-consuming shader compilation
  • Replaced AnisotropicFilteringSupported member of SamplerProperties struct with MaxAnisotropy (API254004)
  • Added TextureSubresourceViews device feature (API254003)
  • Added device context rendering statistics (API254002)
    • Added DeviceContextStats struct
    • Added IDeviceContext::ClearStats and IDeviceContext::GetStats methods
  • IDeviceContext::TransitionShaderResources: removed unused pPipelineState parameter (API254001)

Diligent Engine - v2.5.4

08 Aug 22:40
Compare
Choose a tag to compare

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 ShaderMacroArray struct (API253011)
    • The Macros member of ShaderCreateInfo struct is now of type ShaderMacroArray
  • Replaced ResourceMappingDesc with ResourceMappingCreateInfo (API253010)
    • Use ResourceMappingCreateInfo::NumEntries to define the number of entries instead of the trailing null entry
  • Removed ShaderCreateInfo::ppConversionStream (API253009)
  • Removed ppCompilerOutput member of the ShaderCreateInfo struct and added it as parameter to the IRenderDevice::CreateShader method (API253008)
  • Added IPipelineStateGL::GetGLProgramHandle and IShaderGL::GetGLShaderHandle methods (API253007)
  • Enabled read-only depth-stencil buffers (API253006)
    • Added TEXTURE_VIEW_READ_ONLY_DEPTH_STENCIL view type
    • Added UseReadOnlyDSV member to GraphicsPipelineDesc struct
  • Added PSO_CACHE_FLAGS enum and PipelineStateCacheDesc::Flags member (API253005)
  • Archiver and render state cache: added content version (API253004)
  • Added RenderDeviceShaderVersionInfo struct and RenderDeviceInfo::MaxShaderVersion member (API253003)
  • Added texture component swizzle (API253002)
    • Added TEXTURE_COMPONENT_SWIZZLE enum and TextureComponentMapping struct
    • Added Swizzle member to TextureViewDesc struct
    • Added TextureComponentSwizzle member to DeviceFeatures struct
  • Added shader constant buffer reflection API (API253001)
    • Added SHADER_CODE_BASIC_TYPE and SHADER_CODE_VARIABLE_CLASS enums
    • Added ShaderCodeVariableDesc and ShaderCodeBufferDesc structs
    • Added IShader::GetConstantBufferDesc method

Diligent Engine - v2.5.3

05 Dec 00:10
Compare
Choose a tag to compare

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_LEVEL enum, replaced EnableLogging member of RenderStateCacheCreateInfo struct with LoggingLevel (API252009)
  • Added IPipelineResourceSignature::CopyStaticResources and IPipelineState::CopyStaticResources methods (API252008)
  • Added render state cache (IRenderStateCache interface and related data types) (API252007)
  • Moved UseCombinedTextureSamplers and CombinedSamplerSuffix members from ShaderCreateInfo to ShaderDesc (API252006)
  • Added IntanceLayerCount and ppInstanceLayerNames members to EngineVkCreateInfo struct (API252005)
  • Added IgnoreDebugMessageCount and ppIgnoreDebugMessageNames to EngineVkCreateInfo struct (API252004)
  • Refactored archiver API (removed IDeviceObjectArchive and IArchive; enabled dearchiver
    to load multiple archives to allow storing signatures and pipelines separately) (API252003)
  • Added SET_SHADER_RESOURCES_FLAGS enum and Flags parameter to IShaderResourceVariable::Set
    and IShaderResourceVariable::SetArray methods (API252002)
  • Added primitive topologies with adjacency (API252001)

Diligent Engine - v2.5.2

02 Apr 23:26
Compare
Choose a tag to compare

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

12 Oct 02:52
Compare
Choose a tag to compare

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 TransferQueueTimestampQueries feature (API Version 250005)
  • Added RESOURCE_STATE_COMMON state; added STATE_TRANSITION_FLAGS enum and replaced
    StateTransitionDesc::UpdateResourceState with STATE_TRANSITION_FLAGS Flags (API Version 250004)
  • Added ComputeShaderProperties struct (API Version 250003)
  • Added IShaderResourceBinding::CheckResources method and SHADER_RESOURCE_VARIABLE_TYPE_FLAGS enum (API Version 250002)
  • Removed IShaderResourceVariable::IsBound with IShaderResourceVariable::Get (API Version 250001)

Diligent Engine - v2.5

05 Jun 05:16
Compare
Choose a tag to compare

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 added RAY_TRACING_CAP_FLAGS enum (API Version 240099)
  • Added tile shaders (API Version 240098)
    • Added PIPELINE_TYPE_TILE and SHADER_TYPE_TILE enum values
    • Added TileShaders device feature
    • Added TilePipelineDesc, TilePipelineStateCreateInfo and DispatchTileAttribs structs
    • Added IRenderDevice::CreateTilePipelineState, IPipelineState::GetTilePipelineDesc,
      IDeviceContext::DispatchTile and IDeviceContext::GetTileSize methods
  • Removed GetNextFenceValue, GetCompletedFenceValue, and IsFenceSignaled methods from IRenderDeviceD3D12 and IRenderDeviceVk interfaces
    as they are now in ICommandQueue interface (API Version 240097)
  • Added ICommandQueue interface, IDeviceContext::LockCommandQueue and IDeviceContext::UnlockCommandQueue methods,
    removed fence query methods from IRenderDeviceVk, IRenderDeviceD3D12, and IRenderDeviceMtl (API Version 240096)
  • Added multiple immediate device contexts and refactored adapter queries (API Version 240095)
    • CommandQueueMask member of TextureDesc, BufferDesc, PipelineStateDesc, TopLevelASDesc,
      and BottomLevelASDesc, was renamed to ImmediateContextMask
    • Added pContext member to TextureData and BufferData structs to indicate which context to
      use for initialization.
    • Removed GetDeviceCaps and GetDeviceProperties IDeviceContext methods and added
      GetDeviceInfo and GetAdapterInfo methods; added RenderDeviceInfo struct.
    • Renamed SamplerCaps to SamplerProperties, TextureCapstoTextureProperties; added BufferProperties, RayTracingProperties, and MeshShaderProperties` structs
    • Removed DeviceLimits struct
    • Removed DeviceCaps struct and moved its members to GraphicsAdapterInfo and RenderDeviceInfo structs
    • Added NativeFence to DeviceFeatures
    • Added CommandQueueInfo struct
    • Added COMMAND_QUEUE_TYPE and QUEUE_PRIORITY enums
    • Renamed ShaderVersion struct to Version
    • Reworked GraphicsAdapterInfo struct
    • Added ImmediateContextCreateInfo struct and pImmediateContextInfo, NumImmediateContexts members to EngineCreateInfo struct
    • Added AdapterId and GraphicsAPIVersion members to EngineCreateInfo struct
    • Removed DIRECT3D_FEATURE_LEVEL enum
    • Added FENCE_TYPE enum
    • Renamed IFence::Reset to IFence::Signal; added IFence::Wait method
    • Added IEngineFactory::EnumerateAdapters method
    • Added DeviceContextDesc struct and IDeviceContext::GetDesc method
    • Added IDeviceContext::Begin method, renamed IDeviceContext::SignalFence to IDeviceContext::EnqueueSignal
  • Added debug annotations IDeviceContext::BeginDebugGroup, IDeviceContext::EndDebugGroup,
    IDeviceContext::InsertDebugLabel (API Version 240095)
  • Added DefaultVariableMergeStages member to PipelineResourceLayoutDesc struct (API240094)
  • Added IShaderResourceVariable::SetBufferRange and IShaderResourceVariable::SetBufferOffset methods,
    added DeviceLimits struct (API240093)
  • Updated API to allow explicitly flushing/invlidating mapped buffer memory range :
    added MEMORY_PROPERTIES enum, IBuffer::GetMemoryProperties(), IBuffer::FlushMappedRange(),
    and IBuffer::InvalidateMappedRange() methods (API240092)
  • Added IDeviceContext::SetUserData() and IDeviceContext::GetUserData() methods (API240091)
  • Added SHADER_VARIABLE_FLAGS enum and SHADER_VARIABLE_FLAGS Flags member to ShaderResourceVariableDesc struct (API240090)
  • Reworked validation options (API240089)
    • Added VALIDATION_FLAGS and D3D12_VALIDATION_FLAGS enums; renamed D3D11_DEBUG_FLAGS to D3D11_VALIDATION_FLAGS
    • Added VALIDATION_FLAGS ValidationFlags and bool EnableValidation to EngineCreateInfo
    • Added D3D12_VALIDATION_FLAGS D3D12ValidationFlags to EngineD3D12CreateInfo; removed EnableDebugLayer, EnableGPUBasedValidation,
      BreakOnError, BreakOnCorruption
    • Added VALIDATION_LEVEL enum and SetValidationLevel() create info structs' helper functions
    • Removed EngineGLCreateInfo::CreateDebugContext member (it is replaced with EnableValidation)
  • Added MtlThreadGroupSizeX, MtlThreadGroupSizeY, and MtlThreadGroupSizeZ members to
    DispatchComputeAttribs and DispatchComputeIndirectAttribs 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 and EngineVkCreateInfo::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() with IDeviceContext::ExecuteCommandLists() method that takes
    an array of command lists instead of one (API Version 240082)
  • Added IDeviceObject::SetUserData() and IDeviceObject::GetUserData() methods (API Version 240081)

v2.2.a

14 Mar 03:44
Compare
Choose a tag to compare

v2.2

20 Feb 17:24
Compare
Choose a tag to compare
  • Enabled MacOS and iOS

v2.1.b

16 Jan 05:20
955d18b
Compare
Choose a tag to compare
  • Removed legacy Visual Studio solution and project files
  • Added API reference