From 13edabac197cd32a1799bae05979fa3dfff7ca2a Mon Sep 17 00:00:00 2001 From: Shiny Metagross <30511800+ShinyMetagross@users.noreply.github.com> Date: Wed, 7 Sep 2022 14:47:25 -0700 Subject: [PATCH] Fixed crash on Intel cards with less than 64 uniform block align - This should fix the crash with Intel cards. Sprite blinking appears to not occur either --- src/common/rendering/hwrenderer/data/hw_bonebuffer.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/common/rendering/hwrenderer/data/hw_bonebuffer.cpp b/src/common/rendering/hwrenderer/data/hw_bonebuffer.cpp index 1cc68ca2f..6335c3fc4 100644 --- a/src/common/rendering/hwrenderer/data/hw_bonebuffer.cpp +++ b/src/common/rendering/hwrenderer/data/hw_bonebuffer.cpp @@ -47,7 +47,7 @@ BoneBuffer::BoneBuffer(int pipelineNbr) : mPipelineNbr(pipelineNbr) { mBufferType = false; mBlockSize = screen->maxuniformblock / BONE_SIZE; - mBlockAlign = screen->uniformblockalignment / BONE_SIZE; + mBlockAlign = screen->uniformblockalignment < 64 ? 1 : screen->uniformblockalignment / BONE_SIZE; mMaxUploadSize = (mBlockSize - mBlockAlign); } @@ -103,11 +103,8 @@ int BoneBuffer::UploadBones(const TArray& bones) int BoneBuffer::GetBinding(unsigned int index, size_t* pOffset, size_t* pSize) { - unsigned int offset = index; - // this function will only get called if a uniform buffer is used. For a shader storage buffer we only need to bind the buffer once at the start. - if (mBlockAlign > 0) - offset = (index / mBlockAlign) * mBlockAlign; + unsigned int offset = (index / mBlockAlign) * mBlockAlign; *pOffset = offset * BONE_SIZE; *pSize = mBlockSize * BONE_SIZE;