- 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, andWebGPUResourceAttribs 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
Added samples and tutorials web page
- 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)
- Added Tutorial27 - Post Processing
- Added USD Viewer
- Added Post Processing effects:
- Added Hydrogent, an implementation of the Hydra rendering API in Diligent Engine.
- PBR Material Improvements:
- Clear-Coat
- Sheen (aka fuzz)
- Iridescence (aka thin layer)
- Anisotropy
- 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
- 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::SetandIShaderResourceVariable::SetArraymethods (API252002) - Added primitive topologies with adjacency (API252001)
- Added
SamplerDesc::UnnormalizedCoordsparameter (API Version 250014) - Added device object serialization/deserialization (API Version 250013)
- Added pipeline state cache (API Version 250012)
- Enabled emscripten platform
- 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_FLAGSenum and replacedStateTransitionDesc::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)
- 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 addedGetDeviceInfoandGetAdapterInfomethods; 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 :
added
MEMORY_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 toDispatchComputeAttribsandDispatchComputeIndirectAttribsstructs (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)
-
Enabled ray tracing (API Version 240080)
-
Added
IDeviceContext::GetFrameNumbermethod (API Version 240079) -
Added
ShaderResourceQueriesdevice feature andEngineGLCreateInfo::ForceNonSeparableProgramsparameter (API Version 240078) -
Renamed
USAGE_STATICtoUSAGE_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
PipelineStateCreateInfowithGraphicsPipelineStateCreateInfoandComputePipelineStateCreateInfo - Replaced
IRenderDevice::CreatePipelineStatewithIRenderDevice::CreateGraphicsPipelineStateandIRenderDevice::CreateComputePipelineState pVS,pGS,pHS,pDS,pPS,pAS,pMSwere moved fromGraphicsPipelineDesctoGraphicsPipelineStateCreateInfoGraphicsPipelineDesc GraphicsPipelinewas moved fromPipelineStateDesctoGraphicsPipelineStateCreateInfopCSis now a member ofComputePipelineStateCreateInfo,ComputePipelineDescwas removed- Added
IPipelineState::GetGraphicsPipelineDescmethod
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, andUniformBuffer8BitAccessdevice features. (API Version 240074) -
Added
ShaderFloat16,ResourceBuffer16BitAccess,UniformBuffer16BitAccess, andShaderInputOutput16device features. (API Version 240073)
- Added Tutorial21 - Ray Tracing
- Added
UnifiedMemoryCPUAccessmember toGraphicsAdapterInfostruct (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_VENDORenum - Added
GraphicsAdapterInfostruct - Added
GraphicsAdapterInfo AdapterInfomember toDeviceCapsstruct - Removed
ADAPTER_TYPE AdaterTypefromDeviceCapsstruct
- Added
- Reworked texture format properties (API Version 240070)
- Added
RESOURCE_DIMENSION_SUPPORTenum - Reworked
TextureFormatInfoExtstruct
- Added
- Added option to disable/enable device features during initialization (API Version 240069)
- Added
DEVICE_FEATURE_STATEenum - Changed the types of members of
DeviceFeaturesstruct from bool toDEVICE_FEATURE_STATE - Added
DeviceFeatures Featuresmember toEngineCreateInfostruct
- Added
- Enabled mesh shaders (API Version 240068)
- Added
PIPELINE_TYPEenum - Replaced
IsComputePiplinemember ofPipelineStateDescstruct withPIPELINE_TYPE PipelineType - Added new mesh shader types
- Added mesh shader draw commands
- Added
- Added
QUERY_TYPE_DURATIONquery type (API Version 240067) - Added
USAGE_UNIFIEDusage type (API Version 240066) - Added render passes (API Version 240065)
- Added
CREATE_SHADER_SOURCE_INPUT_STREAM_FLAGSenum andIShaderSourceInputStreamFactory::CreateInputStream2method (API Version 240064) - Added
ISwapChain::SetMaximumFrameLatencyfunction (API Version 240061) - Added
EngineGLCreateInfo::CreateDebugContextmember (API Version 240060) - Added
SHADER_SOURCE_LANGUAGE_GLSL_VERBATIMvalue (API Version 240059). - Added
GLBindTargetparameter toIRenderDeviceGL::CreateTextureFromGLHandlemethod (API Version 240058).
- Added HelloAR Android sample
- Added Tutorial19 - Render Passes
- Added Tutorial20 - Mesh Shader
- Enabled Vulkan on Android
- Added C Interface (API Version 240052)
-
Added
PreTransformparameter to swap chain description (API Version 240057). -
Added
PipelineStateCreateInfostruct that is now taken byIRenderDevice::CreatePipelineStateinstead ofPipelineStateDescstruct. AddedPSO_CREATE_FLAGSenum (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_STRIPtopology (API Version 240055) -
Updated swap chain creation functions to use
NativeWindow(API Version 240054) -
Added
NativeWindowwrapper and replacedpNativeWndHandleandpDisplaymembers with it inEngineGLCreateInfo(API Version 240053)
- Added Queries (API Version 240051)
- Added
AdapterTypemember toDeviceCapsstruct (API Version 240048) - Added
IDeviceContextGL::SetSwapChainandIRenderDeviceGL::CreateDummyTexturemethods (API Version 240047) - Removed
IDeviceContext::SetSwapChainmethod (API Version 240046) - Renamed
MAP_FLAG_DO_NOT_SYNCHRONIZEflag toMAP_FLAG_NO_OVERWRITE(API Version 240045) - Added
GetVkInstanceandGetVkPhysicalDevicemethods toIRenderDeviceVkinterface (API Version 240044) - Added
HLSLSemanticmember toLayoutElementstruct (API Version 240042) - Added
ResolveTextureSubresourcedevice context command, removedSamplesCountmember of theSwapChainDesc(API Version 240041) - Added
APIVersionmember toEngineCreateInfostruct (API Version 240040) - Added
IDeviceObject::GetUniqueIDmethod (API Version 240039) - Added
IDeviceContextD3D12::LockCommandQueue,IDeviceContextD3D12::UnlockCommandQueue,IDeviceContextVk::LockCommandQueue, andIDeviceContextVk::UnlockCommandQueuemethods (API Version 240038) - Added
EnableGPUBasedValidationmember toEngineD3D12CreateInfostruct (API Version 240037) - Added
DRAW_FLAG_RESOURCE_BUFFERS_INTACTflag (API Version 240036) - Added
HLSLVersion,GLSLVersionandGLESSLVersiontoShaderCreateInfostruct (API Version 240035) - Renamed
EngineD3D11DebugFlagstoD3D11_DEBUG_FLAGS(API Version 240034) - Split up
Drawcommand intoDraw,DrawIndexed,DrawIndirectandDrawIndexedIndirect. Split upDispatchComputecommand intoDispatchComputeandDispatchComputeInidrect(API Version 240033). - Enabled bindless resources
- Removed
SHADER_PROFILEenum (API Version 240032) - Added
DIRECT3D_FEATURE_LEVELandDIRECT3D_FEATURE_LEVEL MinimumFeatureLevelmember toEngineD3D11CreateInfoandEngineD3D12CreateInfostructs (API Version 240032) - Updated
IEngineFactoryD3D11::EnumerateHardwareAdapters,IEngineFactoryD3D11::EnumerateDisplayModes,IEngineFactoryD3D12::EnumerateHardwareAdapters,IEngineFactoryD3D12::EnumerateDisplayModesto take minimum feature level. (API Version 240032) - Added
bBindlessSupportedmember toDeviceCapsstruct. (API Version 240032)
- Enabled automated unit testing, format validation and static code analysis
- Added Tutorial16 - Bindless Resources
- Added Tutorial17 - MSAA
- Added Tutorial18 - Queries
- Removed RenderScript and Lua
- Enabled Vulkan on iOS
- Replaced AntTweakBar UI library with dear imgui
- Added GLTF2.0 loader and PBR renderer
- Added GLTF Viewer
- Added Shadowing Component and Shadows Sample
- Added Dear Imgui demo
- Added Tutorial13 - Shadow Map
- Added Tutorial14 - Compute Shader
- Added Tutorial15 - Multiple Windows
- Removed AntTweakBar sample
- Moved
NumDeferredContextsparameter from factory functionsIEngineFactoryD3D11::CreateDeviceAndContextsD3D11,IEngineFactoryD3D12::CreateDeviceAndContextsD3D12andIEngineFactoryVk::CreateDeviceAndContextsVktoEngineCreateInfostruct. - Renamed
USAGE_CPU_ACCESSIBLE->USAGE_STAGING - Added
SWAP_CHAIN_USAGE_FLAGSenum - Replaced overloaded
IPipelineState::GetStaticShaderVariable()withIPipelineState::GetStaticVariableByName()andIPipelineState::GetStaticVariableByIndex() - Replaced overloaded
IShaderResourceBinding::GetVariable()withIShaderResourceBinding::GetVariableByName()andIShaderResourceBinding::GetVariableByIndex() - Made
IShaderSourceInputStreamFactoryderived fromIObject; addedIEngineFactory::CreateDefaultShaderSourceStreamFactory()method; addedIRenderDevice::GetEngineFactory()method (API Version 240021) - Added
DRAW_FLAG_VERIFY_DRAW_ATTRIBS,DRAW_FLAG_VERIFY_RENDER_TARGETS, andDRAW_FLAG_VERIFY_ALLflags (API Version 240022) TEXTURE_VIEW_FLAGSenum andFlagsmember toTextureViewDescstructure (API Version 240023)- Added
IShaderResourceVariable::IsBound()method (API Version 240024) - Added
Diligent-prefix to project names to avoid name conflicts. - Added
IDeviceContextD3D12::GetD3D12CommandListmethod - Added
IDeviceContext::WaitForFence()method (API Version 240027) - Added
IDeviceContext::WaitForIdle()method (API Version 240028) - Added
IRenderDevice::IdleGPU()method (API Version 240029) - Added
EngineD3D12CreateInfo::EnableDebugLayermember (API Version 240030) - Added
EngineD3D12CreateInfo::BreakOnErrorandEngineD3D12CreateInfo::BreakOnCorruptionmembers (API Version 240031)
- Added cmake options to disable specific back-ends and glslang
- Improved engine support of GLES3.0 devices
- Added new module - DiligentFX, a high-level rendering framework
- Reworked light scattering post-processing effect to be ready-to-use component
- Updated
IRenderDevice::CreateTexture()andIRenderDevice::CreateBuffer()to take pointer to initialization data rather than references. - Added
LayoutElement::AutoOffsetandLayoutElement::AutoOffsetvalues 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_TYPEenum - Moved shader variable type and static sampler definition from shader creation to PSO creation stage:
- Removed
IShader::GetVariable,IShader::GetVariableCount, andIShader::BindResourcesmethods - Added
IPipelineState::BindStaticResoruces,IPipelineState::GetStaticVariableCount, andIPipelineState::GetStaticShaderVariablemethods - Added
PipelineResourceLayoutDescstructure andResourceLayoutmember toPipelineStateDesc
- Removed
- Added
ShaderResourceDescstructure - Added
IShader::GetResourceCountandIShader::GetResourcemethods - Replaced
IShaderVariable::GetArraySizeandIShaderVariable::GetNamemethods withIShaderResourceVariable::GetResourceDescmethod - Added
HLSLShaderResourceDescstructure as well asIShaderResourceVariableD3DandIShaderResourceVariableD3Dinterfaces 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);- Added Tutorial12 - Render target (credits to @dolphineye for contribution)
- Enabled MinGW build
- Enabled Vulkan on MacOS
- Implemented split barriers (DiligentGraphics/DiligentCore#43)
- Added
STATE_TRANSITION_TYPEenum andSTATE_TRANSITION_TYPE TransitionTypemember toStateTransitionDescstructure
- Added
- Added Metal backend stub
- Samples:
- Added rendering backend selection dialog on Win32 and Mac
Core:
- Implemented explicit resource state transitions
- API Changes
- Added
RESOURCE_STATEenum that defines the resource state - Added
RESOURCE_STATE_TRANSITION_MODEenum that controls resource state transition mode - Added
DRAW_FLAGSenum that controls state validation performed by Draw command - Added
Flagsmember toDrawAttribsstructure (values fromDRAW_FLAGS) - Added
IndirectAttribsBufferStateTransitionModemember toDrawAttribsandDispatchComputeAttribsstructures (values fromRESOURCE_STATE_TRANSITION_MODE) - Added
StateTransitionDescstructure 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
InitStaticResourcesparameter 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_FLAGSenum withRESOURCE_STATE_TRANSITION_MODE - Added
ITextureD3D12::GetD3D12ResourceState(),IBufferD3D12::GetD3D12ResourceState(),IBufferVk::GetAccessFlags(), andITextureVk::GetLayout()methods - Added
CopyTextureAttribsstructure that combines all parameters ofIDeviceContext::CopyTexture()method
- Added
- Core
- Enabled Vulkan backend on Linux
- API Changes
- Implemented separate texture samplers:
- Added
UseCombinedTextureSamplersandCombinedSamplerSuffixmembers toShaderCreationAttribsstructure - 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_BINDINGSflag, renamedBIND_SHADER_RESOURCES_KEEP_EXISTINGtoBIND_SHADER_RESOURCES_KEEP_EXISTING. AddedBIND_SHADER_RESOURCES_UPDATE_STATIC,BIND_SHADER_RESOURCES_UPDATE_MUTABLE,BIND_SHADER_RESOURCES_UPDATE_DYNAMIC, andBIND_SHADER_RESOURCES_UPDATE_ALLflags
- Implemented separate texture samplers:
- Using glslang to compile HLSL to SPIRV in Vulkan backend instead of relying on HLSL->GLSL converter
-
Core
- Added
IFenceinterface andIDeviceContext::SignalFence()method to enable CPU-GPU synchronization - Added
BUFFER_MODE_RAWmode allowing raw buffer views in D3D11/D3D12. - Moved
Formatmember fromBufferDesctoBufferViewDesc - Removed
IsIndirectmember fromDrawAttrbisas settingpIndirectDrawAttribsto a non-null buffer already indicates indirect rendering
- Added
-
Samples:
- Added Tutorial 10 - Data Streaming
- Added Tutorial 11 - Resource Updates
- Core:
- 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()
- API Changes
- Added
NumViewportsmember toGraphicsPipelineDescstruct - Removed
PRIMITIVE_TOPOLOGY_TYPEtype - Replaced
PRIMITIVE_TOPOLOGY_TYPE GraphicsPipelineDesc::PrimitiveTopologyTypewithPRIMITIVE_TOPOLOGY GraphicsPipelineDesc::PrimitiveTopology - Removed
DrawAttribs::Topology - Removed
pStridesparameter fromIDeviceContext::SetVertexBuffers(). Strides are now defined through vertex layout.
- Added
- API Changes:
- Math library functions
SetNearFarClipPlanes(),GetNearFarPlaneFromProjMatrix(),Projection(),OrthoOffCenter(), andOrtho()takebIsGLflag 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_STATESflag - Added
NumViewportsmember toGraphicsPipelineDescstructure
- Math library functions
- Samples:
- Added fullscreen mode selection dialog box
- Implemented fullscreen mode toggle on UWP with shift + enter
- Implemented fullscreen window toggle on Win32 with alt + enter
- Added Tutorial 09 - Quads
- Fixed the following issues:
- Enabled Win32 build targeting Windows 8.1 SDK
- Enabled build customization through custom build config file
- Implemented PSO compatibility
- Fixed the following issues:
- Added MacOS and iOS support
- Removed legacy Visual Studio solution and project files
- Added API reference
- Added tutorials 1-8
- Refactored build system to use CMake and Gradle for Android
- 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
- Integraion 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