- 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, andWebGPUResourceAttribs WebGPUAttribs
member toPipelineResourceDesc
struct - Added WebGPU-specific interfaces (
IRenderDeviceWebGPU
,IDeviceContextWebGPU
, etc.)
- Added
- Enabled asynchronous shdare and pipeline state compilation (API255001)
- Added
AsyncShaderCompilation
render device feature - Added
pAsyncShaderCompilationThreadPool
andNumAsyncShaderCompilerThreads
members toEngineCreateInfo
struct - Added
SHADER_COMPILE_FLAG_ASYNCHRONOUS
andPSO_CREATE_FLAG_ASYNCHRONOUS
flags - Added
SHADER_STATUS
andPIPELINE_STATE_STATUS
enums - Added
IShader::GetStatus
andIPipelineState::GetStatus
methods
- Added
- Added
MultiDraw
andMultiDrawIndexed
commands (API254006) - Added
SerializationDeviceGLInfo
struct (API254005)- The
ValidateShaders
member allows disabling time-consuming shader compilation
- The
- Replaced
AnisotropicFilteringSupported
member ofSamplerProperties
struct withMaxAnisotropy
(API254004) - Added
TextureSubresourceViews
device feature (API254003) - Added device context rendering statistics (API254002)
- Added
DeviceContextStats
struct - Added
IDeviceContext::ClearStats
andIDeviceContext::GetStats
methods
- Added
IDeviceContext::TransitionShaderResources
: removed unusedpPipelineState
parameter (API254001)
- Use thread group count X/Y/Z for mesh draw commands (API253012)
- Added
ShaderMacroArray
struct (API253011)- The
Macros
member ofShaderCreateInfo
struct is now of typeShaderMacroArray
- The
- Replaced
ResourceMappingDesc
withResourceMappingCreateInfo
(API253010)- Use
ResourceMappingCreateInfo::NumEntries
to define the number of entries instead of the trailing null entry
- Use
- Removed
ShaderCreateInfo::ppConversionStream
(API253009) - Removed
ppCompilerOutput
member of theShaderCreateInfo
struct and added it as parameter to theIRenderDevice::CreateShader
method (API253008) - Added
IPipelineStateGL::GetGLProgramHandle
andIShaderGL::GetGLShaderHandle
methods (API253007) - Enabled read-only depth-stencil buffers (API253006)
- Added
TEXTURE_VIEW_READ_ONLY_DEPTH_STENCIL
view type - Added
UseReadOnlyDSV
member toGraphicsPipelineDesc
struct
- Added
- Added
PSO_CACHE_FLAGS
enum andPipelineStateCacheDesc::Flags
member (API253005) - Archiver and render state cache: added content version (API253004)
- Added
RenderDeviceShaderVersionInfo
struct andRenderDeviceInfo::MaxShaderVersion
member (API253003) - Added texture component swizzle (API253002)
- Added
TEXTURE_COMPONENT_SWIZZLE
enum andTextureComponentMapping
struct - Added
Swizzle
member toTextureViewDesc
struct - Added
TextureComponentSwizzle
member toDeviceFeatures
struct
- Added
- Added shader constant buffer reflection API (API253001)
- Added
SHADER_CODE_BASIC_TYPE
andSHADER_CODE_VARIABLE_CLASS
enums - Added
ShaderCodeVariableDesc
andShaderCodeBufferDesc
structs - Added
IShader::GetConstantBufferDesc
method
- Added
- Added
RENDER_STATE_CACHE_LOG_LEVEL
enum, replacedEnableLogging
member ofRenderStateCacheCreateInfo
struct withLoggingLevel
(API252009) - Added
IPipelineResourceSignature::CopyStaticResources
andIPipelineState::CopyStaticResources
methods (API252008) - Added render state cache (
IRenderStateCache
interface and related data types) (API252007) - Moved
UseCombinedTextureSamplers
andCombinedSamplerSuffix
members fromShaderCreateInfo
toShaderDesc
(API252006) - Added
IntanceLayerCount
andppInstanceLayerNames
members to EngineVkCreateInfo struct (API252005) - Added
IgnoreDebugMessageCount
andppIgnoreDebugMessageNames
toEngineVkCreateInfo
struct (API252004) - Refactored archiver API (removed
IDeviceObjectArchive
andIArchive
; enabled dearchiver to load multiple archives to allow storing signatures and pipelines separately) (API252003) - Added
SET_SHADER_RESOURCES_FLAGS
enum andFlags
parameter toIShaderResourceVariable::Set
andIShaderResourceVariable::SetArray
methods (API252002) - Added primitive topologies with adjacency (API252001)
- Added
SamplerDesc::UnnormalizedCoords
parameter (API Version 250014) - Added device object serialization/deserialization (API Version 250013)
- Added pipeline state cache (API Version 250012)
- 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 replacedStateTransitionDesc::UpdateResourceState
withSTATE_TRANSITION_FLAGS Flags
(API Version 250004) - Added
ComputeShaderProperties
struct (API Version 250003) - Added
IShaderResourceBinding::CheckResources
method andSHADER_RESOURCE_VARIABLE_TYPE_FLAGS
enum (API Version 250002) - Removed
IShaderResourceVariable::IsBound
withIShaderResourceVariable::Get
(API Version 250001)
- 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 addedGetDeviceInfo
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/invalidating mapped buffer memory range :
added
MEMORY_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 toDispatchComputeAttribs
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)
-
Enabled ray tracing (API Version 240080)
-
Added
IDeviceContext::GetFrameNumber
method (API Version 240079) -
Added
ShaderResourceQueries
device feature andEngineGLCreateInfo::ForceNonSeparablePrograms
parameter (API Version 240078) -
Renamed
USAGE_STATIC
toUSAGE_IMMUTABLE
(API Version 240077) -
Renamed static samplers into immutable samplers (API Version 240076)
- Renamed
StaticSamplerDesc
->ImmutableSamplerDesc
- Renamed
PipelineResourceLayoutDesc::NumStaticSamplers
->PipelineResourceLayoutDesc::NumImmutableSamplers
- Renamed
PipelineResourceLayoutDesc::StaticSamplers
->PipelineResourceLayoutDesc::ImmutableSamplers
- Renamed
-
Refactored pipeline state creation (API Version 240075)
- Replaced
PipelineStateCreateInfo
withGraphicsPipelineStateCreateInfo
andComputePipelineStateCreateInfo
- Replaced
IRenderDevice::CreatePipelineState
withIRenderDevice::CreateGraphicsPipelineState
andIRenderDevice::CreateComputePipelineState
pVS
,pGS
,pHS
,pDS
,pPS
,pAS
,pMS
were moved fromGraphicsPipelineDesc
toGraphicsPipelineStateCreateInfo
GraphicsPipelineDesc GraphicsPipeline
was moved fromPipelineStateDesc
toGraphicsPipelineStateCreateInfo
pCS
is now a member ofComputePipelineStateCreateInfo
,ComputePipelineDesc
was removed- Added
IPipelineState::GetGraphicsPipelineDesc
method
Old API for graphics pipeline initialization:
PipelineStateCreateInfo PSOCreateInfo; PipelineStateDesc& PSODesc = PSOCreateInfo.PSODesc; PSODesc.GraphicsPipeline.pVS = pVS; PSODesc.GraphicsPipeline.pPS = pVS; // ... Device->CreatePipelineState(PSOCreateInfo, &pPSO);
New API for graphics pipeline initialization:
GraphicsPipelineStateCreateInfo PSOCreateInfo; // ... PSOCreateInfo.pVS = pVS; PSOCreateInfo.pPS = pVS; Device->CreateGraphicsPipelineState(PSOCreateInfo, &pPSO);
Old API for compute pipeline initialization:
PipelineStateCreateInfo PSOCreateInfo; PipelineStateDesc& PSODesc = PSOCreateInfo.PSODesc; PSODesc.ComputePipeline.pCS = pCS; // ... Device->CreatePipelineState(PSOCreateInfo, &pPSO);
New API for compute pipeline initialization:
ComputePipelineStateCreateInfo PSOCreateInfo; PSOCreateInfo.pCS = pCS; Device->CreateComputePipelineState(PSOCreateInfo, &pPSO);
- Replaced
-
Added
ShaderInt8
,ResourceBuffer8BitAccess
, andUniformBuffer8BitAccess
device features. (API Version 240074) -
Added
ShaderFloat16
,ResourceBuffer16BitAccess
,UniformBuffer16BitAccess
, andShaderInputOutput16
device features. (API Version 240073)
- Added
UnifiedMemoryCPUAccess
member toGraphicsAdapterInfo
struct (API Version 240072)- An application should check allowed unified memory access types before creating unified buffers
- Added GPU vendor and memory size detection (API Version 240071)
- Added
ADAPTER_VENDOR
enum - Added
GraphicsAdapterInfo
struct - Added
GraphicsAdapterInfo AdapterInfo
member toDeviceCaps
struct - Removed
ADAPTER_TYPE AdapterType
fromDeviceCaps
struct
- Added
- Reworked texture format properties (API Version 240070)
- Added
RESOURCE_DIMENSION_SUPPORT
enum - Reworked
TextureFormatInfoExt
struct
- Added
- Added option to disable/enable device features during initialization (API Version 240069)
- Added
DEVICE_FEATURE_STATE
enum - Changed the types of members of
DeviceFeatures
struct from bool toDEVICE_FEATURE_STATE
- Added
DeviceFeatures Features
member toEngineCreateInfo
struct
- Added
- Enabled mesh shaders (API Version 240068)
- Added
PIPELINE_TYPE
enum - Replaced
IsComputePipeline
member ofPipelineStateDesc
struct withPIPELINE_TYPE PipelineType
- Added new mesh shader types
- Added mesh shader draw commands
- Added
- Added
QUERY_TYPE_DURATION
query type (API Version 240067) - Added
USAGE_UNIFIED
usage type (API Version 240066) - Added render passes (API Version 240065)
- Added
CREATE_SHADER_SOURCE_INPUT_STREAM_FLAGS
enum andIShaderSourceInputStreamFactory::CreateInputStream2
method (API Version 240064) - Added
ISwapChain::SetMaximumFrameLatency
function (API Version 240061) - Added
EngineGLCreateInfo::CreateDebugContext
member (API Version 240060) - Added
SHADER_SOURCE_LANGUAGE_GLSL_VERBATIM
value (API Version 240059). - Added
GLBindTarget
parameter toIRenderDeviceGL::CreateTextureFromGLHandle
method (API Version 240058).
- Enabled Vulkan on Android
- Added C Interface (API Version 240052)
-
Added
PreTransform
parameter to swap chain description (API Version 240057). -
Added
PipelineStateCreateInfo
struct that is now taken byIRenderDevice::CreatePipelineState
instead ofPipelineStateDesc
struct. AddedPSO_CREATE_FLAGS
enum (API Version 240056).Old API:
PipelineStateDesc PSODesc; // ... pRenderDevice->CreatePipelineState(PSODesc, &pPSO);
New API:
PipelineStateCreateInfo PSOCreateInfo; PipelineStateDesc& PSODesc = PSOCreateInfo.PSODesc; // ... pRenderDevice->CreatePipelineState(PSOCreateInfo, &pPSO);
-
Added
PRIMITIVE_TOPOLOGY_LINE_STRIP
topology (API Version 240055) -
Updated swap chain creation functions to use
NativeWindow
(API Version 240054) -
Added
NativeWindow
wrapper and replacedpNativeWndHandle
andpDisplay
members with it inEngineGLCreateInfo
(API Version 240053)
- Implemented automated unit testing and format validation
- Added Queries (API Version 240051)
- Added
AdapterType
member toDeviceCaps
struct (API Version 240048) - Added
IDeviceContextGL::SetSwapChain
andIRenderDeviceGL::CreateDummyTexture
methods (API Version 240047) - Removed
IDeviceContext::SetSwapChain
method (API Version 240046) - Renamed
MAP_FLAG_DO_NOT_SYNCHRONIZE
flag toMAP_FLAG_NO_OVERWRITE
(API Version 240045) - Added
GetVkInstance
andGetVkPhysicalDevice
methods toIRenderDeviceVk
interface (API Version 240044) - Added
HLSLSemantic
member toLayoutElement
struct (API Version 240042) - Added
ResolveTextureSubresource
device context command, removedSamplesCount
member of theSwapChainDesc
(API Version 240041) - Added
APIVersion
member toEngineCreateInfo
struct (API Version 240040) - Added
IDeviceObject::GetUniqueID
method (API Version 240039) - Added
IDeviceContextD3D12::LockCommandQueue
,IDeviceContextD3D12::UnlockCommandQueue
,IDeviceContextVk::LockCommandQueue
, andIDeviceContextVk::UnlockCommandQueue
methods (API Version 240038) - Added
EnableGPUBasedValidation
member toEngineD3D12CreateInfo
struct (API Version 240037) - Added
DRAW_FLAG_RESOURCE_BUFFERS_INTACT
flag (API Version 240036) - Added
HLSLVersion
,GLSLVersion
andGLESSLVersion
toShaderCreateInfo
struct (API Version 240035) - Renamed
EngineD3D11DebugFlags
toD3D11_DEBUG_FLAGS
(API Version 240034) - Split up
Draw
command intoDraw
,DrawIndexed
,DrawIndirect
andDrawIndexedIndirect
. Split upDispatchCompute
command intoDispatchCompute
andDispatchComputeIndirect
(API Version 240033). - Enabled bindless resources
- Removed
SHADER_PROFILE
enum (API Version 240032) - Added
DIRECT3D_FEATURE_LEVEL
andDIRECT3D_FEATURE_LEVEL MinimumFeatureLevel
member toEngineD3D11CreateInfo
andEngineD3D12CreateInfo
structs (API Version 240032) - Updated
IEngineFactoryD3D11::EnumerateHardwareAdapters
,IEngineFactoryD3D11::EnumerateDisplayModes
,IEngineFactoryD3D12::EnumerateHardwareAdapters
,IEngineFactoryD3D12::EnumerateDisplayModes
to take minimum feature level. (API Version 240032) - Added
bBindlessSupported
member toDeviceCaps
struct. (API Version 240032)
- Enabled Vulkan on iOS
- Moved
NumDeferredContexts
parameter from factory functionsIEngineFactoryD3D11::CreateDeviceAndContextsD3D11
,IEngineFactoryD3D12::CreateDeviceAndContextsD3D12
andIEngineFactoryVk::CreateDeviceAndContextsVk
toEngineCreateInfo
struct. - Renamed
USAGE_CPU_ACCESSIBLE
->USAGE_STAGING
- Added
SWAP_CHAIN_USAGE_FLAGS
enum - Replaced overloaded
IPipelineState::GetStaticShaderVariable()
withIPipelineState::GetStaticVariableByName()
andIPipelineState::GetStaticVariableByIndex()
- Replaced overloaded
IShaderResourceBinding::GetVariable()
withIShaderResourceBinding::GetVariableByName()
andIShaderResourceBinding::GetVariableByIndex()
- Made
IShaderSourceInputStreamFactory
derived fromIObject
; addedIEngineFactory::CreateDefaultShaderSourceStreamFactory()
method; addedIRenderDevice::GetEngineFactory()
method (API Version 240021) - Added
DRAW_FLAG_VERIFY_DRAW_ATTRIBS
,DRAW_FLAG_VERIFY_RENDER_TARGETS
, andDRAW_FLAG_VERIFY_ALL
flags (API Version 240022) TEXTURE_VIEW_FLAGS
enum andFlags
member toTextureViewDesc
structure (API Version 240023)- Added
IShaderResourceVariable::IsBound()
method (API Version 240024) - Added
Diligent-
prefix to project names to avoid name conflicts. - Added
IDeviceContextD3D12::GetD3D12CommandList
method - Added
IDeviceContext::WaitForFence()
method (API Version 240027) - Added
IDeviceContext::WaitForIdle()
method (API Version 240028) - Added
IRenderDevice::IdleGPU()
method (API Version 240029) - Added
EngineD3D12CreateInfo::EnableDebugLayer
member (API Version 240030) - Added
EngineD3D12CreateInfo::BreakOnError
andEngineD3D12CreateInfo::BreakOnCorruption
members (API Version 240031)
- Added cmake options to disable specific back-ends and glslang
- Improved engine support of GLES3.0 devices
- Updated
IRenderDevice::CreateTexture()
andIRenderDevice::CreateBuffer()
to take pointer to initialization data rather than references. - Added
LayoutElement::AutoOffset
andLayoutElement::AutoOffset
values to use instead of 0 when automatically computing input layout elements offset and strides. - Renamed factory interfaces and headers:
IRenderDeviceFactoryD3D11
->IEngineFactoryD3D11
, RenderDeviceFactoryD3D11.h -> EngineFactoryD3D11.hIRenderDeviceFactoryD3D12
->IEngineFactoryD3D12
, RenderDeviceFactoryD3D12.h -> EngineFactoryD3D12.hIRenderDeviceFactoryOpenGL
->IEngineFactoryOpenGL
, RenderDeviceFactoryOpenGL.h -> EngineFactoryOpenGL.hIRenderDeviceFactoryVk
->IEngineFactoryVk
, RenderDeviceFactoryVk.h -> EngineFactoryVk.hIRenderDeviceFactoryMtl
->IEngineFactoryMtl
, RenderDeviceFactoryMtl.h -> EngineFactoryMtl.h
- Renamed
IShaderVariable
->IShaderResourceVariable
- Renamed
SHADER_VARIABLE_TYPE
->SHADER_RESOURCE_VARIABLE_TYPE
- Renamed
ShaderVariableDesc
->ShaderResourceVariableDesc
- Added
SHADER_RESOURCE_TYPE
enum - Moved shader variable type and static sampler definition from shader creation to PSO creation stage:
- Removed
IShader::GetVariable
,IShader::GetVariableCount
, andIShader::BindResources
methods - Added
IPipelineState::BindStaticResources
,IPipelineState::GetStaticVariableCount
, andIPipelineState::GetStaticShaderVariable
methods - Added
PipelineResourceLayoutDesc
structure andResourceLayout
member toPipelineStateDesc
- Removed
- Added
ShaderResourceDesc
structure - Added
IShader::GetResourceCount
andIShader::GetResource
methods - Replaced
IShaderVariable::GetArraySize
andIShaderVariable::GetName
methods withIShaderResourceVariable::GetResourceDesc
method - Added
HLSLShaderResourceDesc
structure as well asIShaderResourceVariableD3D
andIShaderResourceVariableD3D
interfaces to query HLSL-specific shader resource description (shader register)
With the new API, shader initialization and pipeline state creation changed as shown below.
Old API:
RefCntAutoPtr<IShader> pVS;
{
CreationAttribs.Desc.ShaderType = SHADER_TYPE_VERTEX;
CreationAttribs.EntryPoint = "main";
CreationAttribs.Desc.Name = "Cube VS";
CreationAttribs.FilePath = "cube.vsh";
pDevice->CreateShader(CreationAttribs, &pVS);
pVS->GetShaderVariable("Constants")->Set(m_VSConstants);
}
RefCntAutoPtr<IShader> pPS;
{
CreationAttribs.Desc.ShaderType = SHADER_TYPE_PIXEL;
CreationAttribs.EntryPoint = "main";
CreationAttribs.Desc.Name = "Cube PS";
CreationAttribs.FilePath = "cube.psh";
ShaderVariableDesc Vars[] =
{
{"g_Texture", SHADER_VARIABLE_TYPE_MUTABLE}
};
CreationAttribs.Desc.VariableDesc = Vars;
CreationAttribs.Desc.NumVariables = _countof(Vars);
SamplerDesc SamLinearClampDesc( FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR,
TEXTURE_ADDRESS_CLAMP, TEXTURE_ADDRESS_CLAMP, TEXTURE_ADDRESS_CLAMP);
StaticSamplerDesc StaticSamplers[] =
{
{"g_Texture", SamLinearClampDesc}
};
CreationAttribs.Desc.StaticSamplers = StaticSamplers;
CreationAttribs.Desc.NumStaticSamplers = _countof(StaticSamplers);
pDevice->CreateShader(CreationAttribs, &pPS);
}
// ...
pDevice->CreatePipelineState(PSODesc, &m_pPSO);
New API:
RefCntAutoPtr<IShader> pVS;
{
ShaderCI.Desc.ShaderType = SHADER_TYPE_VERTEX;
ShaderCI.EntryPoint = "main";
ShaderCI.Desc.Name = "Cube VS";
ShaderCI.FilePath = "cube.vsh";
pDevice->CreateShader(ShaderCI, &pVS);
}
RefCntAutoPtr<IShader> pVS;
{
ShaderCI.Desc.ShaderType = SHADER_TYPE_VERTEX;
ShaderCI.EntryPoint = "main";
ShaderCI.Desc.Name = "Cube VS";
ShaderCI.FilePath = "cube.vsh";
pDevice->CreateShader(ShaderCI, &pVS);
}
// ...
ShaderResourceVariableDesc Vars[] =
{
{SHADER_TYPE_PIXEL, "g_Texture", SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE}
};
PSODesc.ResourceLayout.Variables = Vars;
PSODesc.ResourceLayout.NumVariables = _countof(Vars);
// Define static sampler for g_Texture. Static samplers should be used whenever possible
SamplerDesc SamLinearClampDesc( FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR, FILTER_TYPE_LINEAR,
TEXTURE_ADDRESS_CLAMP, TEXTURE_ADDRESS_CLAMP, TEXTURE_ADDRESS_CLAMP);
StaticSamplerDesc StaticSamplers[] =
{
{SHADER_TYPE_PIXEL, "g_Texture", SamLinearClampDesc}
};
PSODesc.ResourceLayout.StaticSamplers = StaticSamplers;
PSODesc.ResourceLayout.NumStaticSamplers = _countof(StaticSamplers);
pDevice->CreatePipelineState(PSODesc, &m_pPSO);
m_pPSO->GetStaticShaderVariable(SHADER_TYPE_VERTEX, "Constants")->Set(m_VSConstants);
- Enabled MinGW build
- Enabled Vulkan on MacOS
- Added Metal backend stub
- Implemented split barriers (#43)
- Added
STATE_TRANSITION_TYPE
enum andSTATE_TRANSITION_TYPE TransitionType
member toStateTransitionDesc
structure
- Added
- Implemented explicit resource state transitions
- API Changes
- Added
RESOURCE_STATE
enum that defines the resource state - Added
RESOURCE_STATE_TRANSITION_MODE
enum that controls resource state transition mode - Added
DRAW_FLAGS
enum that controls state validation performed by Draw command - Added
Flags
member toDrawAttribs
structure (values fromDRAW_FLAGS
) - Added
IndirectAttribsBufferStateTransitionMode
member toDrawAttribs
andDispatchComputeAttribs
structures (values fromRESOURCE_STATE_TRANSITION_MODE
) - Added
StateTransitionDesc
structure that describes resource state transition barrier - Added
IDeviceContext::TransitionResourceStates(Uint32 BarrierCount, StateTransitionDesc* pResourceBarriers)
method - Added
IBuffer::SetState()
,IBuffer::GetState()
,ITexture::SetState()
,ITexture::GetState()
methods - Added
IShaderResourceBinding::InitializeStaticResources()
to explicitly initialize static resources and avoid problems in multi-threaded environments - Added
InitStaticResources
parameter toIPipelineState::CreateShaderResourceBinding()
method to allow immediate initialization of static resources in a SRB - Removed default SRB object
- Renamed/moved
IBuffer::UpdateData()
toIDeviceContext::UpdateBuffer()
- Renamed/moved
IBuffer::CopyData()
toIDeviceContext::CopyBuffer()
- Renamed/moved
IBuffer::Map()
toIDeviceContext::MapBuffer()
- Renamed/moved
IBuffer::Unmap()
toIDeviceContext::UnmapBuffer()
- Removed MapFlags parameter
- Renamed/moved
ITexture::UpdateData()
toIDeviceContext::UpdateTexture()
- Renamed/moved
ITexture::CopyData()
toIDeviceContext::CopyTexture()
- Renamed/moved
ITexture::Map()
toIDeviceContext::MapTextureSubresource()
- Renamed/moved
ITexture::Unmap()
toIDeviceContext::UnmapTextureSubresource()
- Moved
ITextureView::GenerateMips()
toIDeviceContext::GenerateMips()
- Added state transition mode parameters to
IDeviceContext::UpdateBuffer()
,IDeviceContext::UpdateTexture()
,IDeviceContext::CopyBuffer()
,IDeviceContext::CopyTexture()
,IDeviceContext::SetVertexBuffers()
,IDeviceContext::SetIndexBuffers()
,IDeviceContext::ClearRenderTargets()
, andIDeviceContext::ClearDepthStencil()
methods - Replaced
COMMIT_SHADER_RESOURCES_FLAGS
enum withRESOURCE_STATE_TRANSITION_MODE
- Added
ITextureD3D12::GetD3D12ResourceState()
,IBufferD3D12::GetD3D12ResourceState()
,IBufferVk::GetAccessFlags()
, andITextureVk::GetLayout()
methods - Added
CopyTextureAttribs
structure that combines all parameters ofIDeviceContext::CopyTexture()
method
- Added
- Enabled Vulkan backend on Linux
- API Changes
- Implemented separate texture samplers:
- Added
UseCombinedTextureSamplers
andCombinedSamplerSuffix
members toShaderCreationAttribs
structure - When separate samplers are used (
UseCombinedTextureSamplers == false
), samplers are set in the same way as other shader variables via shader or SRB objects
- Added
- Removed
BIND_SHADER_RESOURCES_RESET_BINDINGS
flag, renamedBIND_SHADER_RESOURCES_KEEP_EXISTING
toBIND_SHADER_RESOURCES_KEEP_EXISTING
. AddedBIND_SHADER_RESOURCES_UPDATE_STATIC
,BIND_SHADER_RESOURCES_UPDATE_MUTABLE
,BIND_SHADER_RESOURCES_UPDATE_DYNAMIC
, andBIND_SHADER_RESOURCES_UPDATE_ALL
flags
- Implemented separate texture samplers:
- Using glslang to compile HLSL to SPIRV in Vulkan backend instead of relying on HLSL->GLSL converter
- API Changes:
- Added
IFence
interface andIDeviceContext::SignalFence()
method to enable CPU-GPU synchronization - Added
GetType
,GetArraySize
,GetName
, andGetIndex
methods toIShaderVariable
interface; AddedGetVariableCount
andGetShaderVariable(Uint32 Index)
methods toIShader
interface; AddedGetVariableCount
andGetVariable(SHADER_TYPE ShaderType, Uint32 Index)
toIShaderResourceBinding
interface. - Added
BUFFER_MODE_RAW
mode allowing raw buffer views in D3D11/D3D12. - Moved
Format
member fromBufferDesc
toBufferViewDesc
- Removed
IsIndirect
member fromDrawAttribs
as settingpIndirectDrawAttribs
to a non-null buffer already indicates indirect rendering
- Added
- Implemented Vulkan backend
- Implemented hardware adapter & display mode enumeration in D3D11 and D3D12 modes
- Implemented initialization in fullscreen mode as well as toggling between fullscreen and windowed modes in run time
- Added sync interval parameter to ISwapChain::Present()
- Fixed issues with relative paths in headers
- API Changes:
- Math library functions
SetNearFarClipPlanes()
,GetNearFarPlaneFromProjMatrix()
,Projection()
,OrthoOffCenter()
, andOrtho()
takebIsGL
flag instead ofbIsDirectX
- Vertex buffer strides are now defined by the pipeline state as part of the input layout description (
LayoutElement::Stride
) - Added
COMMIT_SHADER_RESOURCES_FLAG_VERIFY_STATES
flag - Added
NumViewports
member toGraphicsPipelineDesc
structure
- Math library functions
- Implemented Vulkan backend
- Implemented PSO compatibility: if two pipeline states share the same shader resource layout, they can use SRB objects interchangeably.
- Added
IPipelineState::IsCompatibleWith(const IPipelineState *pPSO)
method that returns true if two pipeline states are compatible. - Added sync interval parameter to ISwapChain::Present()
- API Changes
- Added
NumViewports
member toGraphicsPipelineDesc
struct - Removed
PRIMITIVE_TOPOLOGY_TYPE
type - Replaced
PRIMITIVE_TOPOLOGY_TYPE GraphicsPipelineDesc::PrimitiveTopologyType
withPRIMITIVE_TOPOLOGY GraphicsPipelineDesc::PrimitiveTopology
- Removed
DrawAttribs::Topology
- Removed
pStrides
parameter fromIDeviceContext::SetVertexBuffers()
. Strides are now defined through vertex layout.
- Added
- Added MacOS and iOS support
- Improved GLSL2HLSL converter to fix multiple issues on GLES
- Removed legacy Visual Studio solution and project files
- Added API reference
- Refactored build system to use CMake
- Added support for Linux platform
- Interoperability with native API
- Accessing internal objects and handles
- Creating diligent engine buffers/textures from native resources
- Attaching to existing D3D11/D3D12 device or GL context
- Resource state and command queue synchronization for D3D12
- Integration with Unity
- Geometry shader support
- Tessellation support
- Performance optimizations
- Support for structured buffers
- HLSL->GLSL conversion is now a two-stage process:
- Creating conversion stream
- Creating GLSL source from the stream
- Geometry shader support
- Tessellation control and tessellation evaluation shader support
- Support for non-void shader functions
- Allowing structs as input parameters for shader functions
Alpha release of Diligent Engine 2.0. The engine has been updated to take advantages of Direct3D12:
-
Pipeline State Object encompasses all coarse-grain state objects like Depth-Stencil State, Blend State, Rasterizer State, shader states etc.
-
New shader resource binding model implemented to leverage Direct3D12
-
OpenGL and Direct3D11 backends
-
Alpha release is only available on Windows platform
-
Direct3D11 backend is very thoroughly optimized and has very low overhead compared to native D3D11 implementation
-
Direct3D12 implementation is preliminary and not yet optimized
Initial release