A modern cross-platform low-level graphics API
This release packs a lot of new features and improvements - see complete list in the main repository.
MultiDraw
and MultiDrawIndexed
commands (API254006)SerializationDeviceGLInfo
struct (API254005)
ValidateShaders
member allows disabling time-consuming shader compilationAnisotropicFilteringSupported
member of SamplerProperties
struct with MaxAnisotropy
(API254004)TextureSubresourceViews
device feature (API254003)DeviceContextStats
structIDeviceContext::ClearStats
and IDeviceContext::GetStats
methodsIDeviceContext::TransitionShaderResources
: removed unused pPipelineState
parameter (API254001)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.
ShaderMacroArray
struct (API253011)
Macros
member of ShaderCreateInfo
struct is now of type ShaderMacroArray
ResourceMappingDesc
with ResourceMappingCreateInfo
(API253010)
ResourceMappingCreateInfo::NumEntries
to define the number of entries instead of the trailing null entryShaderCreateInfo::ppConversionStream
(API253009)ppCompilerOutput
member of the ShaderCreateInfo
struct and added it as parameter to the IRenderDevice::CreateShader
method (API253008)IPipelineStateGL::GetGLProgramHandle
and IShaderGL::GetGLShaderHandle
methods (API253007)TEXTURE_VIEW_READ_ONLY_DEPTH_STENCIL
view typeUseReadOnlyDSV
member to GraphicsPipelineDesc
structPSO_CACHE_FLAGS
enum and PipelineStateCacheDesc::Flags
member (API253005)RenderDeviceShaderVersionInfo
struct and RenderDeviceInfo::MaxShaderVersion
member (API253003)TEXTURE_COMPONENT_SWIZZLE
enum and TextureComponentMapping
structSwizzle
member to TextureViewDesc
structTextureComponentSwizzle
member to DeviceFeatures
structSHADER_CODE_BASIC_TYPE
and SHADER_CODE_VARIABLE_CLASS
enumsShaderCodeVariableDesc
and ShaderCodeBufferDesc
structsIShader::GetConstantBufferDesc
methodThis 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.
RENDER_STATE_CACHE_LOG_LEVEL
enum, replaced EnableLogging
member of RenderStateCacheCreateInfo
struct with LoggingLevel
(API252009)IPipelineResourceSignature::CopyStaticResources
and IPipelineState::CopyStaticResources
methods (API252008)IRenderStateCache
interface and related data types) (API252007)UseCombinedTextureSamplers
and CombinedSamplerSuffix
members from ShaderCreateInfo
to ShaderDesc
(API252006)IntanceLayerCount
and ppInstanceLayerNames
members to EngineVkCreateInfo struct (API252005)IgnoreDebugMessageCount
and ppIgnoreDebugMessageNames
to EngineVkCreateInfo
struct (API252004)IDeviceObjectArchive
and IArchive
; enabled dearchiver
to load multiple archives to allow storing signatures and pipelines separately) (API252003)SET_SHADER_RESOURCES_FLAGS
enum and Flags
parameter to IShaderResourceVariable::Set
and IShaderResourceVariable::SetArray
methods (API252002)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.
This release introduces the following major features:
TransferQueueTimestampQueries
feature (API Version 250005)RESOURCE_STATE_COMMON
state; added STATE_TRANSITION_FLAGS
enum and replaced
StateTransitionDesc::UpdateResourceState
with STATE_TRANSITION_FLAGS Flags
(API Version 250004)ComputeShaderProperties
struct (API Version 250003)IShaderResourceBinding::CheckResources
method and SHADER_RESOURCE_VARIABLE_TYPE_FLAGS
enum (API Version 250002)IShaderResourceVariable::IsBound
with IShaderResourceVariable::Get
(API Version 250001)A major release that introduces a number of significant improvements:
MISC_TEXTURE_FLAG_MEMORYLESS
flag (API Version 250000)RayTracing2
device feature and added RAY_TRACING_CAP_FLAGS
enum (API Version 240099)PIPELINE_TYPE_TILE
and SHADER_TYPE_TILE
enum valuesTileShaders
device featureTilePipelineDesc
, TilePipelineStateCreateInfo
and DispatchTileAttribs
structsIRenderDevice::CreateTilePipelineState
, IPipelineState::GetTilePipelineDesc
,
IDeviceContext::DispatchTile
and IDeviceContext::GetTileSize
methodsGetNextFenceValue
, GetCompletedFenceValue
, and IsFenceSignaled
methods from IRenderDeviceD3D12
and IRenderDeviceVk
interfaces
as they are now in ICommandQueue
interface (API Version 240097)ICommandQueue
interface, IDeviceContext::LockCommandQueue
and IDeviceContext::UnlockCommandQueue
methods,
removed fence query methods from IRenderDeviceVk
, IRenderDeviceD3D12
, and IRenderDeviceMtl
(API Version 240096)CommandQueueMask
member of TextureDesc
, BufferDesc
, PipelineStateDesc
, TopLevelASDesc
,
and BottomLevelASDesc
, was renamed to ImmediateContextMask
pContext
member to TextureData
and BufferData
structs to indicate which context to
use for initialization.GetDeviceCaps
and GetDeviceProperties
IDeviceContext
methods and added
GetDeviceInfo
and GetAdapterInfo
methods; added RenderDeviceInfo
struct.SamplerCaps
to SamplerProperties,
TextureCapsto
TextureProperties; added
BufferProperties,
RayTracingProperties, and
MeshShaderProperties` structsDeviceLimits
structDeviceCaps
struct and moved its members to GraphicsAdapterInfo
and RenderDeviceInfo
structsNativeFence
to DeviceFeatures
CommandQueueInfo
structCOMMAND_QUEUE_TYPE
and QUEUE_PRIORITY
enumsShaderVersion
struct to Version
GraphicsAdapterInfo
structImmediateContextCreateInfo
struct and pImmediateContextInfo
, NumImmediateContexts
members to EngineCreateInfo
structAdapterId
and GraphicsAPIVersion
members to EngineCreateInfo
structDIRECT3D_FEATURE_LEVEL
enumFENCE_TYPE
enumIFence::Reset
to IFence::Signal
; added IFence::Wait
methodIEngineFactory::EnumerateAdapters
methodDeviceContextDesc
struct and IDeviceContext::GetDesc
methodIDeviceContext::Begin
method, renamed IDeviceContext::SignalFence
to IDeviceContext::EnqueueSignal
IDeviceContext::BeginDebugGroup
, IDeviceContext::EndDebugGroup
,
IDeviceContext::InsertDebugLabel
(API Version 240095)DefaultVariableMergeStages
member to PipelineResourceLayoutDesc
struct (API240094)IShaderResourceVariable::SetBufferRange
and IShaderResourceVariable::SetBufferOffset
methods,
added DeviceLimits
struct (API240093)MEMORY_PROPERTIES
enum, IBuffer::GetMemoryProperties()
, IBuffer::FlushMappedRange()
,
and IBuffer::InvalidateMappedRange()
methods (API240092)IDeviceContext::SetUserData()
and IDeviceContext::GetUserData()
methods (API240091)SHADER_VARIABLE_FLAGS
enum and SHADER_VARIABLE_FLAGS Flags
member to ShaderResourceVariableDesc struct (API240090)VALIDATION_FLAGS
and D3D12_VALIDATION_FLAGS
enums; renamed D3D11_DEBUG_FLAGS
to D3D11_VALIDATION_FLAGS
VALIDATION_FLAGS ValidationFlags
and bool EnableValidation
to EngineCreateInfo
D3D12_VALIDATION_FLAGS D3D12ValidationFlags
to EngineD3D12CreateInfo
; removed EnableDebugLayer
, EnableGPUBasedValidation
,
BreakOnError
, BreakOnCorruption
VALIDATION_LEVEL
enum and SetValidationLevel()
create info structs' helper functionsEngineGLCreateInfo::CreateDebugContext
member (it is replaced with EnableValidation
)MtlThreadGroupSizeX
, MtlThreadGroupSizeY
, and MtlThreadGroupSizeZ
members to
DispatchComputeAttribs
and DispatchComputeIndirectAttribs
structs (API Version 240088)EngineD3D12CreateInfo::NumCommandsToFlushCmdList
and EngineVkCreateInfo::NumCommandsToFlushCmdBuffer
as flushing
the context based on the number of commands is unreasonable (API Version 240084)IDeviceContext::ExecuteCommandList()
with IDeviceContext::ExecuteCommandLists()
method that takes
an array of command lists instead of one (API Version 240082)IDeviceObject::SetUserData()
and IDeviceObject::GetUserData()
methods (API Version 240081)