Skip to content

Commit bcf946e

Browse files
committed
DkImageLayout: add automatic pitch linear image stride calculation
1 parent e4e89f4 commit bcf946e

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

source/dk_image.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -410,13 +410,18 @@ void dkImageLayoutInitialize(DkImageLayout* obj, DkImageLayoutMaker const* maker
410410
DK_DEBUG_BAD_INPUT(obj->m_mipLevels > 1,
411411
"pitch linear images cannot have more than one mipmap level");
412412

413-
obj->m_stride = maker->pitchStride;
414-
obj->m_layerSize = maker->pitchStride * obj->m_dimensions[1];
415-
obj->m_storageSize = obj->m_layerSize;
416413
if (obj->m_flags & DkImageFlags_UsageRender)
417414
obj->m_alignment = 128; // see TRM 20.1 "Tiling Formats", also supported by nouveau
418415
else
419416
obj->m_alignment = 32; // TRM implies this should be 64, but 32 has been observed instead in official software
417+
418+
if (maker->pitchStride)
419+
obj->m_stride = maker->pitchStride;
420+
else
421+
obj->m_stride = (obj->m_bytesPerBlock * obj->m_dimensions[0] + obj->m_alignment - 1) &~ (obj->m_alignment - 1);
422+
423+
obj->m_layerSize = obj->m_stride * obj->m_dimensions[1];
424+
obj->m_storageSize = obj->m_layerSize;
420425
return;
421426
}
422427

0 commit comments

Comments
 (0)