On 11/4/21 7:07 AM, Henri Verbeet wrote:
On Thu, 4 Nov 2021 at 06:04, Zebediah Figura zfigura@codeweavers.com wrote:
void *wined3d_allocator_chunk_vk_map(struct wined3d_allocator_chunk_vk *chunk_vk, struct wined3d_context_vk *context_vk) { struct wined3d_device_vk *device_vk = wined3d_device_vk(context_vk->c.device); const struct wined3d_vk_info *vk_info = context_vk->vk_info;
void *map_ptr; VkResult vr;
TRACE("chunk %p, memory 0x%s, map_ptr %p.\n", chunk_vk, wine_dbgstr_longlong(chunk_vk->vk_memory), chunk_vk->c.map_ptr);
wined3d_allocator_chunk_vk_lock(chunk_vk);
if (!chunk_vk->c.map_ptr && (vr = VK_CALL(vkMapMemory(device_vk->vk_device,
chunk_vk->vk_memory, 0, VK_WHOLE_SIZE, 0, &chunk_vk->c.map_ptr))) < 0)
chunk_vk->vk_memory, 0, VK_WHOLE_SIZE, 0, &map_ptr))) < 0) { ERR("Failed to map chunk memory, vr %s.\n", wined3d_debug_vkresult(vr)); return NULL; }
- chunk_vk->c.map_ptr = map_ptr;
That doesn't work. If the chunk was already mapped (i.e., "chunk_vk->c.map_ptr" isn't NULL), this will overwrite "chunk_vk->c.map_ptr" with the uninitialised "map_ptr".
Indeed; I'm surprised that gcc didn't catch that...