diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index 6bf12b0f23..bf300a1a8d 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -479,6 +479,7 @@ static VkSamplerAddressMode SDLToVK_SamplerAddressMode[] = { typedef struct VulkanMemoryAllocation VulkanMemoryAllocation; typedef struct VulkanBuffer VulkanBuffer; typedef struct VulkanBufferContainer VulkanBufferContainer; +typedef struct VulkanUniformBuffer VulkanUniformBuffer; typedef struct VulkanTexture VulkanTexture; typedef struct VulkanTextureContainer VulkanTextureContainer; @@ -573,6 +574,7 @@ struct VulkanBuffer SDL_AtomicInt referenceCount; bool transitioned; bool markedForDestroy; // so that defrag doesn't double-free + VulkanUniformBuffer *uniformBufferForDefrag; }; struct VulkanBufferContainer @@ -6811,7 +6813,7 @@ static VulkanUniformBuffer *VULKAN_INTERNAL_CreateUniformBuffer( uniformBuffer->drawOffset = 0; uniformBuffer->writeOffset = 0; - uniformBuffer->buffer->container = (VulkanBufferContainer *)uniformBuffer; // little hack for defrag + uniformBuffer->buffer->uniformBufferForDefrag = uniformBuffer; return uniformBuffer; } @@ -10691,7 +10693,7 @@ static bool VULKAN_INTERNAL_DefragmentMemory( newBuffer->container = currentRegion->vulkanBuffer->container; newBuffer->containerIndex = currentRegion->vulkanBuffer->containerIndex; if (newBuffer->type == VULKAN_BUFFER_TYPE_UNIFORM) { - ((VulkanUniformBuffer *)newBuffer->container)->buffer = newBuffer; + currentRegion->vulkanBuffer->uniformBufferForDefrag->buffer = newBuffer; } else { newBuffer->container->buffers[newBuffer->containerIndex] = newBuffer; if (newBuffer->container->activeBuffer == currentRegion->vulkanBuffer) {