VkImageView view;
VkBuffer uniform_buffer;
VkDeviceMemory uniform_memory;
+ void *uniform_memory_ptr;
VkFramebuffer framebuffer;
VkDescriptorSet descriptor_set;
} SwapchainImageResources;
void demo_update_data_buffer(struct demo *demo) {
mat4x4 MVP, Model, VP;
int matrixSize = sizeof(MVP);
- uint8_t *pData;
- VkResult U_ASSERT_ONLY err;
mat4x4_mul(VP, demo->projection_matrix, demo->view_matrix);
mat4x4_rotate(demo->model_matrix, Model, 0.0f, 1.0f, 0.0f, (float)degreesToRadians(demo->spin_angle));
mat4x4_mul(MVP, VP, demo->model_matrix);
- err = vkMapMemory(demo->device, demo->swapchain_image_resources[demo->current_buffer].uniform_memory, 0, VK_WHOLE_SIZE, 0,
- (void **)&pData);
- assert(!err);
-
- memcpy(pData, (const void *)&MVP[0][0], matrixSize);
-
- vkUnmapMemory(demo->device, demo->swapchain_image_resources[demo->current_buffer].uniform_memory);
+ memcpy(demo->swapchain_image_resources[demo->current_buffer].uniform_memory_ptr, (const void *)&MVP[0][0], matrixSize);
}
void DemoUpdateTargetIPD(struct demo *demo) {
VkBufferCreateInfo buf_info;
VkMemoryRequirements mem_reqs;
VkMemoryAllocateInfo mem_alloc;
- uint8_t *pData;
mat4x4 MVP, VP;
VkResult U_ASSERT_ONLY err;
bool U_ASSERT_ONLY pass;
err = vkAllocateMemory(demo->device, &mem_alloc, NULL, &demo->swapchain_image_resources[i].uniform_memory);
assert(!err);
- err = vkMapMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory, 0, VK_WHOLE_SIZE, 0, (void **)&pData);
+ err = vkMapMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory, 0, VK_WHOLE_SIZE, 0,
+ &demo->swapchain_image_resources[i].uniform_memory_ptr);
assert(!err);
- memcpy(pData, &data, sizeof data);
-
- vkUnmapMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory);
+ memcpy(demo->swapchain_image_resources[i].uniform_memory_ptr, &data, sizeof data);
err = vkBindBufferMemory(demo->device, demo->swapchain_image_resources[i].uniform_buffer,
demo->swapchain_image_resources[i].uniform_memory, 0);
vkDestroyImageView(demo->device, demo->swapchain_image_resources[i].view, NULL);
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->swapchain_image_resources[i].cmd);
vkDestroyBuffer(demo->device, demo->swapchain_image_resources[i].uniform_buffer, NULL);
+ vkUnmapMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory);
vkFreeMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory, NULL);
}
free(demo->swapchain_image_resources);
vkDestroyImageView(demo->device, demo->swapchain_image_resources[i].view, NULL);
vkFreeCommandBuffers(demo->device, demo->cmd_pool, 1, &demo->swapchain_image_resources[i].cmd);
vkDestroyBuffer(demo->device, demo->swapchain_image_resources[i].uniform_buffer, NULL);
+ vkUnmapMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory);
vkFreeMemory(demo->device, demo->swapchain_image_resources[i].uniform_memory, NULL);
}
vkDestroyCommandPool(demo->device, demo->cmd_pool, NULL);
vk::ImageView view;
vk::Buffer uniform_buffer;
vk::DeviceMemory uniform_memory;
+ void *uniform_memory_ptr;
vk::Framebuffer framebuffer;
vk::DescriptorSet descriptor_set;
} SwapchainImageResources;
device.destroyImageView(swapchain_image_resources[i].view, nullptr);
device.freeCommandBuffers(cmd_pool, 1, &swapchain_image_resources[i].cmd);
device.destroyBuffer(swapchain_image_resources[i].uniform_buffer, nullptr);
+ device.unmapMemory(swapchain_image_resources[i].uniform_memory);
device.freeMemory(swapchain_image_resources[i].uniform_memory, nullptr);
}
result = device.allocateMemory(&mem_alloc, nullptr, &swapchain_image_resources[i].uniform_memory);
VERIFY(result == vk::Result::eSuccess);
- auto pData = device.mapMemory(swapchain_image_resources[i].uniform_memory, 0, VK_WHOLE_SIZE, vk::MemoryMapFlags());
- VERIFY(pData.result == vk::Result::eSuccess);
-
- memcpy(pData.value, &data, sizeof data);
+ result = device.mapMemory(swapchain_image_resources[i].uniform_memory, 0, VK_WHOLE_SIZE, vk::MemoryMapFlags(),
+ &swapchain_image_resources[i].uniform_memory_ptr);
+ VERIFY(result == vk::Result::eSuccess);
- device.unmapMemory(swapchain_image_resources[i].uniform_memory);
+ memcpy(swapchain_image_resources[i].uniform_memory_ptr, &data, sizeof data);
result =
device.bindBufferMemory(swapchain_image_resources[i].uniform_buffer, swapchain_image_resources[i].uniform_memory, 0);
device.destroyImageView(swapchain_image_resources[i].view, nullptr);
device.freeCommandBuffers(cmd_pool, 1, &swapchain_image_resources[i].cmd);
device.destroyBuffer(swapchain_image_resources[i].uniform_buffer, nullptr);
+ device.unmapMemory(swapchain_image_resources[i].uniform_memory);
device.freeMemory(swapchain_image_resources[i].uniform_memory, nullptr);
}
mat4x4 MVP;
mat4x4_mul(MVP, VP, model_matrix);
- auto data = device.mapMemory(swapchain_image_resources[current_buffer].uniform_memory, 0, VK_WHOLE_SIZE, vk::MemoryMapFlags());
- VERIFY(data.result == vk::Result::eSuccess);
-
- memcpy(data.value, (const void *)&MVP[0][0], sizeof(MVP));
-
- device.unmapMemory(swapchain_image_resources[current_buffer].uniform_memory);
+ memcpy(swapchain_image_resources[current_buffer].uniform_memory_ptr, (const void *)&MVP[0][0], sizeof(MVP));
}
/* Convert ppm image data from header file into RGBA texture image */