GdkMemoryFormat gdk_format;
} formats[4];
GdkMemoryDepth current_format;
+ GdkMemoryFormat offscreen_formats[4];
VkSwapchainKHR swapchain;
VkSemaphore draw_semaphore;
if (!priv->vulkan_ref)
return FALSE;
+ priv->offscreen_formats[GDK_MEMORY_U8] = GDK_MEMORY_B8G8R8A8_PREMULTIPLIED;
+ priv->offscreen_formats[GDK_MEMORY_U16] = GDK_MEMORY_R16G16B16A16_PREMULTIPLIED;
+ priv->offscreen_formats[GDK_MEMORY_FLOAT16] = GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED;
+ priv->offscreen_formats[GDK_MEMORY_FLOAT32] = GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED;
+
if (surface == NULL)
{
for (i = 0; i < G_N_ELEMENTS (priv->formats); i++)
{
priv->formats[GDK_MEMORY_U8].vk_format = formats[i];
priv->formats[GDK_MEMORY_U8].gdk_format = GDK_MEMORY_B8G8R8A8_PREMULTIPLIED;
+ priv->offscreen_formats[GDK_MEMORY_U8] = GDK_MEMORY_B8G8R8A8_PREMULTIPLIED;
};
break;
return FALSE;
}
+GdkMemoryFormat
+gdk_vulkan_context_get_offscreen_format (GdkVulkanContext *context,
+ GdkMemoryDepth depth)
+{
+ GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
+
+ return priv->offscreen_formats[depth];
+}
+
static void
gdk_vulkan_context_initable_init (GInitableIface *iface)
{
#define GDK_VK_CHECK(func, ...) gdk_vulkan_handle_result (func (__VA_ARGS__), G_STRINGIFY (func))
-gboolean gdk_display_ref_vulkan (GdkDisplay *display,
- GError **error);
-void gdk_display_unref_vulkan (GdkDisplay *display);
+gboolean gdk_display_ref_vulkan (GdkDisplay *display,
+ GError **error);
+void gdk_display_unref_vulkan (GdkDisplay *display);
+
+GdkMemoryFormat gdk_vulkan_context_get_offscreen_format (GdkVulkanContext *context,
+ GdkMemoryDepth depth);
#else /* !GDK_RENDERING_VULKAN */
}
}
-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"
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,
#include "gdk/gdkdisplayprivate.h"
#include "gdk/gdkdrawcontextprivate.h"
-#include "gdk/gdktextureprivate.h"
#include "gdk/gdkprofilerprivate.h"
+#include "gdk/gdktextureprivate.h"
+#include "gdk/gdkvulkancontextprivate.h"
#include <graphene.h>
ceil (viewport->size.width),
ceil (viewport->size.height));
image = gsk_vulkan_image_new_for_offscreen (self->vulkan,
- gsk_render_node_get_preferred_vulkan_format (root),
+ gdk_vulkan_context_get_offscreen_format (self->vulkan,
+ gsk_render_node_get_preferred_depth (root)),
rounded_viewport.size.width,
rounded_viewport.size.height);
#include "gskvulkanrendererprivate.h"
#include "gskprivate.h"
+#include "gdk/gdkvulkancontextprivate.h"
+
#define ORTHO_NEAR_PLANE -10000
#define ORTHO_FAR_PLANE 10000
ceil (scale_y * viewport->size.height));
result = gsk_vulkan_image_new_for_offscreen (vulkan,
- gsk_render_node_get_preferred_vulkan_format (node),
+ gdk_vulkan_context_get_offscreen_format (vulkan,
+ gsk_render_node_get_preferred_depth (node)),
view.size.width, view.size.height);
#ifdef G_ENABLE_DEBUG