Browse Source

Almost finalizing DXR

Panagiotis Christopoulos Charitos 4 months ago
parent
commit
df63b22595
33 changed files with 1686 additions and 198 deletions
  1. 1 2
      AnKi/Gr/D3D/D3DBuffer.cpp
  2. 25 5
      AnKi/Gr/D3D/D3DCommandBuffer.cpp
  3. 59 0
      AnKi/Gr/D3D/D3DDescriptor.cpp
  4. 3 0
      AnKi/Gr/D3D/D3DDescriptor.h
  5. 6 1
      AnKi/Gr/D3D/D3DGrManager.cpp
  6. 183 6
      AnKi/Gr/D3D/D3DShaderProgram.cpp
  7. 8 0
      AnKi/Gr/D3D/D3DShaderProgram.h
  8. 6 0
      AnKi/Shaders/Common.hlsl
  9. 1 1
      AnKi/Shaders/GBufferGeneric.ankiprog
  10. 4 3
      Tests/Gr/Gr.cpp
  11. 12 0
      Tests/Gr/GrCommon.h
  12. 52 5
      ThirdParty/AgilitySdk/README.md
  13. BIN
      ThirdParty/AgilitySdk/bin/arm64/D3D12Core.dll
  14. BIN
      ThirdParty/AgilitySdk/bin/arm64/D3D12Core.pdb
  15. BIN
      ThirdParty/AgilitySdk/bin/arm64/d3d12SDKLayers.dll
  16. BIN
      ThirdParty/AgilitySdk/bin/arm64/d3d12SDKLayers.pdb
  17. BIN
      ThirdParty/AgilitySdk/bin/arm64/d3dconfig.exe
  18. BIN
      ThirdParty/AgilitySdk/bin/arm64/d3dconfig.pdb
  19. BIN
      ThirdParty/AgilitySdk/bin/x64/D3D12Core.dll
  20. BIN
      ThirdParty/AgilitySdk/bin/x64/D3D12Core.pdb
  21. BIN
      ThirdParty/AgilitySdk/bin/x64/d3d12SDKLayers.dll
  22. BIN
      ThirdParty/AgilitySdk/bin/x64/d3d12SDKLayers.pdb
  23. BIN
      ThirdParty/AgilitySdk/bin/x64/d3dconfig.exe
  24. BIN
      ThirdParty/AgilitySdk/bin/x64/d3dconfig.pdb
  25. 427 29
      ThirdParty/AgilitySdk/include/d3d12.h
  26. 174 8
      ThirdParty/AgilitySdk/include/d3d12.idl
  27. 3 1
      ThirdParty/AgilitySdk/include/d3d12sdklayers.h
  28. 2 0
      ThirdParty/AgilitySdk/include/d3d12sdklayers.idl
  29. 2 1
      ThirdParty/AgilitySdk/include/d3d12video.h
  30. 1 0
      ThirdParty/AgilitySdk/include/d3d12video.idl
  31. 383 0
      ThirdParty/AgilitySdk/include/d3dx12/d3dx12_core.h
  32. 6 0
      ThirdParty/AgilitySdk/include/d3dx12/d3dx12_resource_helpers.h
  33. 328 136
      ThirdParty/AgilitySdk/include/d3dx12/d3dx12_state_object.h

+ 1 - 2
AnKi/Gr/D3D/D3DBuffer.cpp

@@ -294,10 +294,9 @@ D3D12_BARRIER_ACCESS BufferImpl::computeAccess(BufferUsageBit usage) const
 
 	if(!!(usage & BufferUsageBit::kShaderBindingTable))
 	{
-		out |= D3D12_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_READ;
+		out |= D3D12_BARRIER_ACCESS_COMMON;
 	}
 
-	ANKI_ASSERT(out);
 	return out;
 }
 

+ 25 - 5
AnKi/Gr/D3D/D3DCommandBuffer.cpp

@@ -279,8 +279,9 @@ void CommandBuffer::bindShaderProgram(ShaderProgram* prog)
 	const Bool isCompute = !!(progImpl.getShaderTypes() & ShaderTypeBit::kCompute);
 	const Bool isGraphics = !!(progImpl.getShaderTypes() & ShaderTypeBit::kAllGraphics);
 	const Bool isWg = !!(progImpl.getShaderTypes() & ShaderTypeBit::kWorkGraph);
+	const Bool isRt = !!(progImpl.getShaderTypes() & ShaderTypeBit::kAllRayTracing);
 
-	self.m_descriptors.bindRootSignature(progImpl.m_rootSignature, isCompute || isWg);
+	self.m_descriptors.bindRootSignature(progImpl.m_rootSignature, isCompute || isWg || isRt);
 
 	if(isCompute)
 	{
@@ -293,6 +294,12 @@ void CommandBuffer::bindShaderProgram(ShaderProgram* prog)
 		self.m_graphicsState.unbindShaderProgram();
 		self.m_wgProg = &progImpl;
 	}
+	else if(isRt)
+	{
+		self.m_graphicsState.unbindShaderProgram();
+		self.m_wgProg = nullptr;
+		self.m_cmdList->SetPipelineState1(progImpl.m_rt.m_stateObject);
+	}
 	else
 	{
 		ANKI_ASSERT(isGraphics);
@@ -574,11 +581,24 @@ void CommandBuffer::dispatchComputeIndirect(const BufferView& argBuffer)
 	self.m_cmdList->ExecuteIndirect(signature, 1, &impl.getD3DResource(), argBuffer.getOffset(), nullptr, 0);
 }
 
-void CommandBuffer::traceRays([[maybe_unused]] const BufferView& sbtBuffer, [[maybe_unused]] U32 sbtRecordSize,
-							  [[maybe_unused]] U32 hitGroupSbtRecordCount, [[maybe_unused]] U32 rayTypeCount, [[maybe_unused]] U32 width,
-							  [[maybe_unused]] U32 height, [[maybe_unused]] U32 depth)
+void CommandBuffer::traceRays(const BufferView& sbtBuffer, U32 sbtRecordSize, U32 hitGroupSbtRecordCount, [[maybe_unused]] U32 rayTypeCount,
+							  U32 width, U32 height, U32 depth)
 {
-	ANKI_ASSERT(!"TODO");
+	ANKI_ASSERT(rayTypeCount == 1 && "TODO");
+	ANKI_D3D_SELF(CommandBufferImpl);
+	self.dispatchCommon();
+
+	const U64 baseAddress = sbtBuffer.getBuffer().getGpuAddress() + sbtBuffer.getOffset();
+
+	D3D12_DISPATCH_RAYS_DESC dispatchDesc = {};
+	dispatchDesc.RayGenerationShaderRecord = {baseAddress, sbtRecordSize};
+	dispatchDesc.MissShaderTable = {baseAddress + sbtRecordSize, sbtRecordSize, sbtRecordSize};
+	dispatchDesc.HitGroupTable = {baseAddress + sbtRecordSize * 2, sbtRecordSize * hitGroupSbtRecordCount, sbtRecordSize};
+	dispatchDesc.Width = width;
+	dispatchDesc.Height = height;
+	dispatchDesc.Depth = depth;
+
+	self.m_cmdList->DispatchRays(&dispatchDesc);
 }
 
 void CommandBuffer::traceRaysIndirect(const BufferView& sbtBuffer, U32 sbtRecordSize, U32 hitGroupSbtRecordCount, U32 rayTypeCount,

+ 59 - 0
AnKi/Gr/D3D/D3DDescriptor.cpp

@@ -444,6 +444,65 @@ Error RootSignatureFactory::getOrCreateRootSignature(const ShaderReflection& ref
 	return Error::kNone;
 }
 
+Error RootSignatureFactory::getOrCreateLocalRootSignature(const ShaderReflection& refl, RootSignature*& signature)
+{
+	ANKI_ASSERT(refl.m_descriptor.m_d3dShaderBindingTableRecordConstantsSize > 0
+				&& (refl.m_descriptor.m_d3dShaderBindingTableRecordConstantsSize % 4) == 0);
+
+	// Compute the hash
+	const U64 hash = computeHash(&refl.m_descriptor.m_d3dShaderBindingTableRecordConstantsSize,
+								 sizeof(refl.m_descriptor.m_d3dShaderBindingTableRecordConstantsSize));
+
+	// Search if exists
+	LockGuard lock(m_mtx);
+
+	for(RootSignature* s : m_signatures)
+	{
+		if(s->m_hash == hash)
+		{
+			signature = s;
+			return Error::kNone;
+		}
+	}
+
+	// Not found, create one
+
+	D3D12_ROOT_PARAMETER1 rootParam = {};
+	rootParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
+	rootParam.Constants.Num32BitValues = refl.m_descriptor.m_d3dShaderBindingTableRecordConstantsSize / 4;
+	rootParam.Constants.RegisterSpace = 3001;
+	rootParam.Constants.ShaderRegister = 0;
+
+	D3D12_VERSIONED_ROOT_SIGNATURE_DESC verSigDesc = {};
+	verSigDesc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1;
+
+	D3D12_ROOT_SIGNATURE_DESC1& sigDesc = verSigDesc.Desc_1_1;
+	sigDesc.NumParameters = 1;
+	sigDesc.pParameters = &rootParam;
+	sigDesc.Flags = D3D12_ROOT_SIGNATURE_FLAG_LOCAL_ROOT_SIGNATURE;
+
+	ComPtr<ID3DBlob> signatureBlob;
+	ComPtr<ID3DBlob> errorBlob;
+	const HRESULT ret = D3D12SerializeVersionedRootSignature(&verSigDesc, &signatureBlob, &errorBlob);
+	if(ret != S_OK)
+	{
+		const Char* errc = reinterpret_cast<const Char*>(errorBlob->GetBufferPointer());
+		ANKI_D3D_LOGE("D3D12SerializeVersionedRootSignature() failed: %s", errc);
+	}
+
+	ID3D12RootSignature* dxRootSig;
+	ANKI_D3D_CHECK(getDevice().CreateRootSignature(0, signatureBlob->GetBufferPointer(), signatureBlob->GetBufferSize(), IID_PPV_ARGS(&dxRootSig)));
+
+	// Create the signature
+	signature = newInstance<RootSignature>(GrMemoryPool::getSingleton());
+	signature->m_hash = hash;
+	signature->m_rootSignature = dxRootSig;
+
+	m_signatures.emplaceBack(signature);
+
+	return Error::kNone;
+}
+
 void DescriptorState::init(StackMemoryPool* tempPool)
 {
 	for(auto& s : m_spaces)

+ 3 - 0
AnKi/Gr/D3D/D3DDescriptor.h

@@ -316,6 +316,9 @@ public:
 
 	Error getOrCreateRootSignature(const ShaderReflection& refl, RootSignature*& signature);
 
+	/// Local root signature for hit shaders.
+	Error getOrCreateLocalRootSignature(const ShaderReflection& refl, RootSignature*& signature);
+
 private:
 	GrDynamicArray<RootSignature*> m_signatures;
 	Mutex m_mtx;

+ 6 - 1
AnKi/Gr/D3D/D3DGrManager.cpp

@@ -27,7 +27,7 @@
 
 // Use the Agility SDK
 extern "C" {
-__declspec(dllexport) extern const UINT D3D12SDKVersion = 615; // Number taken from the download page
+__declspec(dllexport) extern const UINT D3D12SDKVersion = 616; // Number taken from the download page
 __declspec(dllexport) extern const char* D3D12SDKPath = ".\\"; // The D3D12Core.dll should be in the same dir as the .exe
 }
 
@@ -543,6 +543,11 @@ Error GrManagerImpl::initInternal(const GrManagerInitInfo& init)
 		m_capabilities.m_meshShaders = g_meshShadersCVar;
 		m_capabilities.m_pipelineQuery = true;
 		m_capabilities.m_barycentrics = true;
+		m_capabilities.m_shaderGroupHandleSize = D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES;
+
+		// It should be D3D12_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT but anki uses a single SBT for raygen, miss and hit groups so the non raygen
+		// groups should be aligned to the SBT buffer itself
+		m_capabilities.m_sbtRecordAlignment = D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT;
 	}
 
 	// Other systems

+ 183 - 6
AnKi/Gr/D3D/D3DShaderProgram.cpp

@@ -8,6 +8,7 @@
 #include <AnKi/Gr/BackendCommon/Functions.h>
 #include <AnKi/Gr/D3D/D3DDescriptor.h>
 #include <AnKi/Gr/D3D/D3DGraphicsState.h>
+#include <AnKi/Gr/D3D/D3DGrManager.h>
 
 namespace anki {
 
@@ -25,21 +26,23 @@ ShaderProgram* ShaderProgram::newInstance(const ShaderProgramInitInfo& init)
 
 ConstWeakArray<U8> ShaderProgram::getShaderGroupHandles() const
 {
-	ANKI_ASSERT(!"TODO");
-	return ConstWeakArray<U8>();
+	ANKI_D3D_SELF_CONST(ShaderProgramImpl);
+	ANKI_ASSERT(self.m_rt.m_handlesCpuBuff.getSize());
+	return self.m_rt.m_handlesCpuBuff;
 }
 
 Buffer& ShaderProgram::getShaderGroupHandlesGpuBuffer() const
 {
-	ANKI_ASSERT(!"TODO");
-	void* ptr = nullptr;
-	return *reinterpret_cast<Buffer*>(ptr);
+	ANKI_D3D_SELF_CONST(ShaderProgramImpl);
+	ANKI_ASSERT(self.m_rt.m_handlesGpuBuff.isCreated());
+	return *self.m_rt.m_handlesGpuBuff;
 }
 
 ShaderProgramImpl::~ShaderProgramImpl()
 {
 	safeRelease(m_compute.m_pipelineState);
 	safeRelease(m_workGraph.m_stateObject);
+	safeRelease(m_rt.m_stateObject);
 
 	deleteInstance(GrMemoryPool::getSingleton(), m_graphics.m_pipelineFactory);
 }
@@ -49,6 +52,7 @@ Error ShaderProgramImpl::init(const ShaderProgramInitInfo& inf)
 	ANKI_ASSERT(inf.isValid());
 
 	// Create the shader references
+	GrHashMap<U64, U32> shaderUuidToMShadersIdx; // Shader UUID to m_shaders idx
 	if(inf.m_computeShader)
 	{
 		m_shaders.emplaceBack(inf.m_computeShader);
@@ -69,7 +73,43 @@ Error ShaderProgramImpl::init(const ShaderProgramInitInfo& inf)
 	}
 	else
 	{
-		ANKI_ASSERT(!"TODO");
+		// Ray tracing
+
+		m_shaders.resizeStorage(inf.m_rayTracingShaders.m_rayGenShaders.getSize() + inf.m_rayTracingShaders.m_missShaders.getSize()
+								+ 1); // Plus at least one hit shader
+
+		for(Shader* s : inf.m_rayTracingShaders.m_rayGenShaders)
+		{
+			m_shaders.emplaceBack(s);
+		}
+
+		for(Shader* s : inf.m_rayTracingShaders.m_missShaders)
+		{
+			m_shaders.emplaceBack(s);
+		}
+
+		for(const RayTracingHitGroup& group : inf.m_rayTracingShaders.m_hitGroups)
+		{
+			if(group.m_anyHitShader)
+			{
+				auto it = shaderUuidToMShadersIdx.find(group.m_anyHitShader->getUuid());
+				if(it == shaderUuidToMShadersIdx.getEnd())
+				{
+					shaderUuidToMShadersIdx.emplace(group.m_anyHitShader->getUuid(), m_shaders.getSize());
+					m_shaders.emplaceBack(group.m_anyHitShader);
+				}
+			}
+
+			if(group.m_closestHitShader)
+			{
+				auto it = shaderUuidToMShadersIdx.find(group.m_closestHitShader->getUuid());
+				if(it == shaderUuidToMShadersIdx.getEnd())
+				{
+					shaderUuidToMShadersIdx.emplace(group.m_closestHitShader->getUuid(), m_shaders.getSize());
+					m_shaders.emplaceBack(group.m_closestHitShader);
+				}
+			}
+		}
 	}
 
 	ANKI_ASSERT(m_shaders.getSize() > 0);
@@ -185,6 +225,143 @@ Error ShaderProgramImpl::init(const ShaderProgramInitInfo& inf)
 		m_workGraphScratchBufferSize = memReqs.MaxSizeInBytes;
 	}
 
+	if(isRtProg)
+	{
+		RootSignature* localRootSig = nullptr;
+		if(m_refl.m_descriptor.m_d3dShaderBindingTableRecordConstantsSize)
+		{
+			ANKI_CHECK(RootSignatureFactory::getSingleton().getOrCreateLocalRootSignature(m_refl, localRootSig));
+		}
+
+		CD3DX12_STATE_OBJECT_DESC rtp(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE);
+
+		U32 groupCount = 0;
+		for(U32 i = 0; i < inf.m_rayTracingShaders.m_rayGenShaders.getSize(); ++i)
+		{
+			auto raygen = rtp.CreateSubobject<CD3DX12_DXIL_LIBRARY_SUBOBJECT>();
+
+			const ShaderImpl& shaderImpl = static_cast<const ShaderImpl&>(*inf.m_rayTracingShaders.m_rayGenShaders[i]);
+			const CD3DX12_SHADER_BYTECODE libCode(shaderImpl.m_binary.getBegin(), shaderImpl.m_binary.getSizeInBytes());
+
+			raygen->SetDXILLibrary(&libCode);
+			raygen->DefineExport((std::wstring(L"raygen") + std::to_wstring(i)).c_str(), L"main");
+
+			++groupCount;
+		}
+
+		for(U32 i = 0; i < inf.m_rayTracingShaders.m_missShaders.getSize(); ++i)
+		{
+			auto miss = rtp.CreateSubobject<CD3DX12_DXIL_LIBRARY_SUBOBJECT>();
+
+			const ShaderImpl& shaderImpl = static_cast<const ShaderImpl&>(*inf.m_rayTracingShaders.m_missShaders[i]);
+			const CD3DX12_SHADER_BYTECODE libCode(shaderImpl.m_binary.getBegin(), shaderImpl.m_binary.getSizeInBytes());
+
+			miss->SetDXILLibrary(&libCode);
+			miss->DefineExport((std::wstring(L"miss") + std::to_wstring(i)).c_str(), L"main");
+
+			++groupCount;
+		}
+
+		for(U32 i = 0; i < inf.m_rayTracingShaders.m_hitGroups.getSize(); ++i)
+		{
+			auto chit = rtp.CreateSubobject<CD3DX12_DXIL_LIBRARY_SUBOBJECT>();
+
+			const RayTracingHitGroup& hg = inf.m_rayTracingShaders.m_hitGroups[i];
+			ANKI_ASSERT(hg.m_anyHitShader == nullptr && "TODO");
+			const ShaderImpl& shaderImpl = static_cast<const ShaderImpl&>(*hg.m_closestHitShader);
+			const CD3DX12_SHADER_BYTECODE libCode(shaderImpl.m_binary.getBegin(), shaderImpl.m_binary.getSizeInBytes());
+
+			chit->SetDXILLibrary(&libCode);
+			const std::wstring exportName = std::wstring(L"chit") + std::to_wstring(i);
+			chit->DefineExport(exportName.c_str(), L"main");
+
+			auto hitGroup = rtp.CreateSubobject<CD3DX12_HIT_GROUP_SUBOBJECT>();
+			hitGroup->SetClosestHitShaderImport(exportName.c_str());
+			hitGroup->SetHitGroupExport((std::wstring(L"hitgroup") + std::to_wstring(i)).c_str());
+			hitGroup->SetHitGroupType(D3D12_HIT_GROUP_TYPE_TRIANGLES);
+
+			++groupCount;
+		}
+
+		// Config
+		auto shaderConfig = rtp.CreateSubobject<CD3DX12_RAYTRACING_SHADER_CONFIG_SUBOBJECT>();
+		const U32 payloadSize = 64; // Supposed to be ignored because we are using payload qualifier
+		const U32 attributeSize = 2 * sizeof(F32); // barycentrics
+		shaderConfig->Config(payloadSize, attributeSize);
+
+		auto pipelineConfig = rtp.CreateSubobject<CD3DX12_RAYTRACING_PIPELINE_CONFIG_SUBOBJECT>();
+		pipelineConfig->Config(inf.m_rayTracingShaders.m_maxRecursionDepth);
+
+		// Local signature
+		if(localRootSig)
+		{
+			auto localRootSignature = rtp.CreateSubobject<CD3DX12_LOCAL_ROOT_SIGNATURE_SUBOBJECT>();
+			localRootSignature->SetRootSignature(&localRootSig->getD3DRootSignature());
+			auto rootSignatureAssociation = rtp.CreateSubobject<CD3DX12_SUBOBJECT_TO_EXPORTS_ASSOCIATION_SUBOBJECT>();
+			rootSignatureAssociation->SetSubobjectToAssociate(*localRootSignature);
+			for(U32 i = 0; i < inf.m_rayTracingShaders.m_hitGroups.getSize(); ++i)
+			{
+				const std::wstring exportName = std::wstring(L"chit") + std::to_wstring(i);
+				rootSignatureAssociation->AddExport(exportName.c_str());
+			}
+		}
+
+		// Global signature
+		auto globalRootSignature = rtp.CreateSubobject<CD3DX12_GLOBAL_ROOT_SIGNATURE_SUBOBJECT>();
+		globalRootSignature->SetRootSignature(&m_rootSignature->getD3DRootSignature());
+
+		// Create state obj
+		ANKI_D3D_CHECK(getDevice().CreateStateObject(rtp, IID_PPV_ARGS(&m_rt.m_stateObject)));
+
+		// Store CPU handles
+		{
+			const U32 handleSize = getGrManagerImpl().getDeviceCapabilities().m_shaderGroupHandleSize;
+
+			ComPtr<ID3D12StateObjectProperties> stateObjectProperties;
+			ANKI_D3D_CHECK(m_rt.m_stateObject->QueryInterface(IID_PPV_ARGS(&stateObjectProperties)));
+
+			m_rt.m_handlesCpuBuff.resize(handleSize * groupCount, 0_U8);
+			U8* out = m_rt.m_handlesCpuBuff.getBegin();
+
+			for(U32 i = 0; i < inf.m_rayTracingShaders.m_rayGenShaders.getSize(); ++i)
+			{
+				void* handle = stateObjectProperties->GetShaderIdentifier((std::wstring(L"raygen") + std::to_wstring(i)).c_str());
+				memcpy(out, handle, handleSize);
+				out += handleSize;
+			}
+
+			for(U32 i = 0; i < inf.m_rayTracingShaders.m_missShaders.getSize(); ++i)
+			{
+				void* handle = stateObjectProperties->GetShaderIdentifier((std::wstring(L"miss") + std::to_wstring(i)).c_str());
+				memcpy(out, handle, handleSize);
+				out += handleSize;
+			}
+
+			for(U32 i = 0; i < inf.m_rayTracingShaders.m_hitGroups.getSize(); ++i)
+			{
+				void* handle = stateObjectProperties->GetShaderIdentifier((std::wstring(L"hitgroup") + std::to_wstring(i)).c_str());
+				memcpy(out, handle, handleSize);
+				out += handleSize;
+			}
+
+			ANKI_ASSERT(out == m_rt.m_handlesCpuBuff.getEnd());
+		}
+
+		// GPU handles
+		{
+			// Upload RT handles
+			BufferInitInfo buffInit("RT handles");
+			buffInit.m_size = m_rt.m_handlesCpuBuff.getSizeInBytes();
+			buffInit.m_mapAccess = BufferMapAccessBit::kWrite;
+			buffInit.m_usage = BufferUsageBit::kAllCompute & BufferUsageBit::kAllRead;
+			m_rt.m_handlesGpuBuff = getGrManagerImpl().newBuffer(buffInit);
+
+			void* mapped = m_rt.m_handlesGpuBuff->map(0, kMaxPtrSize, BufferMapAccessBit::kWrite);
+			memcpy(mapped, m_rt.m_handlesCpuBuff.getBegin(), m_rt.m_handlesCpuBuff.getSizeInBytes());
+			m_rt.m_handlesGpuBuff->unmap();
+		}
+	}
+
 	// Get shader sizes and a few other things
 	for(const ShaderInternalPtr& s : m_shaders)
 	{

+ 8 - 0
AnKi/Gr/D3D/D3DShaderProgram.h

@@ -42,6 +42,14 @@ public:
 		D3D12_PROGRAM_IDENTIFIER m_progIdentifier = {};
 	} m_workGraph;
 
+	class
+	{
+	public:
+		ID3D12StateObject* m_stateObject = nullptr;
+		BufferInternalPtr m_handlesGpuBuff;
+		GrDynamicArray<U8> m_handlesCpuBuff;
+	} m_rt;
+
 	ShaderProgramImpl(CString name)
 		: ShaderProgram(name)
 	{

+ 6 - 0
AnKi/Shaders/Common.hlsl

@@ -105,6 +105,12 @@ struct Barycentrics
 #	define ANKI_FAST_CONSTANTS(type, var) ConstantBuffer<type> var : register(b0, space3000);
 #endif
 
+#if ANKI_GR_BACKEND_VULKAN
+#	define ANKI_SHADER_RECORD_CONSTANTS(type, var) [[vk::shader_record_ext]] ConstantBuffer<type> var : register(b0, space3001);
+#else
+#	define ANKI_SHADER_RECORD_CONSTANTS(type, var) ConstantBuffer<type> var : register(b0, space3001);
+#endif
+
 #if ANKI_GR_BACKEND_VULKAN
 #	define ANKI_BINDLESS(texType, compType) \
 		[[vk::binding(0, 1000000)]] Texture##texType<compType> g_bindlessTextures##texType##compType[]; \

+ 1 - 1
AnKi/Shaders/GBufferGeneric.ankiprog

@@ -687,7 +687,7 @@ GBufferPixelOut main(
 #	define USE_POSITION_FETCH_NORMALS ANKI_GR_BACKEND_VULKAN
 
 #	if ANKI_CLOSEST_HIT_SHADER
-[[vk::shader_record_ext]] ConstantBuffer<GpuSceneRenderableInstance> g_gpuSceneRenderable : register(b0); // TODO that won't work on D3D
+ANKI_SHADER_RECORD_CONSTANTS(GpuSceneRenderableInstance, g_gpuSceneRenderable)
 
 [shader("closesthit")] void main(inout RtMaterialFetchRayPayload payload : SV_RayPayload, in Barycentrics barycentrics : SV_IntersectionAttributes)
 {

+ 4 - 3
Tests/Gr/Gr.cpp

@@ -2514,6 +2514,7 @@ float4 main(VertOut input) : SV_TARGET0
 ANKI_TEST(Gr, RayTracingPipeline)
 {
 	g_rayTracingCVar = true;
+	// g_deviceCVar = 1;
 	commonInit();
 
 	{
@@ -2581,7 +2582,7 @@ ANKI_TEST(Gr, RayTracingPipeline)
 			inst[1].m_transform = Mat3x4(Vec3(0.0f, -2.0f, 0.0f), Mat3::getIdentity(), Vec3(1.0f));
 			inst[1].m_instanceCustomIndex = 1;
 			inst[1].m_instanceShaderBindingTableRecordOffset = 1;
-			BufferPtr instBuff = createBuffer(BufferUsageBit::kAll, inst, 1);
+			BufferPtr instBuff = createBuffer(BufferUsageBit::kAccelerationStructureBuild, inst, 1, "TLAS instances");
 
 			AccelerationStructureInitInfo init;
 			init.m_type = AccelerationStructureType::kTopLevel;
@@ -2610,7 +2611,7 @@ struct SbtConsts
 	float3 m_color;
 };
 
-[[vk::shader_record_ext]] ConstantBuffer<SbtConsts> g_sbtConsts : register(b0);
+[[vk::shader_record_ext]] ConstantBuffer<SbtConsts> g_sbtConsts : register(b0, space3001);
 
 [shader("closesthit")] void main(inout Payload payload : SV_RayPayload, in Barycentrics barycentrics : SV_IntersectionAttributes)
 {
@@ -2724,7 +2725,7 @@ RWTexture2D<float4> g_uav : register(u0);
 				++count;
 			}
 
-			sbt = createBuffer(BufferUsageBit::kShaderBindingTable, ConstWeakArray(sbtData));
+			sbt = createBuffer(BufferUsageBit::kShaderBindingTable, ConstWeakArray(sbtData), "SBT");
 		}
 
 		// Build AS

+ 12 - 0
Tests/Gr/GrCommon.h

@@ -148,7 +148,19 @@ inline BufferPtr createBuffer(BufferUsageBit usage, ConstWeakArray<T> data, CStr
 	CommandBufferInitInfo cmdbInit;
 	cmdbInit.m_flags |= CommandBufferFlag::kSmallBatch;
 	CommandBufferPtr cmdb = GrManager::getSingleton().newCommandBuffer(cmdbInit);
+
+	BufferBarrierInfo barr;
+	barr.m_bufferView = BufferView(buff.get());
+	barr.m_previousUsage = BufferUsageBit::kNone;
+	barr.m_nextUsage = BufferUsageBit::kCopyDestination;
+	cmdb->setPipelineBarrier({}, {&barr, 1}, {});
+
 	cmdb->copyBufferToBuffer(BufferView(copyBuff.get()), BufferView(buff.get()));
+
+	barr.m_previousUsage = BufferUsageBit::kCopyDestination;
+	barr.m_nextUsage = usage;
+	cmdb->setPipelineBarrier({}, {&barr, 1}, {});
+
 	cmdb->endRecording();
 
 	FencePtr fence;

+ 52 - 5
ThirdParty/AgilitySdk/README.md

@@ -12,12 +12,59 @@ The included licenses apply to the following files:
 - **LICENSE-CODE.txt** : applies to all files under `build/native/include/`
 
 ## Changelog
-### Version 1.615.1
-- Fix placed resource initialization validation bug related to plane validation
-- Fix a bug where GBV patching will crash when initializing if the caller didn't request a debug info parser
 
-### Version 1.615.0
-- D3D12 officially supports applications opting to bypass shader hash validation.
+### Version 1.616.1:
+ 
+- Runtime fix: D3D12EnableExperimentalFeatures() was allowing D3D12ExperimentalShaderModels
+  - This made it look like Shader Model 6.9 could work even though it's only supported in the 1.717.x preview
+  - Now asking for D3D12ExperimentalShaderModels returns E_NOINTERFACE.
+- Debug Layer fixes:
+  - Enhanced Barrier placed resource validation fix for false errors
+  - For D3D12_BARRIER_SUBRESOURCE_RANGE, the Debug Layer was not handling the NumMipLevels=0 special case (treat IndexOrFirstMipLevel as a subresource index)
+  - Debug Layer updated to notice that RD/DS initialization can be accomplished by RenderPass Clear/Discard
+- GPU based validation (GBV):
+  - Fix for incorrect texture state/layout validation in cases where GBV needed to insert LOD calculation
+
+### Version 1.717.0
+- Everything in 1.616.0 plus:
+- Shader Model 6.9 preview, adding:
+  - Cooperative Vectors
+  - Shader Execution Reordering
+  - Support for RayQuery using Opacity Micromaps
+    - Normal TraceRay doens't require SM 6.9, so the 1.616.0 release works for it
+- D3D Video Encoding updates
+
+In this preview, mesh nodes is disabled, but could return in a future preview and/or retail release.
+
+### Version 1.616.0
+- Release Opacity Micromap support
+  - Just missing RayQuery+OMM suport that needs Shader Model 6.9 which is in the above preview
+- Tier 4 Tiled Resources
+
+### Version 1.716.1
+- Fix meta command validation
+- Add Raw UAV/SRV validation for tight aligned buffers
+- Fix a bug where AlignmentRestriction hint wasn’t being passed to drivers
+- Fix placed resource initialization validation bug related to plane validation
+- Fix a bug where GBV patching will crash when initializing if the caller didn’t request a debug info parser
+
+### Version 1.716.0
+- Application Specific Driver State
+- RecreateAt GPUVA
+- Runtime Bypass
+- Shader hash bypass 
+- Tight Alignment of Resources
+- Multiple video features
+  - Encode subregion notifications
+  - Encode output stats
+  - Encode GPU texture input map
+  - Encode GPU texture/CPU buffer dirty maps/rects
+  - Encode GPU texture/CPU buffer motion vector hints
+
+In this preview, mesh nodes is disabled, but could return in a future preview and/or retail release.
+
+### Verision 1.615.0
+- Shader hash bypass officially supports applications opting to bypass shader hash validation
 
 ### Version 1.715.0
 - Preview of mesh nodes in work graphs

BIN
ThirdParty/AgilitySdk/bin/arm64/D3D12Core.dll


BIN
ThirdParty/AgilitySdk/bin/arm64/D3D12Core.pdb


BIN
ThirdParty/AgilitySdk/bin/arm64/d3d12SDKLayers.dll


BIN
ThirdParty/AgilitySdk/bin/arm64/d3d12SDKLayers.pdb


BIN
ThirdParty/AgilitySdk/bin/arm64/d3dconfig.exe


BIN
ThirdParty/AgilitySdk/bin/arm64/d3dconfig.pdb


BIN
ThirdParty/AgilitySdk/bin/x64/D3D12Core.dll


BIN
ThirdParty/AgilitySdk/bin/x64/D3D12Core.pdb


BIN
ThirdParty/AgilitySdk/bin/x64/d3d12SDKLayers.dll


BIN
ThirdParty/AgilitySdk/bin/x64/d3d12SDKLayers.pdb


BIN
ThirdParty/AgilitySdk/bin/x64/d3dconfig.exe


BIN
ThirdParty/AgilitySdk/bin/x64/d3dconfig.pdb


+ 427 - 29
ThirdParty/AgilitySdk/include/d3d12.h

@@ -493,6 +493,13 @@ typedef interface ID3D12Tools1 ID3D12Tools1;
 #endif 	/* __ID3D12Tools1_FWD_DEFINED__ */
 
 
+#ifndef __ID3D12Tools2_FWD_DEFINED__
+#define __ID3D12Tools2_FWD_DEFINED__
+typedef interface ID3D12Tools2 ID3D12Tools2;
+
+#endif 	/* __ID3D12Tools2_FWD_DEFINED__ */
+
+
 #ifndef __ID3D12PageableTools_FWD_DEFINED__
 #define __ID3D12PageableTools_FWD_DEFINED__
 typedef interface ID3D12PageableTools ID3D12PageableTools;
@@ -507,6 +514,13 @@ typedef interface ID3D12DeviceTools ID3D12DeviceTools;
 #endif 	/* __ID3D12DeviceTools_FWD_DEFINED__ */
 
 
+#ifndef __ID3D12DeviceTools1_FWD_DEFINED__
+#define __ID3D12DeviceTools1_FWD_DEFINED__
+typedef interface ID3D12DeviceTools1 ID3D12DeviceTools1;
+
+#endif 	/* __ID3D12DeviceTools1_FWD_DEFINED__ */
+
+
 #ifndef __ID3D12SDKConfiguration_FWD_DEFINED__
 #define __ID3D12SDKConfiguration_FWD_DEFINED__
 typedef interface ID3D12SDKConfiguration ID3D12SDKConfiguration;
@@ -1130,7 +1144,7 @@ extern "C"{
 
 #define	D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT	( 15 )
 
-#define	D3D12_PREVIEW_SDK_VERSION	( 716 )
+#define	D3D12_PREVIEW_SDK_VERSION	( 717 )
 
 #define	D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT	( 16 )
 
@@ -1263,7 +1277,7 @@ extern "C"{
 
 #define	D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT	( 2 )
 
-#define	D3D12_SDK_VERSION	( 615 )
+#define	D3D12_SDK_VERSION	( 616 )
 
 #define	D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES	( 32 )
 
@@ -1361,6 +1375,10 @@ extern "C"{
 
 #define	D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT	( 512 )
 
+#define	D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNEMNT	( 4096 )
+
+#define	D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNEMNT	( 8 )
+
 #define	D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES	( 65536 )
 
 #define	D3D12_TRACKED_WORKLOAD_MAX_INSTANCES	( 32 )
@@ -2353,6 +2371,7 @@ enum D3D12_FEATURE
         D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO	= 51,
         D3D12_FEATURE_HARDWARE_COPY	= 52,
         D3D12_FEATURE_D3D12_OPTIONS21	= 53,
+        D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE	= 56,
         D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED	= 57
     } 	D3D12_FEATURE;
 
@@ -2726,7 +2745,8 @@ enum D3D12_RAYTRACING_TIER
     {
         D3D12_RAYTRACING_TIER_NOT_SUPPORTED	= 0,
         D3D12_RAYTRACING_TIER_1_0	= 10,
-        D3D12_RAYTRACING_TIER_1_1	= 11
+        D3D12_RAYTRACING_TIER_1_1	= 11,
+        D3D12_RAYTRACING_TIER_1_2	= 12
     } 	D3D12_RAYTRACING_TIER;
 
 typedef struct D3D12_FEATURE_DATA_D3D12_OPTIONS5
@@ -2924,6 +2944,11 @@ typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY
     _Out_  BOOL Supported;
     } 	D3D12_FEATURE_DATA_HARDWARE_COPY;
 
+typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE
+    {
+    _Out_  BOOL Supported;
+    } 	D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE;
+
 typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED
     {
     _Out_  BOOL Supported;
@@ -14384,7 +14409,8 @@ enum D3D12_RAYTRACING_PIPELINE_FLAGS
     {
         D3D12_RAYTRACING_PIPELINE_FLAG_NONE	= 0,
         D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES	= 0x100,
-        D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES	= 0x200
+        D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES	= 0x200,
+        D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS	= 0x400
     } 	D3D12_RAYTRACING_PIPELINE_FLAGS;
 
 DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS )
@@ -14538,7 +14564,8 @@ typedef
 enum D3D12_RAYTRACING_GEOMETRY_TYPE
     {
         D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES	= 0,
-        D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS	= ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) 
+        D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS	= ( D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES + 1 ) ,
+        D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES	= ( D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS + 1 ) 
     } 	D3D12_RAYTRACING_GEOMETRY_TYPE;
 
 typedef 
@@ -14548,7 +14575,9 @@ enum D3D12_RAYTRACING_INSTANCE_FLAGS
         D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE	= 0x1,
         D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE	= 0x2,
         D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE	= 0x4,
-        D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE	= 0x8
+        D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE	= 0x8,
+        D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE	= 0x10,
+        D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS	= 0x20
     } 	D3D12_RAYTRACING_INSTANCE_FLAGS;
 
 DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS )
@@ -14598,6 +14627,51 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC
     D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE AABBs;
     } 	D3D12_RAYTRACING_GEOMETRY_AABBS_DESC;
 
+typedef 
+enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX
+    {
+        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT	= -1,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE	= -2,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT	= -3,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE	= -4
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX;
+
+typedef 
+enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE
+    {
+        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT	= 0,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE	= 1,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT	= 2,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE	= 3
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_STATE;
+
+typedef 
+enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT
+    {
+        D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE	= 0x1,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE	= 0x2
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC
+{
+    UINT ByteOffset;
+    UINT SubdivisionLevel : 16;
+    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16;
+} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC;
+typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC
+    {
+    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer;
+    DXGI_FORMAT OpacityMicromapIndexFormat;
+    UINT OpacityMicromapBaseLocation;
+    D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray;
+    } 	D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC;
+
+typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC
+    {
+    const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC *pTriangles;
+    const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC *pOmmLinkage;
+    } 	D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC;
+
 typedef 
 enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
     {
@@ -14607,7 +14681,9 @@ enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
         D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_TRACE	= 0x4,
         D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD	= 0x8,
         D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY	= 0x10,
-        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE	= 0x20
+        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE	= 0x20,
+        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE	= 0x40,
+        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS	= 0x80
     } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS;
 
 DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS )
@@ -14625,7 +14701,8 @@ typedef
 enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE
     {
         D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL	= 0,
-        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL	= 0x1
+        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL	= 0x1,
+        D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY	= 0x2
     } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE;
 
 typedef 
@@ -14670,12 +14747,20 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION
 // depending on Type field, NumDescs above is followed by either:
 //       D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs]
 //    or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs].
+//    or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case).
+//
+// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer
+//
 // There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU.
 
 typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC
     {
     UINT64 SerializedSizeInBytes;
-    UINT64 NumBottomLevelAccelerationStructurePointers;
+    union 
+        {
+        UINT64 NumBottomLevelAccelerationStructurePointers;
+        UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs;
+        } 	;
     } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC;
 
 typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
@@ -14687,7 +14772,8 @@ typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
 typedef 
 enum D3D12_SERIALIZED_DATA_TYPE
     {
-        D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE	= 0
+        D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE	= 0,
+        D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE	= 0x1
     } 	D3D12_SERIALIZED_DATA_TYPE;
 
 typedef 
@@ -14708,6 +14794,39 @@ typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER
     UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader;
     } 	D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER;
 
+typedef 
+enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE
+    {
+        D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE	= 0,
+        D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS	= 0,
+        D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS	= 0xffffffff
+    } 	D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE;
+
+typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1
+    {
+    D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
+    UINT64 SerializedSizeInBytesIncludingHeader;
+    UINT64 DeserializedSizeInBytes;
+    union 
+        {
+        UINT NumBottomLevelAccelerationStructurePointersAfterHeader;
+        UINT NumBlocks;
+        } 	;
+    D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType;
+    } 	D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1;
+
+typedef 
+enum D3D12_SERIALIZED_BLOCK_TYPE
+    {
+        D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS	= 0
+    } 	D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE;
+
+typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK
+    {
+    D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type;
+    UINT64 NumBlockPointersAfterHeader;
+    } 	D3D12_RAYTRACING_SERIALIZED_BLOCK;
+
 typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC
     {
     UINT64 CurrentSizeInBytes;
@@ -14731,9 +14850,25 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_DESC
         {
         D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC Triangles;
         D3D12_RAYTRACING_GEOMETRY_AABBS_DESC AABBs;
+        D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC OmmTriangles;
         } 	;
     } 	D3D12_RAYTRACING_GEOMETRY_DESC;
 
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY
+    {
+    UINT Count;
+    UINT SubdivisionLevel;
+    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format;
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC
+    {
+    UINT NumOmmHistogramEntries;
+    const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY *pOmmHistogram;
+    D3D12_GPU_VIRTUAL_ADDRESS InputBuffer;
+    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs;
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC;
+
 typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
     {
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
@@ -14745,6 +14880,7 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
         D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs;
         const D3D12_RAYTRACING_GEOMETRY_DESC *pGeometryDescs;
         const D3D12_RAYTRACING_GEOMETRY_DESC *const *ppGeometryDescs;
+        const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC *pOpacityMicromapArrayDesc;
         } 	;
     } 	D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS;
 
@@ -14763,6 +14899,29 @@ typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO
     UINT64 UpdateScratchDataSizeInBytes;
     } 	D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO;
 
+typedef 
+enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE
+    {
+        D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE	= 0,
+        D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION	= 0x1
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC
+    {
+    D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
+    D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType;
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC
+    {
+    UINT64 CurrentSizeInBytes;
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
+    {
+    UINT64 DecodedSizeInBytes;
+    } 	D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;
+
 typedef 
 enum D3D12_RAY_FLAGS
     {
@@ -14776,7 +14935,8 @@ enum D3D12_RAY_FLAGS
         D3D12_RAY_FLAG_CULL_OPAQUE	= 0x40,
         D3D12_RAY_FLAG_CULL_NON_OPAQUE	= 0x80,
         D3D12_RAY_FLAG_SKIP_TRIANGLES	= 0x100,
-        D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES	= 0x200
+        D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES	= 0x200,
+        D3D12_RAY_FLAG_FORCE_OMM_2_STATE	= 0x400
     } 	D3D12_RAY_FLAGS;
 
 DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS )
@@ -28786,6 +28946,124 @@ EXTERN_C const IID IID_ID3D12Tools1;
 #endif 	/* __ID3D12Tools1_INTERFACE_DEFINED__ */
 
 
+#ifndef __ID3D12Tools2_INTERFACE_DEFINED__
+#define __ID3D12Tools2_INTERFACE_DEFINED__
+
+/* interface ID3D12Tools2 */
+/* [unique][local][object][uuid] */ 
+
+
+EXTERN_C const IID IID_ID3D12Tools2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("01d393c5-c9b0-42a1-958c-c26b02d4d097")
+    ID3D12Tools2 : public ID3D12Tools1
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetApplicationSpecificDriverState( 
+            _In_  IUnknown *pAdapter,
+            _In_opt_  ID3DBlob *pBlob) = 0;
+        
+    };
+    
+    
+#else 	/* C style interface */
+
+    typedef struct ID3D12Tools2Vtbl
+    {
+        BEGIN_INTERFACE
+        
+        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ID3D12Tools2 * This,
+            REFIID riid,
+            _COM_Outptr_  void **ppvObject);
+        
+        DECLSPEC_XFGVIRT(IUnknown, AddRef)
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ID3D12Tools2 * This);
+        
+        DECLSPEC_XFGVIRT(IUnknown, Release)
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ID3D12Tools2 * This);
+        
+        DECLSPEC_XFGVIRT(ID3D12Tools, EnableShaderInstrumentation)
+        void ( STDMETHODCALLTYPE *EnableShaderInstrumentation )( 
+            ID3D12Tools2 * This,
+            BOOL bEnable);
+        
+        DECLSPEC_XFGVIRT(ID3D12Tools, ShaderInstrumentationEnabled)
+        BOOL ( STDMETHODCALLTYPE *ShaderInstrumentationEnabled )( 
+            ID3D12Tools2 * This);
+        
+        DECLSPEC_XFGVIRT(ID3D12Tools1, ReserveGPUVARangesAtCreate)
+        HRESULT ( STDMETHODCALLTYPE *ReserveGPUVARangesAtCreate )( 
+            ID3D12Tools2 * This,
+            _In_reads_(uiNumRanges)  D3D12_GPU_VIRTUAL_ADDRESS_RANGE *pRanges,
+            _In_  UINT uiNumRanges);
+        
+        DECLSPEC_XFGVIRT(ID3D12Tools1, ClearReservedGPUVARangesList)
+        void ( STDMETHODCALLTYPE *ClearReservedGPUVARangesList )( 
+            ID3D12Tools2 * This);
+        
+        DECLSPEC_XFGVIRT(ID3D12Tools2, SetApplicationSpecificDriverState)
+        HRESULT ( STDMETHODCALLTYPE *SetApplicationSpecificDriverState )( 
+            ID3D12Tools2 * This,
+            _In_  IUnknown *pAdapter,
+            _In_opt_  ID3DBlob *pBlob);
+        
+        END_INTERFACE
+    } ID3D12Tools2Vtbl;
+
+    interface ID3D12Tools2
+    {
+        CONST_VTBL struct ID3D12Tools2Vtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ID3D12Tools2_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ID3D12Tools2_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ID3D12Tools2_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ID3D12Tools2_EnableShaderInstrumentation(This,bEnable)	\
+    ( (This)->lpVtbl -> EnableShaderInstrumentation(This,bEnable) ) 
+
+#define ID3D12Tools2_ShaderInstrumentationEnabled(This)	\
+    ( (This)->lpVtbl -> ShaderInstrumentationEnabled(This) ) 
+
+
+#define ID3D12Tools2_ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges)	\
+    ( (This)->lpVtbl -> ReserveGPUVARangesAtCreate(This,pRanges,uiNumRanges) ) 
+
+#define ID3D12Tools2_ClearReservedGPUVARangesList(This)	\
+    ( (This)->lpVtbl -> ClearReservedGPUVARangesList(This) ) 
+
+
+#define ID3D12Tools2_SetApplicationSpecificDriverState(This,pAdapter,pBlob)	\
+    ( (This)->lpVtbl -> SetApplicationSpecificDriverState(This,pAdapter,pBlob) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ID3D12Tools2_INTERFACE_DEFINED__ */
+
+
 #ifndef __ID3D12PageableTools_INTERFACE_DEFINED__
 #define __ID3D12PageableTools_INTERFACE_DEFINED__
 
@@ -28952,7 +29230,125 @@ EXTERN_C const IID IID_ID3D12DeviceTools;
 #endif 	/* __ID3D12DeviceTools_INTERFACE_DEFINED__ */
 
 
-/* interface __MIDL_itf_d3d12_0000_0065 */
+/* interface __MIDL_itf_d3d12_0000_0066 */
+/* [local] */ 
+
+typedef 
+enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS
+    {
+        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN	= 1,
+        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED	= 2,
+        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED	= 3,
+        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED	= 4
+    } 	D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0066_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0066_v0_0_s_ifspec;
+
+#ifndef __ID3D12DeviceTools1_INTERFACE_DEFINED__
+#define __ID3D12DeviceTools1_INTERFACE_DEFINED__
+
+/* interface ID3D12DeviceTools1 */
+/* [unique][local][object][uuid] */ 
+
+
+EXTERN_C const IID IID_ID3D12DeviceTools1;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("e30e9fc7-e641-4d6e-8a81-9dd9206ec47a")
+    ID3D12DeviceTools1 : public ID3D12DeviceTools
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetApplicationSpecificDriverState( 
+            _COM_Outptr_  ID3DBlob **ppBlob) = 0;
+        
+        virtual D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS STDMETHODCALLTYPE GetApplicationSpecificDriverBlobStatus( void) = 0;
+        
+    };
+    
+    
+#else 	/* C style interface */
+
+    typedef struct ID3D12DeviceTools1Vtbl
+    {
+        BEGIN_INTERFACE
+        
+        DECLSPEC_XFGVIRT(IUnknown, QueryInterface)
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ID3D12DeviceTools1 * This,
+            REFIID riid,
+            _COM_Outptr_  void **ppvObject);
+        
+        DECLSPEC_XFGVIRT(IUnknown, AddRef)
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ID3D12DeviceTools1 * This);
+        
+        DECLSPEC_XFGVIRT(IUnknown, Release)
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ID3D12DeviceTools1 * This);
+        
+        DECLSPEC_XFGVIRT(ID3D12DeviceTools, SetNextAllocationAddress)
+        void ( STDMETHODCALLTYPE *SetNextAllocationAddress )( 
+            ID3D12DeviceTools1 * This,
+            _In_  D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress);
+        
+        DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverState)
+        HRESULT ( STDMETHODCALLTYPE *GetApplicationSpecificDriverState )( 
+            ID3D12DeviceTools1 * This,
+            _COM_Outptr_  ID3DBlob **ppBlob);
+        
+        DECLSPEC_XFGVIRT(ID3D12DeviceTools1, GetApplicationSpecificDriverBlobStatus)
+        D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS ( STDMETHODCALLTYPE *GetApplicationSpecificDriverBlobStatus )( 
+            ID3D12DeviceTools1 * This);
+        
+        END_INTERFACE
+    } ID3D12DeviceTools1Vtbl;
+
+    interface ID3D12DeviceTools1
+    {
+        CONST_VTBL struct ID3D12DeviceTools1Vtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ID3D12DeviceTools1_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ID3D12DeviceTools1_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ID3D12DeviceTools1_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ID3D12DeviceTools1_SetNextAllocationAddress(This,nextAllocationVirtualAddress)	\
+    ( (This)->lpVtbl -> SetNextAllocationAddress(This,nextAllocationVirtualAddress) ) 
+
+
+#define ID3D12DeviceTools1_GetApplicationSpecificDriverState(This,ppBlob)	\
+    ( (This)->lpVtbl -> GetApplicationSpecificDriverState(This,ppBlob) ) 
+
+#define ID3D12DeviceTools1_GetApplicationSpecificDriverBlobStatus(This)	\
+    ( (This)->lpVtbl -> GetApplicationSpecificDriverBlobStatus(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ID3D12DeviceTools1_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_d3d12_0000_0067 */
 /* [local] */ 
 
 typedef struct D3D12_SUBRESOURCE_DATA
@@ -29103,8 +29499,8 @@ HRESULT WINAPI D3D12GetInterface( _In_ REFCLSID rclsid, _In_ REFIID riid, _COM_O
 
 
 
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0065_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0065_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_s_ifspec;
 
 #ifndef __ID3D12SDKConfiguration_INTERFACE_DEFINED__
 #define __ID3D12SDKConfiguration_INTERFACE_DEFINED__
@@ -29299,7 +29695,7 @@ EXTERN_C const IID IID_ID3D12SDKConfiguration1;
 #endif 	/* __ID3D12SDKConfiguration1_INTERFACE_DEFINED__ */
 
 
-/* interface __MIDL_itf_d3d12_0000_0067 */
+/* interface __MIDL_itf_d3d12_0000_0069 */
 /* [local] */ 
 
 typedef 
@@ -29314,8 +29710,8 @@ enum D3D12_DEVICE_FACTORY_FLAGS
 DEFINE_ENUM_FLAG_OPERATORS( D3D12_DEVICE_FACTORY_FLAGS )
 
 
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0067_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0069_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0069_v0_0_s_ifspec;
 
 #ifndef __ID3D12DeviceFactory_INTERFACE_DEFINED__
 #define __ID3D12DeviceFactory_INTERFACE_DEFINED__
@@ -29476,7 +29872,7 @@ EXTERN_C const IID IID_ID3D12DeviceFactory;
 #endif 	/* __ID3D12DeviceFactory_INTERFACE_DEFINED__ */
 
 
-/* interface __MIDL_itf_d3d12_0000_0068 */
+/* interface __MIDL_itf_d3d12_0000_0070 */
 /* [local] */ 
 
 typedef 
@@ -29507,8 +29903,8 @@ typedef struct D3D12_DEVICE_CONFIGURATION_DESC
 
 
 
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0068_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec;
 
 #ifndef __ID3D12DeviceConfiguration_INTERFACE_DEFINED__
 #define __ID3D12DeviceConfiguration_INTERFACE_DEFINED__
@@ -29796,7 +30192,7 @@ EXTERN_C const IID IID_ID3D12DeviceConfiguration1;
 #endif 	/* __ID3D12DeviceConfiguration1_INTERFACE_DEFINED__ */
 
 
-/* interface __MIDL_itf_d3d12_0000_0070 */
+/* interface __MIDL_itf_d3d12_0000_0072 */
 /* [local] */ 
 
 typedef 
@@ -29836,8 +30232,8 @@ enum D3D12_SHADING_RATE_COMBINER
 
 
 
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0070_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0072_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0072_v0_0_s_ifspec;
 
 #ifndef __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__
 #define __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__
@@ -30672,7 +31068,7 @@ EXTERN_C const IID IID_ID3D12GraphicsCommandList5;
 #endif 	/* __ID3D12GraphicsCommandList5_INTERFACE_DEFINED__ */
 
 
-/* interface __MIDL_itf_d3d12_0000_0071 */
+/* interface __MIDL_itf_d3d12_0000_0073 */
 /* [local] */ 
 
 typedef struct D3D12_DISPATCH_MESH_ARGUMENTS
@@ -30684,8 +31080,8 @@ typedef struct D3D12_DISPATCH_MESH_ARGUMENTS
 
 
 
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0071_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0073_v0_0_s_ifspec;
 
 #ifndef __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__
 #define __ID3D12GraphicsCommandList6_INTERFACE_DEFINED__
@@ -35263,7 +35659,7 @@ EXTERN_C const IID IID_ID3D12GBVDiagnostics;
 #endif 	/* __ID3D12GBVDiagnostics_INTERFACE_DEFINED__ */
 
 
-/* interface __MIDL_itf_d3d12_0000_0078 */
+/* interface __MIDL_itf_d3d12_0000_0080 */
 /* [local] */ 
 
 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_GAMES) */
@@ -35331,8 +35727,10 @@ DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x88,0xad,0x49
 DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76);
 DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);
 DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0);
+DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97);
 DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d);
 DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9);
+DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a);
 DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7);
 DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f);
 DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb);
@@ -35348,8 +35746,8 @@ DEFINE_GUID(IID_ID3D12DSRDeviceFactory,0xf343d1a0,0xafe3,0x439f,0xb1,0x3d,0xcd,0
 DEFINE_GUID(IID_ID3D12GBVDiagnostics,0x597985ab,0x9b75,0x4dbb,0xbe,0x23,0x07,0x61,0x19,0x5b,0xeb,0xee);
 
 
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0078_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0080_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_d3d12_0000_0080_v0_0_s_ifspec;
 
 /* Additional Prototypes for ALL interfaces */
 

+ 174 - 8
ThirdParty/AgilitySdk/include/d3d12.idl

@@ -293,7 +293,7 @@ const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff;
 const UINT D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8;
 const UINT D3D12_PACKED_TILE = 0xffffffff;
 const UINT D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15;
-const UINT D3D12_PREVIEW_SDK_VERSION = 716;
+const UINT D3D12_PREVIEW_SDK_VERSION = 717;
 const UINT D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16;
 const UINT D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1;
 const UINT D3D12_PS_CS_UAV_REGISTER_COUNT = 8;
@@ -361,7 +361,7 @@ const UINT D3D12_REQ_TEXTURECUBE_DIMENSION = 16384;
 const UINT D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0;
 const UINT D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff;
 const UINT D3D12_RS_SET_SHADING_RATE_COMBINER_COUNT = 2;
-const UINT D3D12_SDK_VERSION = 615;
+const UINT D3D12_SDK_VERSION = 616;
 const UINT D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES = 32;
 const UINT D3D12_SHADER_MAJOR_VERSION = 5;
 const UINT D3D12_SHADER_MAX_INSTANCES = 65535;
@@ -414,6 +414,8 @@ const UINT D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1;
 const UINT D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16;
 const UINT D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256;
 const UINT D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512;
+const UINT D3D12_TIGHT_ALIGNMENT_MIN_COMMITTED_RESOURCE_ALIGNEMNT = 4096;
+const UINT D3D12_TIGHT_ALIGNMENT_MIN_PLACED_RESOURCE_ALIGNEMNT = 8;
 const UINT D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES = 65536;
 const UINT D3D12_TRACKED_WORKLOAD_MAX_INSTANCES = 32;
 const UINT D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096;
@@ -1044,6 +1046,7 @@ typedef enum D3D12_FEATURE
     D3D12_FEATURE_PLACED_RESOURCE_SUPPORT_INFO          = 51,
     D3D12_FEATURE_HARDWARE_COPY                         = 52,
     D3D12_FEATURE_D3D12_OPTIONS21                       = 53,
+    D3D12_FEATURE_APPLICATION_SPECIFIC_DRIVER_STATE     = 56,
     D3D12_FEATURE_BYTECODE_BYPASS_HASH_SUPPORTED        = 57,
 } D3D12_FEATURE;
 
@@ -1423,6 +1426,7 @@ typedef enum D3D12_RAYTRACING_TIER
     D3D12_RAYTRACING_TIER_NOT_SUPPORTED = 0,
     D3D12_RAYTRACING_TIER_1_0 = 10,
     D3D12_RAYTRACING_TIER_1_1 = 11,
+    D3D12_RAYTRACING_TIER_1_2 = 12,
 } D3D12_RAYTRACING_TIER;
 
 // D3D12_FEATURE_D3D12_OPTIONS5
@@ -1638,6 +1642,10 @@ typedef struct D3D12_FEATURE_DATA_HARDWARE_COPY
     [annotation("_Out_")] BOOL Supported;
 } D3D12_FEATURE_DATA_HARDWARE_COPY;
 
+typedef struct D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE
+{
+    [annotation("_Out_")] BOOL Supported;
+} D3D12_FEATURE_DATA_APPLICATION_SPECIFIC_DRIVER_STATE;
 
 typedef struct D3D12_FEATURE_DATA_BYTECODE_BYPASS_HASH_SUPPORTED
 {
@@ -4579,7 +4587,8 @@ typedef enum D3D12_RAYTRACING_PIPELINE_FLAGS
     D3D12_RAYTRACING_PIPELINE_FLAG_NONE                         = 0x0,
     D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES               = 0x100,
     D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES   = 0x200,
-} D3D12_RAYTRACING_PIPELINE_FLAGS; 
+    D3D12_RAYTRACING_PIPELINE_FLAG_ALLOW_OPACITY_MICROMAPS      = 0x400,
+} D3D12_RAYTRACING_PIPELINE_FLAGS;
 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_PIPELINE_FLAGS )")
 
 typedef struct D3D12_RAYTRACING_PIPELINE_CONFIG1
@@ -4727,6 +4736,7 @@ typedef enum D3D12_RAYTRACING_GEOMETRY_TYPE
 {
     D3D12_RAYTRACING_GEOMETRY_TYPE_TRIANGLES,
     D3D12_RAYTRACING_GEOMETRY_TYPE_PROCEDURAL_PRIMITIVE_AABBS,
+    D3D12_RAYTRACING_GEOMETRY_TYPE_OMM_TRIANGLES
 } D3D12_RAYTRACING_GEOMETRY_TYPE;
 
 typedef enum D3D12_RAYTRACING_INSTANCE_FLAGS
@@ -4735,7 +4745,9 @@ typedef enum D3D12_RAYTRACING_INSTANCE_FLAGS
     D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_CULL_DISABLE = 0x1,
     D3D12_RAYTRACING_INSTANCE_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 0x2,
     D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OPAQUE = 0x4,
-    D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8
+    D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_NON_OPAQUE = 0x8,
+    D3D12_RAYTRACING_INSTANCE_FLAG_FORCE_OMM_2_STATE = 0x10,
+    D3D12_RAYTRACING_INSTANCE_FLAG_DISABLE_OMMS = 0x20
 } D3D12_RAYTRACING_INSTANCE_FLAGS;
 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_INSTANCE_FLAGS )")
 
@@ -4785,6 +4797,49 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_AABBS_DESC
     D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE    AABBs;
 } D3D12_RAYTRACING_GEOMETRY_AABBS_DESC;
 
+typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX
+{
+    D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_TRANSPARENT = -1,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE = -2,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT = -3,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE = -4,
+} D3D12_RAYTRACING_OPACITY_MICROMAP_SPECIAL_INDEX;
+
+typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_STATE
+{
+    D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_TRANSPARENT = 0,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_OPAQUE = 1,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_TRANSPARENT = 2,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_STATE_UNKNOWN_OPAQUE = 3,
+} D3D12_RAYTRACING_OPACITY_MICROMAP_STATE;
+
+typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT
+{
+    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_2_STATE = 0x1,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT_OC1_4_STATE = 0x2,
+} D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT;
+
+cpp_quote("typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_DESC")
+cpp_quote("{")
+cpp_quote("    UINT ByteOffset;")
+cpp_quote("    UINT SubdivisionLevel : 16;")
+cpp_quote("    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format : 16;")
+cpp_quote("} D3D12_RAYTRACING_OPACITY_MICROMAP_DESC;")
+
+typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC
+{
+    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE OpacityMicromapIndexBuffer;
+    DXGI_FORMAT OpacityMicromapIndexFormat;
+    UINT OpacityMicromapBaseLocation;
+    D3D12_GPU_VIRTUAL_ADDRESS OpacityMicromapArray;
+} D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC;
+
+typedef struct D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC
+{
+    const D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC* pTriangles;
+    const D3D12_RAYTRACING_GEOMETRY_OMM_LINKAGE_DESC* pOmmLinkage;
+} D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC;
+
 typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
 {
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_NONE = 0x00,
@@ -4794,6 +4849,8 @@ typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PREFER_FAST_BUILD = 0x08,
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_MINIMIZE_MEMORY = 0x10,
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_PERFORM_UPDATE = 0x20,
+    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_OMM_UPDATE = 0x40,
+    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAG_ALLOW_DISABLE_OMMS = 0x80,
 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS;
 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS )")
 
@@ -4809,7 +4866,8 @@ typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE
 typedef enum D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE
 {
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL = 0x0,
-    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1
+    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL = 0x1,
+    D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE_OPACITY_MICROMAP_ARRAY = 0x2,
 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE;
 
 typedef enum D3D12_ELEMENTS_LAYOUT
@@ -4851,13 +4909,21 @@ cpp_quote("// Regarding D3D12_BUILD_RAY_TRACING_ACCELERATION_STRUCTURE_TOOLS_VIS
 cpp_quote("// depending on Type field, NumDescs above is followed by either:")
 cpp_quote("//       D3D12_RAY_TRACING_INSTANCE_DESC InstanceDescs[NumDescs]")
 cpp_quote("//    or D3D12_RAY_TRACING_GEOMETRY_DESC GeometryDescs[NumDescs].")
+cpp_quote("//    or D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC (NumDescs == 1 in this case).")
+cpp_quote("//")
+cpp_quote("// For D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC, the pOmmHistogram pointer becomes a GPUVA instead of CPU pointer")
+cpp_quote("//")
 cpp_quote("// There is 4 bytes of padding between GeometryDesc structs in the array so alignment is natural when viewed by CPU.")
 cpp_quote("")
 
 typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC
 {
     UINT64 SerializedSizeInBytes;
-    UINT64 NumBottomLevelAccelerationStructurePointers;
+    union
+    {
+        UINT64 NumBottomLevelAccelerationStructurePointers;
+        UINT64 NumBottomLevelAccelerationStructureHeaderAndPointerListPairs;
+    };
 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC;
 
 typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
@@ -4869,6 +4935,7 @@ typedef struct D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER
 typedef enum D3D12_SERIALIZED_DATA_TYPE
 {
     D3D12_SERIALIZED_DATA_RAYTRACING_ACCELERATION_STRUCTURE = 0x0,
+    D3D12_SERIALIZED_DATA_APPLICATION_SPECIFIC_DRIVER_STATE = 0x1,
 } D3D12_SERIALIZED_DATA_TYPE;
 
 typedef enum D3D12_DRIVER_MATCHING_IDENTIFIER_STATUS
@@ -4888,6 +4955,37 @@ typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER
     UINT64 NumBottomLevelAccelerationStructurePointersAfterHeader;
 } D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER;
 
+typedef enum D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE
+{
+    D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_NONE = 0,
+    D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BOTTOM_LEVEL_POINTERS = 0,
+    D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE_BLOCKS = 0xffffffff
+} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE;
+
+typedef struct D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1
+{
+    D3D12_SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER DriverMatchingIdentifier;
+    UINT64 SerializedSizeInBytesIncludingHeader;
+    UINT64 DeserializedSizeInBytes;
+    union
+    {
+        UINT NumBottomLevelAccelerationStructurePointersAfterHeader;
+        UINT NumBlocks;
+    };
+    D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER_POSTAMBLE_TYPE HeaderPostambleType;
+} D3D12_SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER1;
+
+typedef enum D3D12_SERIALIZED_BLOCK_TYPE
+{
+    D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE_OPACITY_MICROMAPS = 0x0,
+} D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE;
+
+typedef struct D3D12_RAYTRACING_SERIALIZED_BLOCK
+{
+    D3D12_RAYTRACING_SERIALIZED_BLOCK_TYPE Type;
+    UINT64 NumBlockPointersAfterHeader;
+} D3D12_RAYTRACING_SERIALIZED_BLOCK;
+
 typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC
 {
     UINT64 CurrentSizeInBytes;
@@ -4909,11 +5007,27 @@ typedef struct D3D12_RAYTRACING_GEOMETRY_DESC
     D3D12_RAYTRACING_GEOMETRY_FLAGS   Flags;
     union
     {
-        D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC  Triangles;
-        D3D12_RAYTRACING_GEOMETRY_AABBS_DESC      AABBs;
+        D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC        Triangles;
+        D3D12_RAYTRACING_GEOMETRY_AABBS_DESC            AABBs;
+        D3D12_RAYTRACING_GEOMETRY_OMM_TRIANGLES_DESC    OmmTriangles;
     };
 } D3D12_RAYTRACING_GEOMETRY_DESC;
 
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY
+{
+    UINT Count;
+    UINT SubdivisionLevel;
+    D3D12_RAYTRACING_OPACITY_MICROMAP_FORMAT Format;
+} D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC
+{
+    UINT NumOmmHistogramEntries;
+    const D3D12_RAYTRACING_OPACITY_MICROMAP_HISTOGRAM_ENTRY* pOmmHistogram;
+    D3D12_GPU_VIRTUAL_ADDRESS InputBuffer;
+    D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE PerOmmDescs;
+} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC;
+
 typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
 {
     D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE Type;
@@ -4925,6 +5039,7 @@ typedef struct D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS
         D3D12_GPU_VIRTUAL_ADDRESS InstanceDescs;
         const D3D12_RAYTRACING_GEOMETRY_DESC* pGeometryDescs;
         const D3D12_RAYTRACING_GEOMETRY_DESC*const* ppGeometryDescs;
+        const D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_DESC* pOpacityMicromapArrayDesc;
     };
 } D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS;
 
@@ -4943,6 +5058,28 @@ typedef struct D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO
     UINT64 UpdateScratchDataSizeInBytes;
 } D3D12_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO;
 
+typedef enum D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE
+{
+    D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE = 0x0,
+    D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION = 0x1,
+} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC
+{
+    D3D12_GPU_VIRTUAL_ADDRESS DestBuffer;
+    D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TYPE InfoType;
+} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_DESC;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC
+{
+    UINT64 CurrentSizeInBytes;
+} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_CURRENT_SIZE_DESC;
+
+typedef struct D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC
+{
+    UINT64 DecodedSizeInBytes;
+} D3D12_RAYTRACING_OPACITY_MICROMAP_ARRAY_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;
+
 typedef enum D3D12_RAY_FLAGS
 {
     D3D12_RAY_FLAG_NONE                            = 0x00,
@@ -4956,6 +5093,7 @@ typedef enum D3D12_RAY_FLAGS
     D3D12_RAY_FLAG_CULL_NON_OPAQUE                 = 0x80,
     D3D12_RAY_FLAG_SKIP_TRIANGLES                  = 0x100,
     D3D12_RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES      = 0x200,
+    D3D12_RAY_FLAG_FORCE_OMM_2_STATE               = 0x400,
 } D3D12_RAY_FLAGS; 
 cpp_quote( "DEFINE_ENUM_FLAG_OPERATORS( D3D12_RAY_FLAGS )" )
 
@@ -6090,6 +6228,7 @@ interface ID3D12Device14 : ID3D12Device13
 };
 
 
+
 [uuid(bc66d368-7373-4943-8757-fc87dc79e476), object, local, pointer_default(unique)]
 interface ID3D12VirtualizationGuestDevice
     : IUnknown
@@ -6125,6 +6264,14 @@ interface ID3D12Tools1
     void ClearReservedGPUVARangesList();
 }
 
+[uuid(01d393c5-c9b0-42a1-958c-c26b02d4d097), object, local, pointer_default(unique)]
+interface ID3D12Tools2
+    : ID3D12Tools1
+{
+    HRESULT SetApplicationSpecificDriverState(
+        [annotation("_In_")] IUnknown* pAdapter,
+        [annotation("_In_opt_")] ID3DBlob* pBlob);
+};
 
 [uuid(8f1359db-d8d1-42f9-b5cf-79f4cbad0d3d), object, local, pointer_default(unique)]
 interface ID3D12PageableTools
@@ -6142,6 +6289,23 @@ interface ID3D12DeviceTools
         [annotation("_In_")] D3D12_GPU_VIRTUAL_ADDRESS nextAllocationVirtualAddress);
 }
 
+typedef enum D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS
+{
+    D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_UNKNOWN = 1,
+    D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_USED = 2,
+    D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_IGNORED = 3,
+    D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_NOT_SPECIFIED = 4,
+} D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS;
+
+[uuid(e30e9fc7-e641-4d6e-8a81-9dd9206ec47a), object, local, pointer_default(unique)]
+interface ID3D12DeviceTools1
+    : ID3D12DeviceTools
+{
+    HRESULT GetApplicationSpecificDriverState(
+        [annotation("_COM_Outptr_")]  ID3DBlob** ppBlob);
+    D3D12_APPLICATION_SPECIFIC_DRIVER_BLOB_STATUS GetApplicationSpecificDriverBlobStatus();
+}
+
 
 typedef struct D3D12_SUBRESOURCE_DATA
 {
@@ -6620,8 +6784,10 @@ cpp_quote( "DEFINE_GUID(IID_ID3D12Device14,0x5f6e592d,0xd895,0x44c2,0x8e,0x4a,0x
 cpp_quote( "DEFINE_GUID(IID_ID3D12VirtualizationGuestDevice,0xbc66d368,0x7373,0x4943,0x87,0x57,0xfc,0x87,0xdc,0x79,0xe4,0x76);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12Tools,0x7071e1f0,0xe84b,0x4b33,0x97,0x4f,0x12,0xfa,0x49,0xde,0x65,0xc5);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12Tools1,0xe4fbc019,0xdd3c,0x43e1,0x8f,0x32,0x7f,0x64,0x95,0x75,0xf0,0xa0);" )
+cpp_quote( "DEFINE_GUID(IID_ID3D12Tools2,0x01d393c5,0xc9b0,0x42a1,0x95,0x8c,0xc2,0x6b,0x02,0xd4,0xd0,0x97);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12PageableTools,0x8f1359db,0xd8d1,0x42f9,0xb5,0xcf,0x79,0xf4,0xcb,0xad,0x0d,0x3d);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools,0x2ea68e9c,0x19c3,0x4e47,0xa1,0x09,0x6c,0xda,0xdf,0xf0,0xac,0xa9);" )
+cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceTools1,0xe30e9fc7,0xe641,0x4d6e,0x8a,0x81,0x9d,0xd9,0x20,0x6e,0xc4,0x7a);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration,0xe9eb5314,0x33aa,0x42b2,0xa7,0x18,0xd7,0x7f,0x58,0xb1,0xf1,0xc7);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12SDKConfiguration1,0x8aaf9303,0xad25,0x48b9,0x9a,0x57,0xd9,0xc3,0x7e,0x00,0x9d,0x9f);" )
 cpp_quote( "DEFINE_GUID(IID_ID3D12DeviceFactory,0x61f307d3,0xd34e,0x4e7c,0x83,0x74,0x3b,0xa4,0xde,0x23,0xcc,0xcb);" )

+ 3 - 1
ThirdParty/AgilitySdk/include/d3d12sdklayers.h

@@ -3359,7 +3359,9 @@ enum D3D12_MESSAGE_ID
         D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED	= 1421,
         D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED	= 1422,
         D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR	= 1423,
-        D3D12_MESSAGE_ID_D3D12_MESSAGES_END	= ( D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR + 1 ) 
+        D3D12_MESSAGE_ID_FENCE_ZERO_WAIT	= 1424,
+        D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE	= 1425,
+        D3D12_MESSAGE_ID_D3D12_MESSAGES_END	= ( D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE + 1 ) 
     } 	D3D12_MESSAGE_ID;
 
 typedef struct D3D12_MESSAGE

+ 2 - 0
ThirdParty/AgilitySdk/include/d3d12sdklayers.idl

@@ -1508,6 +1508,8 @@ typedef enum D3D12_MESSAGE_ID {
     D3D12_MESSAGE_ID_APPLICATION_SPECIFIC_DRIVER_STATE_NOT_SUPPORTED = 1421,
     D3D12_MESSAGE_ID_RENDER_TARGET_OR_DEPTH_STENCIL_RESOUCE_NOT_INITIALIZED = 1422,
     D3D12_MESSAGE_ID_BYTECODE_VALIDATION_ERROR = 1423,
+    D3D12_MESSAGE_ID_FENCE_ZERO_WAIT = 1424,
+    D3D12_MESSAGE_ID_NON_COMMON_RESOURCE_IN_COPY_QUEUE = 1425,
     D3D12_MESSAGE_ID_D3D12_MESSAGES_END  
 } D3D12_MESSAGE_ID;
 

+ 2 - 1
ThirdParty/AgilitySdk/include/d3d12video.h

@@ -7566,7 +7566,8 @@ enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS
         D3D12_VIDEO_ENCODER_VALIDATION_FLAG_SUBREGION_LAYOUT_DATA_NOT_SUPPORTED	= 0x1000,
         D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED	= 0x2000,
         D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED	= 0x4000,
-        D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED	= 0x8000
+        D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED	= 0x8000,
+        D3D12_VIDEO_ENCODER_VALIDATION_FLAG_FRAME_ANALYSIS_NOT_SUPPORTED	= 0x10000
     } 	D3D12_VIDEO_ENCODER_VALIDATION_FLAGS;
 
 DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS)

+ 1 - 0
ThirdParty/AgilitySdk/include/d3d12video.idl

@@ -2628,6 +2628,7 @@ typedef enum D3D12_VIDEO_ENCODER_VALIDATION_FLAGS
     D3D12_VIDEO_ENCODER_VALIDATION_FLAG_QPMAP_NOT_SUPPORTED = 0x2000,
     D3D12_VIDEO_ENCODER_VALIDATION_FLAG_DIRTY_REGIONS_NOT_SUPPORTED = 0x4000,
     D3D12_VIDEO_ENCODER_VALIDATION_FLAG_MOTION_SEARCH_NOT_SUPPORTED = 0x8000,
+    D3D12_VIDEO_ENCODER_VALIDATION_FLAG_FRAME_ANALYSIS_NOT_SUPPORTED = 0x10000,
 } D3D12_VIDEO_ENCODER_VALIDATION_FLAGS;
 cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(D3D12_VIDEO_ENCODER_VALIDATION_FLAGS)")
 

+ 383 - 0
ThirdParty/AgilitySdk/include/d3dx12/d3dx12_core.h

@@ -1496,6 +1496,389 @@ inline const CD3DX12_RESOURCE_DESC1* D3DX12ConditionallyExpandAPIDesc(
 }
 
 
+//------------------------------------------------------------------------------------------------
+struct CD3DX12_SHADER_RESOURCE_VIEW_DESC : public D3D12_SHADER_RESOURCE_VIEW_DESC
+{
+    CD3DX12_SHADER_RESOURCE_VIEW_DESC() = default;
+    explicit CD3DX12_SHADER_RESOURCE_VIEW_DESC( const D3D12_SHADER_RESOURCE_VIEW_DESC& o ) noexcept :
+        D3D12_SHADER_RESOURCE_VIEW_DESC(o)
+    {}
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC StructuredBuffer(
+        UINT NumElements,
+        UINT StructureByteStride,
+        UINT64 FirstElement = 0) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = DXGI_FORMAT_UNKNOWN;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;
+        desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
+        desc.Buffer.FirstElement = FirstElement;
+        desc.Buffer.NumElements = NumElements;
+        desc.Buffer.StructureByteStride = StructureByteStride;
+        desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC RawBuffer(
+        UINT NumElements,
+        UINT64 FirstElement = 0) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = DXGI_FORMAT_R32_UINT;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;
+        desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
+        desc.Buffer.FirstElement = FirstElement;
+        desc.Buffer.NumElements = NumElements;
+        desc.Buffer.StructureByteStride = 0;
+        desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TypedBuffer(
+        DXGI_FORMAT Format,
+        UINT NumElements,
+        UINT64 FirstElement = 0,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Buffer.FirstElement = FirstElement;
+        desc.Buffer.NumElements = NumElements;
+        desc.Buffer.StructureByteStride = 0;
+        desc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex1D(
+        DXGI_FORMAT Format,
+        UINT MipLevels = -1,
+        UINT MostDetailedMip = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Texture1D.MostDetailedMip = MostDetailedMip;
+        desc.Texture1D.MipLevels = MipLevels;
+        desc.Texture1D.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex1DArray(
+        DXGI_FORMAT Format,
+        UINT ArraySize = -1,
+        UINT MipLevels = -1,
+        UINT FirstArraySlice = 0,
+        UINT MostDetailedMip = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Texture1DArray.MostDetailedMip = MostDetailedMip;
+        desc.Texture1DArray.MipLevels = MipLevels;
+        desc.Texture1DArray.FirstArraySlice = FirstArraySlice;
+        desc.Texture1DArray.ArraySize = ArraySize;
+        desc.Texture1DArray.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2D(
+        DXGI_FORMAT Format,
+        UINT MipLevels = -1,
+        UINT MostDetailedMip = 0,
+        UINT PlaneSlice = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Texture2D.MostDetailedMip = MostDetailedMip;
+        desc.Texture2D.MipLevels = MipLevels;
+        desc.Texture2D.PlaneSlice = PlaneSlice;
+        desc.Texture2D.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DArray(
+        DXGI_FORMAT Format,
+        UINT ArraySize = -1,
+        UINT MipLevels = -1,
+        UINT FirstArraySlice = 0,
+        UINT MostDetailedMip = 0,
+        UINT PlaneSlice = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Texture2DArray.MostDetailedMip = MostDetailedMip;
+        desc.Texture2DArray.MipLevels = MipLevels;
+        desc.Texture2DArray.FirstArraySlice = FirstArraySlice;
+        desc.Texture2DArray.ArraySize = ArraySize;
+        desc.Texture2DArray.PlaneSlice = PlaneSlice;
+        desc.Texture2DArray.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DMS(
+        DXGI_FORMAT Format,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMS;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        // desc.Texture2DMS.UnusedField_NothingToDefine = 0;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex2DMSArray(
+        DXGI_FORMAT Format,
+        UINT ArraySize,
+        UINT FirstArraySlice = 0,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Texture2DMSArray.ArraySize = ArraySize;
+        desc.Texture2DMSArray.FirstArraySlice = FirstArraySlice;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC Tex3D(
+        DXGI_FORMAT Format,
+        UINT MipLevels = -1,
+        UINT MostDetailedMip = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.Texture3D.MostDetailedMip = MostDetailedMip;
+        desc.Texture3D.MipLevels = MipLevels;
+        desc.Texture3D.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TexCube(
+        DXGI_FORMAT Format,
+        UINT MipLevels = -1,
+        UINT MostDetailedMip = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.TextureCube.MostDetailedMip = MostDetailedMip;
+        desc.TextureCube.MipLevels = MipLevels;
+        desc.TextureCube.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC TexCubeArray(
+        DXGI_FORMAT Format,
+        UINT NumCubes,
+        UINT MipLevels = -1,
+        UINT First2DArrayFace = 0,
+        UINT MostDetailedMip = 0,
+        FLOAT ResourceMinLODClamp = 0.0f,
+        UINT Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY;
+        desc.Shader4ComponentMapping = Shader4ComponentMapping;
+        desc.TextureCubeArray.NumCubes = NumCubes;
+        desc.TextureCubeArray.MostDetailedMip = MostDetailedMip;
+        desc.TextureCubeArray.MipLevels = MipLevels;
+        desc.TextureCubeArray.First2DArrayFace = First2DArrayFace;
+        desc.TextureCubeArray.ResourceMinLODClamp = ResourceMinLODClamp;
+        return desc;
+    }
+
+    static inline CD3DX12_SHADER_RESOURCE_VIEW_DESC RaytracingAccelStruct(
+        D3D12_GPU_VIRTUAL_ADDRESS Location) noexcept
+    {
+        CD3DX12_SHADER_RESOURCE_VIEW_DESC desc;
+        desc.Format = DXGI_FORMAT_UNKNOWN;
+        desc.ViewDimension = D3D12_SRV_DIMENSION_RAYTRACING_ACCELERATION_STRUCTURE;
+        desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
+        desc.RaytracingAccelerationStructure.Location = Location;
+        return desc;
+    }
+};
+
+//------------------------------------------------------------------------------------------------
+struct CD3DX12_UNORDERED_ACCESS_VIEW_DESC : public D3D12_UNORDERED_ACCESS_VIEW_DESC
+{
+    CD3DX12_UNORDERED_ACCESS_VIEW_DESC() = default;
+    explicit CD3DX12_UNORDERED_ACCESS_VIEW_DESC( const D3D12_UNORDERED_ACCESS_VIEW_DESC& o ) noexcept :
+        D3D12_UNORDERED_ACCESS_VIEW_DESC(o)
+    {}
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC StructuredBuffer(
+        UINT NumElements,
+        UINT StructureByteStride,
+        UINT64 FirstElement = 0,
+        UINT64 CounterOffsetInBytes = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = DXGI_FORMAT_UNKNOWN;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;
+        desc.Buffer.FirstElement = FirstElement;
+        desc.Buffer.NumElements = NumElements;
+        desc.Buffer.StructureByteStride = StructureByteStride;
+        desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE;
+        desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC RawBuffer(
+        UINT NumElements,
+        UINT64 FirstElement = 0,
+        UINT64 CounterOffsetInBytes = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = DXGI_FORMAT_R32_UINT;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;
+        desc.Buffer.FirstElement = FirstElement;
+        desc.Buffer.NumElements = NumElements;
+        desc.Buffer.StructureByteStride = 0;
+        desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_RAW;
+        desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC TypedBuffer(
+        DXGI_FORMAT Format,
+        UINT NumElements,
+        UINT64 FirstElement = 0,
+        UINT64 CounterOffsetInBytes = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;
+        desc.Buffer.FirstElement = FirstElement;
+        desc.Buffer.NumElements = NumElements;
+        desc.Buffer.StructureByteStride = 0;
+        desc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE;
+        desc.Buffer.CounterOffsetInBytes = CounterOffsetInBytes;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex1D(
+        DXGI_FORMAT Format,
+        UINT MipSlice = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D;
+        desc.Texture1D.MipSlice = MipSlice;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex1DArray(
+        DXGI_FORMAT Format,
+        UINT ArraySize = -1,
+        UINT FirstArraySlice = 0,
+        UINT MipSlice = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1DARRAY;
+        desc.Texture1DArray.MipSlice = MipSlice;
+        desc.Texture1DArray.FirstArraySlice = FirstArraySlice;
+        desc.Texture1DArray.ArraySize = ArraySize;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2D(
+        DXGI_FORMAT Format,
+        UINT MipSlice = 0,
+        UINT PlaneSlice = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
+        desc.Texture2D.MipSlice = MipSlice;
+        desc.Texture2D.PlaneSlice = PlaneSlice;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DArray(
+        DXGI_FORMAT Format,
+        UINT ArraySize = -1,
+        UINT FirstArraySlice = 0,
+        UINT MipSlice = 0,
+        UINT PlaneSlice = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY;
+        desc.Texture2DArray.MipSlice = MipSlice;
+        desc.Texture2DArray.FirstArraySlice = FirstArraySlice;
+        desc.Texture2DArray.ArraySize = ArraySize;
+        desc.Texture2DArray.PlaneSlice = PlaneSlice;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DMS(
+        DXGI_FORMAT Format) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMS;
+        //desc.Texture2DMS.UnusedField_NothingToDefine = 0;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex2DMSArray(
+        DXGI_FORMAT Format,
+        UINT ArraySize = -1,
+        UINT FirstArraySlice = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DMSARRAY;
+        desc.Texture2DMSArray.FirstArraySlice = FirstArraySlice;
+        desc.Texture2DMSArray.ArraySize = ArraySize;
+        return desc;
+    }
+
+    static inline CD3DX12_UNORDERED_ACCESS_VIEW_DESC Tex3D(
+        DXGI_FORMAT Format,
+        UINT WSize = -1,
+        UINT FirstWSlice = 0,
+        UINT MipSlice = 0) noexcept
+    {
+        CD3DX12_UNORDERED_ACCESS_VIEW_DESC desc;
+        desc.Format = Format;
+        desc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE3D;
+        desc.Texture3D.MipSlice = MipSlice;
+        desc.Texture3D.FirstWSlice = FirstWSlice;
+        desc.Texture3D.WSize = WSize;
+        return desc;
+    }
+};
+
 //------------------------------------------------------------------------------------------------
 struct CD3DX12_VIEW_INSTANCING_DESC : public D3D12_VIEW_INSTANCING_DESC
 {

+ 6 - 0
ThirdParty/AgilitySdk/include/d3dx12/d3dx12_resource_helpers.h

@@ -429,6 +429,12 @@ inline bool D3DX12GetCopyableFootprints(
     // Check if its a valid format
     D3DX12_ASSERT(D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::FormatExists(Format));
 
+    // D3DX12GetCopyableFootprints does not support buffers with width larger than UINT_MAX.
+    if (ResourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_BUFFER && ResourceDesc.Width >= UINT_MAX)
+    {
+        return false;
+    }
+
     const UINT WidthAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetWidthAlignment( Format );
     const UINT HeightAlignment = D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetHeightAlignment( Format );
     const UINT16 DepthAlignment = UINT16( D3D12_PROPERTY_LAYOUT_FORMAT_TABLE::GetDepthAlignment( Format ) );

File diff suppressed because it is too large
+ 328 - 136
ThirdParty/AgilitySdk/include/d3dx12/d3dx12_state_object.h


Some files were not shown because too many files changed in this diff