mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-13 21:35:59 +00:00
vulkan: move temporary pointer to its own field to prevent a bad dereference.
Reference Issue #11075.
This commit is contained in:

committed by
Ryan C. Gordon

parent
3e530c6db1
commit
6b7dad7d82
@@ -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) {
|
||||
|
Reference in New Issue
Block a user