#include "gdk/gdkmemoryformatprivate.h"
+#include "gskrendernodeprivate.h"
+
#include <string.h>
struct _GskVulkanUploader
}
}
+GdkMemoryFormat
+gsk_render_node_get_preferred_vulkan_format (GskRenderNode *node)
+{
+ switch (gsk_render_node_get_preferred_depth (node))
+ {
+ case GDK_MEMORY_U8:
+ return GDK_MEMORY_R8G8B8A8_PREMULTIPLIED;
+ case GDK_MEMORY_U16:
+ return GDK_MEMORY_R16G16B16A16_PREMULTIPLIED;
+ case GDK_MEMORY_FLOAT16:
+ return GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED;
+ case GDK_MEMORY_FLOAT32:
+ return GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED;
+ default:
+ g_return_val_if_reached (GDK_MEMORY_R8G8B8A8_PREMULTIPLIED);
+ }
+}
+
static gboolean
gsk_vulkan_context_supports_format (GdkVulkanContext *context,
VkFormat format)
#pragma once
#include <gdk/gdk.h>
+#include <gsk/gskrendernode.h>
#include "gskvulkanbufferprivate.h"
#include "gskvulkancommandpoolprivate.h"
+
G_BEGIN_DECLS
typedef struct _GskVulkanUploader GskVulkanUploader;
void gsk_vulkan_uploader_reset (GskVulkanUploader *self);
void gsk_vulkan_uploader_upload (GskVulkanUploader *self);
+GdkMemoryFormat gsk_render_node_get_preferred_vulkan_format (GskRenderNode *node);
+
GskVulkanImage * gsk_vulkan_image_new_for_swapchain (GdkVulkanContext *context,
VkImage image,
VkFormat format,
ceil (viewport->size.width),
ceil (viewport->size.height));
image = gsk_vulkan_image_new_for_offscreen (self->vulkan,
- GDK_MEMORY_DEFAULT,
+ gsk_render_node_get_preferred_vulkan_format (root),
rounded_viewport.size.width,
rounded_viewport.size.height);
ceil (scale_y * viewport->size.height));
result = gsk_vulkan_image_new_for_offscreen (vulkan,
- GDK_MEMORY_DEFAULT,
+ gsk_render_node_get_preferred_vulkan_format (node),
view.size.width, view.size.height);
#ifdef G_ENABLE_DEBUG