11/*
2- * Copyright 2019-2023 Diligent Graphics LLC
2+ * Copyright 2019-2025 Diligent Graphics LLC
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
@@ -44,21 +44,21 @@ bool VerifySparseTextureCompatibility(IRenderDevice* pDevice, const TextureDesc&
4444{
4545 VERIFY_EXPR (pDevice != nullptr );
4646
47- const auto & DeviceInfo = pDevice->GetDeviceInfo ().Features ;
47+ const DeviceFeatures & DeviceInfo = pDevice->GetDeviceInfo ().Features ;
4848 if (!DeviceInfo.SparseResources )
4949 {
5050 LOG_WARNING_MESSAGE (" SparseResources device feature is not enabled." );
5151 return false ;
5252 }
5353
54- const auto & SparseRes = pDevice->GetAdapterInfo ().SparseResources ;
54+ const SparseResourceProperties & SparseRes = pDevice->GetAdapterInfo ().SparseResources ;
5555 if ((SparseRes.CapFlags & SPARSE_RESOURCE_CAP_FLAG_TEXTURE_2D_ARRAY_MIP_TAIL) == 0 )
5656 {
5757 LOG_WARNING_MESSAGE (" This device does not support sparse texture 2D arrays with mip tails." );
5858 return false ;
5959 }
6060
61- const auto & SparseInfo = pDevice->GetSparseTextureFormatInfo (Desc.Format , Desc.Type , Desc.SampleCount );
61+ const SparseTextureFormatInfo & SparseInfo = pDevice->GetSparseTextureFormatInfo (Desc.Format , Desc.Type , Desc.SampleCount );
6262 if ((SparseInfo.BindFlags & Desc.BindFlags ) != Desc.BindFlags )
6363 {
6464 LOG_WARNING_MESSAGE (" The following bind flags requested for the sparse dynamic texture array are not supported by device: " , GetBindFlagsString (Desc.BindFlags & ~SparseInfo.BindFlags , " , " ));
@@ -114,16 +114,16 @@ void DynamicTextureArray::CreateSparseTexture(IRenderDevice* pDevice)
114114 return ;
115115 }
116116
117- const auto & AdapterInfo = pDevice->GetAdapterInfo ();
118- const auto & DeviceInfo = pDevice->GetDeviceInfo ();
117+ const GraphicsAdapterInfo & AdapterInfo = pDevice->GetAdapterInfo ();
118+ const RenderDeviceInfo& DeviceInfo = pDevice->GetDeviceInfo ();
119119
120120 {
121121 // Some implementations may return UINT64_MAX, so limit the maximum memory size per resource.
122122 // Some implementations will fail to create texture even if size is less than ResourceSpaceSize.
123- const auto MaxMemorySize = std::min (Uint64{1 } << 40 , AdapterInfo.SparseResources .ResourceSpaceSize ) >> 1 ;
124- const auto MipProps = GetMipLevelProperties (m_Desc, 0 );
123+ const Uint64 MaxMemorySize = std::min (Uint64{1 } << 40 , AdapterInfo.SparseResources .ResourceSpaceSize ) >> 1 ;
124+ const MipLevelProperties MipProps = GetMipLevelProperties (m_Desc, 0 );
125125
126- auto TmpDesc = m_Desc;
126+ TextureDesc TmpDesc = m_Desc;
127127 // Reserve the maximum available number of slices
128128 TmpDesc.ArraySize = AdapterInfo.Texture .MaxTexture2DArraySlices ;
129129 // Account for the maximum virtual space size
@@ -157,7 +157,7 @@ void DynamicTextureArray::CreateSparseTexture(IRenderDevice* pDevice)
157157 m_Desc.ArraySize = 0 ;
158158 }
159159
160- const auto & TexSparseProps = m_pTexture->GetSparseProperties ();
160+ const SparseTextureProperties & TexSparseProps = m_pTexture->GetSparseProperties ();
161161 if ((TexSparseProps.Flags & SPARSE_TEXTURE_FLAG_SINGLE_MIPTAIL) != 0 )
162162 {
163163 LOG_WARNING_MESSAGE (" This device requires single mip tail for the sparse texture 2D array, which is not suitable for the dynamic array." );
@@ -166,12 +166,12 @@ void DynamicTextureArray::CreateSparseTexture(IRenderDevice* pDevice)
166166 return ;
167167 }
168168
169- const auto NumNormalMips = std::min (m_Desc.MipLevels , TexSparseProps.FirstMipInTail );
169+ const Uint32 NumNormalMips = std::min (m_Desc.MipLevels , TexSparseProps.FirstMipInTail );
170170 // Compute the total number of blocks in one slice
171171 Uint64 NumBlocksInSlice = 0 ;
172172 for (Uint32 Mip = 0 ; Mip < NumNormalMips; ++Mip)
173173 {
174- const auto NumTilesInMip = GetNumSparseTilesInMipLevel (m_Desc, TexSparseProps.TileSize , Mip);
174+ const uint3 NumTilesInMip = GetNumSparseTilesInMipLevel (m_Desc, TexSparseProps.TileSize , Mip);
175175 NumBlocksInSlice += Uint64{NumTilesInMip.x } * Uint64{NumTilesInMip.y } * Uint64{NumTilesInMip.z };
176176 }
177177
@@ -234,8 +234,8 @@ void DynamicTextureArray::CreateResources(IRenderDevice* pDevice)
234234 // NB: m_Desc.Usage may be changed by CreateSparseTexture()
235235 if (m_Desc.Usage == USAGE_DEFAULT && m_PendingSize > 0 )
236236 {
237- auto Desc = m_Desc;
238- Desc.ArraySize = m_PendingSize;
237+ TextureDesc Desc = m_Desc;
238+ Desc.ArraySize = m_PendingSize;
239239 pDevice->CreateTexture (Desc, nullptr , &m_pTexture);
240240 if (m_Desc.ArraySize == 0 )
241241 {
@@ -256,28 +256,28 @@ void DynamicTextureArray::ResizeSparseTexture(IDeviceContext* pContext)
256256
257257 m_PendingSize = AlignUp (m_PendingSize, m_NumSlicesInPage);
258258
259- const auto RequiredMemSize = (m_PendingSize / m_NumSlicesInPage) * m_MemoryPageSize;
259+ const Uint64 RequiredMemSize = (m_PendingSize / m_NumSlicesInPage) * m_MemoryPageSize;
260260 if (RequiredMemSize > m_pMemory->GetCapacity ())
261261 m_pMemory->Resize (RequiredMemSize); // Allocate additional memory
262262
263- const auto NumSlicesToBind = m_PendingSize > m_Desc.ArraySize ?
263+ const Uint32 NumSlicesToBind = m_PendingSize > m_Desc.ArraySize ?
264264 m_PendingSize - m_Desc.ArraySize :
265265 m_Desc.ArraySize - m_PendingSize;
266266
267- auto CurrMemOffset = Uint64{(m_PendingSize > m_Desc.ArraySize ? m_Desc.ArraySize : m_PendingSize) / m_NumSlicesInPage} * m_MemoryPageSize;
267+ Uint64 CurrMemOffset = Uint64{(m_PendingSize > m_Desc.ArraySize ? m_Desc.ArraySize : m_PendingSize) / m_NumSlicesInPage} * m_MemoryPageSize;
268268
269- const auto & TexSparseProps = m_pTexture->GetSparseProperties ();
270- const auto NumNormalMips = std::min (m_Desc.MipLevels , TexSparseProps.FirstMipInTail );
271- const auto HasMipTail = m_Desc.MipLevels > TexSparseProps.FirstMipInTail ;
269+ const SparseTextureProperties & TexSparseProps = m_pTexture->GetSparseProperties ();
270+ const Uint32 NumNormalMips = std::min (m_Desc.MipLevels , TexSparseProps.FirstMipInTail );
271+ const bool HasMipTail = m_Desc.MipLevels > TexSparseProps.FirstMipInTail ;
272272
273273 std::vector<SparseTextureMemoryBindInfo> TexBinds;
274274 TexBinds.reserve (size_t {NumSlicesToBind} * (HasMipTail ? 2 : 1 ));
275275 std::vector<SparseTextureMemoryBindRange> MipRanges (size_t {NumSlicesToBind} * (size_t {NumNormalMips} + (HasMipTail ? 1 : 0 )));
276276
277- auto range_it = MipRanges.begin ();
278- auto StartSlice = std::min (m_Desc.ArraySize , m_PendingSize);
279- auto EndSlice = std::max (m_Desc.ArraySize , m_PendingSize);
280- for (auto Slice = StartSlice; Slice != EndSlice; ++Slice)
277+ auto range_it = MipRanges.begin ();
278+ Uint32 StartSlice = std::min (m_Desc.ArraySize , m_PendingSize);
279+ Uint32 EndSlice = std::max (m_Desc.ArraySize , m_PendingSize);
280+ for (Uint32 Slice = StartSlice; Slice != EndSlice; ++Slice)
281281 {
282282 // Bind normal mip levels
283283 {
@@ -287,18 +287,18 @@ void DynamicTextureArray::ResizeSparseTexture(IDeviceContext* pContext)
287287 NormalMipBindInfo.NumRanges = NumNormalMips;
288288 for (Uint32 Mip = 0 ; Mip < NumNormalMips; ++Mip, ++range_it)
289289 {
290- const auto MipProps = GetMipLevelProperties (m_Desc, Mip);
290+ const MipLevelProperties MipProps = GetMipLevelProperties (m_Desc, Mip);
291291
292292 range_it->ArraySlice = Slice;
293293 range_it->MipLevel = Mip;
294294 range_it->Region = Box{0 , MipProps.StorageWidth , 0 , MipProps.StorageHeight , 0 , MipProps.Depth };
295295
296296 if (Slice >= m_Desc.ArraySize )
297297 {
298- const auto NumTilesInMip = GetNumSparseTilesInBox (range_it->Region , TexSparseProps.TileSize );
299- range_it->pMemory = m_pMemory;
300- range_it->MemoryOffset = CurrMemOffset;
301- range_it->MemorySize = Uint64{NumTilesInMip.x } * NumTilesInMip.y * NumTilesInMip.z * TexSparseProps.BlockSize ;
298+ const uint3 NumTilesInMip = GetNumSparseTilesInBox (range_it->Region , TexSparseProps.TileSize );
299+ range_it->pMemory = m_pMemory;
300+ range_it->MemoryOffset = CurrMemOffset;
301+ range_it->MemorySize = Uint64{NumTilesInMip.x } * NumTilesInMip.y * NumTilesInMip.z * TexSparseProps.BlockSize ;
302302
303303 CurrMemOffset += range_it->MemorySize ;
304304 }
@@ -383,8 +383,8 @@ void DynamicTextureArray::ResizeDefaultTexture(IDeviceContext* pContext)
383383{
384384 VERIFY_EXPR (m_PendingSize != m_Desc.ArraySize );
385385 VERIFY_EXPR (m_pTexture && m_pStaleTexture);
386- const auto & SrcTexDesc = m_pStaleTexture->GetDesc ();
387- const auto & DstTexDesc = m_pTexture->GetDesc ();
386+ const TextureDesc & SrcTexDesc = m_pStaleTexture->GetDesc ();
387+ const TextureDesc & DstTexDesc = m_pTexture->GetDesc ();
388388 VERIFY_EXPR (SrcTexDesc.MipLevels == DstTexDesc.MipLevels );
389389
390390 CopyTextureAttribs CopyAttribs;
@@ -393,7 +393,7 @@ void DynamicTextureArray::ResizeDefaultTexture(IDeviceContext* pContext)
393393 CopyAttribs.SrcTextureTransitionMode = RESOURCE_STATE_TRANSITION_MODE_TRANSITION;
394394 CopyAttribs.DstTextureTransitionMode = RESOURCE_STATE_TRANSITION_MODE_TRANSITION;
395395
396- const auto NumSlicesToCopy = std::min (SrcTexDesc.ArraySize , DstTexDesc.ArraySize );
396+ const Uint32 NumSlicesToCopy = std::min (SrcTexDesc.ArraySize , DstTexDesc.ArraySize );
397397 for (Uint32 slice = 0 ; slice < NumSlicesToCopy; ++slice)
398398 {
399399 for (Uint32 mip = 0 ; mip < SrcTexDesc.MipLevels ; ++mip)
0 commit comments