internal static uint ComputeMipOffset(Texture tex, uint mipLevel) { uint blockSize = FormatHelpers.IsCompressedFormat(tex.Format) ? 4u : 1u; uint offset = 0; for (uint level = 0; level < mipLevel; level++) { GetMipDimensions(tex, level, out uint mipWidth, out uint mipHeight, out uint mipDepth); uint storageWidth = Math.Max(mipWidth, blockSize); uint storageHeight = Math.Max(mipHeight, blockSize); offset += FormatHelpers.GetRegionSize(storageWidth, storageHeight, mipDepth, tex.Format); } return(offset); }
internal static uint ComputeArrayLayerOffset(Texture tex, uint arrayLayer) { if (arrayLayer == 0) { return(0); } uint blockSize = FormatHelpers.IsCompressedFormat(tex.Format) ? 4u : 1u; uint layerPitch = 0; for (uint level = 0; level < tex.MipLevels; level++) { GetMipDimensions(tex, level, out uint mipWidth, out uint mipHeight, out uint mipDepth); uint storageWidth = Math.Max(mipWidth, blockSize); uint storageHeight = Math.Max(mipHeight, blockSize); layerPitch += FormatHelpers.GetRegionSize(storageWidth, storageHeight, mipDepth, tex.Format); } return(layerPitch * arrayLayer); }