gsize size;
+ VkMemoryType vk_memory_type;
VkDeviceMemory vk_memory;
};
g_assert (i < properties.memoryTypeCount);
+ self->vk_memory_type = properties.memoryTypes[i];
GSK_VK_CHECK (vkAllocateMemory, gdk_vulkan_context_get_device (context),
&(VkMemoryAllocateInfo) {
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
return self->vk_memory;
}
+gboolean
+gsk_vulkan_memory_can_map (GskVulkanMemory *self,
+ gboolean fast)
+{
+ if (!(self->vk_memory_type.propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT))
+ return FALSE;
+
+ /* FIXME: no support implemented for this */
+ if (!(self->vk_memory_type.propertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT))
+ return FALSE;
+
+ if (!fast)
+ return TRUE;
+
+ if (!(self->vk_memory_type.propertyFlags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT))
+ return FALSE;
+
+ return TRUE;
+}
+
guchar *
gsk_vulkan_memory_map (GskVulkanMemory *self)
{
void *data;
+ g_assert (gsk_vulkan_memory_can_map (self, FALSE));
+
GSK_VK_CHECK (vkMapMemory, gdk_vulkan_context_get_device (self->vulkan),
self->vk_memory,
0,
VkDeviceMemory gsk_vulkan_memory_get_device_memory (GskVulkanMemory *self);
+gboolean gsk_vulkan_memory_can_map (GskVulkanMemory *self,
+ gboolean fast);
guchar * gsk_vulkan_memory_map (GskVulkanMemory *self);
void gsk_vulkan_memory_unmap (GskVulkanMemory *self);