diff --git a/gdk/gdkmemoryformat.c b/gdk/gdkmemoryformat.c index 23adc0a3e9..c9fdc38192 100644 --- a/gdk/gdkmemoryformat.c +++ b/gdk/gdkmemoryformat.c @@ -327,6 +327,7 @@ ADD_ALPHA_FUNC(r8g8b8_to_a8b8g8r8, 0, 1, 2, 3, 2, 1, 0) struct _GdkMemoryFormatDescription { + const char *name; GdkMemoryAlpha alpha; GdkMemoryFormat premultiplied; GdkMemoryFormat straight; @@ -366,6 +367,7 @@ struct _GdkMemoryFormatDescription static const GdkMemoryFormatDescription memory_formats[] = { [GDK_MEMORY_B8G8R8A8_PREMULTIPLIED] = { + .name = "*BGRA8", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_B8G8R8A8_PREMULTIPLIED, .straight = GDK_MEMORY_B8G8R8A8, @@ -394,6 +396,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = b8g8r8a8_premultiplied_from_float, }, [GDK_MEMORY_A8R8G8B8_PREMULTIPLIED] = { + .name = "*ARGB8", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_A8R8G8B8_PREMULTIPLIED, .straight = GDK_MEMORY_A8R8G8B8, @@ -422,6 +425,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a8r8g8b8_premultiplied_from_float, }, [GDK_MEMORY_R8G8B8A8_PREMULTIPLIED] = { + .name = "*RGBA8", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_R8G8B8A8_PREMULTIPLIED, .straight = GDK_MEMORY_R8G8B8A8, @@ -449,6 +453,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r8g8b8a8_premultiplied_from_float, }, [GDK_MEMORY_A8B8G8R8_PREMULTIPLIED] = { + .name = "*ABGR8", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_A8B8G8R8_PREMULTIPLIED, .straight = GDK_MEMORY_A8B8G8R8, @@ -477,6 +482,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a8b8g8r8_premultiplied_from_float, }, [GDK_MEMORY_B8G8R8A8] = { + .name = "BGRA8", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_B8G8R8A8_PREMULTIPLIED, .straight = GDK_MEMORY_B8G8R8A8, @@ -505,6 +511,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = b8g8r8a8_from_float, }, [GDK_MEMORY_A8R8G8B8] = { + .name = "ARGB8", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_A8R8G8B8_PREMULTIPLIED, .straight = GDK_MEMORY_A8R8G8B8, @@ -533,6 +540,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a8r8g8b8_from_float, }, [GDK_MEMORY_R8G8B8A8] = { + .name = "RGBA8", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_R8G8B8A8_PREMULTIPLIED, .straight = GDK_MEMORY_R8G8B8A8, @@ -560,6 +568,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r8g8b8a8_from_float, }, [GDK_MEMORY_A8B8G8R8] = { + .name = "ABGR8", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_A8B8G8R8_PREMULTIPLIED, .straight = GDK_MEMORY_A8B8G8R8, @@ -588,6 +597,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a8b8g8r8_from_float, }, [GDK_MEMORY_B8G8R8X8] = { + .name = "BGRX8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_B8G8R8X8, .straight = GDK_MEMORY_B8G8R8X8, @@ -617,6 +627,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = b8g8r8x8_from_float, }, [GDK_MEMORY_X8R8G8B8] = { + .name = "XRGB8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_X8R8G8B8, .straight = GDK_MEMORY_X8R8G8B8, @@ -646,6 +657,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = x8r8g8b8_from_float, }, [GDK_MEMORY_R8G8B8X8] = { + .name = "RGBX8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_R8G8B8X8, .straight = GDK_MEMORY_R8G8B8X8, @@ -674,6 +686,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r8g8b8x8_from_float, }, [GDK_MEMORY_X8B8G8R8] = { + .name = "XBGR8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_X8B8G8R8, .straight = GDK_MEMORY_X8B8G8R8, @@ -703,6 +716,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = x8b8g8r8_from_float, }, [GDK_MEMORY_R8G8B8] = { + .name = "RGB8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_R8G8B8, .straight = GDK_MEMORY_R8G8B8, @@ -731,6 +745,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r8g8b8_from_float, }, [GDK_MEMORY_B8G8R8] = { + .name = "BGR8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_B8G8R8, .straight = GDK_MEMORY_B8G8R8, @@ -760,6 +775,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = b8g8r8_from_float, }, [GDK_MEMORY_R16G16B16] = { + .name = "RGB16", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_R16G16B16, .straight = GDK_MEMORY_R16G16B16, @@ -791,6 +807,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r16g16b16_from_float, }, [GDK_MEMORY_R16G16B16A16_PREMULTIPLIED] = { + .name = "*RGBA16", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_R16G16B16A16_PREMULTIPLIED, .straight = GDK_MEMORY_R16G16B16A16, @@ -821,6 +838,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r16g16b16a16_from_float, }, [GDK_MEMORY_R16G16B16A16] = { + .name = "RGBA16", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_R16G16B16A16_PREMULTIPLIED, .straight = GDK_MEMORY_R16G16B16A16, @@ -851,6 +869,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r16g16b16a16_from_float, }, [GDK_MEMORY_R16G16B16_FLOAT] = { + .name = "RGBA16f", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_R16G16B16_FLOAT, .straight = GDK_MEMORY_R16G16B16_FLOAT, @@ -881,6 +900,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r16g16b16_float_from_float, }, [GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED] = { + .name = "*RGBA16f", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED, .straight = GDK_MEMORY_R16G16B16A16_FLOAT, @@ -910,6 +930,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r16g16b16a16_float_from_float, }, [GDK_MEMORY_R16G16B16A16_FLOAT] = { + .name = "RGBA16f", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_R16G16B16A16_FLOAT_PREMULTIPLIED, .straight = GDK_MEMORY_R16G16B16A16_FLOAT, @@ -939,6 +960,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r16g16b16a16_float_from_float, }, [GDK_MEMORY_R32G32B32_FLOAT] = { + .name = "RGB32f", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_R32G32B32_FLOAT, .straight = GDK_MEMORY_R32G32B32_FLOAT, @@ -969,6 +991,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r32g32b32_float_from_float, }, [GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED] = { + .name = "*RGBA32f", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED, .straight = GDK_MEMORY_R32G32B32A32_FLOAT, @@ -998,6 +1021,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r32g32b32a32_float_from_float, }, [GDK_MEMORY_R32G32B32A32_FLOAT] = { + .name = "RGBA32f", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED, .straight = GDK_MEMORY_R32G32B32A32_FLOAT, @@ -1027,6 +1051,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = r32g32b32a32_float_from_float, }, [GDK_MEMORY_G8A8_PREMULTIPLIED] = { + .name = "*GA8", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_G8A8_PREMULTIPLIED, .straight = GDK_MEMORY_G8A8, @@ -1055,6 +1080,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = g8a8_premultiplied_from_float, }, [GDK_MEMORY_G8A8] = { + .name = "GA8", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_G8A8_PREMULTIPLIED, .straight = GDK_MEMORY_G8A8, @@ -1083,6 +1109,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = g8a8_from_float, }, [GDK_MEMORY_G8] = { + .name = "G8", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_G8, .straight = GDK_MEMORY_G8, @@ -1111,6 +1138,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = g8_from_float, }, [GDK_MEMORY_G16A16_PREMULTIPLIED] = { + .name = "*GA16", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_G16A16_PREMULTIPLIED, .straight = GDK_MEMORY_G16A16, @@ -1142,6 +1170,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = g16a16_premultiplied_from_float, }, [GDK_MEMORY_G16A16] = { + .name = "GA16", .alpha = GDK_MEMORY_ALPHA_STRAIGHT, .premultiplied = GDK_MEMORY_G16A16_PREMULTIPLIED, .straight = GDK_MEMORY_G16A16, @@ -1173,6 +1202,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = g16a16_from_float, }, [GDK_MEMORY_G16] = { + .name = "G16", .alpha = GDK_MEMORY_ALPHA_OPAQUE, .premultiplied = GDK_MEMORY_G16, .straight = GDK_MEMORY_G16, @@ -1204,6 +1234,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = g16_from_float, }, [GDK_MEMORY_A8] = { + .name = "A8", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_A8, .straight = GDK_MEMORY_A8, @@ -1232,6 +1263,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a8_from_float, }, [GDK_MEMORY_A16] = { + .name = "A16", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_A16, .straight = GDK_MEMORY_A16, @@ -1263,6 +1295,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a16_from_float, }, [GDK_MEMORY_A16_FLOAT] = { + .name = "A16f", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_A16_FLOAT, .straight = GDK_MEMORY_A16_FLOAT, @@ -1293,6 +1326,7 @@ static const GdkMemoryFormatDescription memory_formats[] = { .from_float = a16_float_from_float, }, [GDK_MEMORY_A32_FLOAT] = { + .name = "A32f", .alpha = GDK_MEMORY_ALPHA_PREMULTIPLIED, .premultiplied = GDK_MEMORY_A32_FLOAT, .straight = GDK_MEMORY_A32_FLOAT, @@ -1661,6 +1695,12 @@ gdk_memory_format_get_dmabuf_fourcc (GdkMemoryFormat format) #endif } +const char * +gdk_memory_format_get_name (GdkMemoryFormat format) +{ + return memory_formats[format].name; +} + static void premultiply (float *rgba, gsize n) diff --git a/gdk/gdkmemoryformatprivate.h b/gdk/gdkmemoryformatprivate.h index a3ecdb7bb8..878fd129e0 100644 --- a/gdk/gdkmemoryformatprivate.h +++ b/gdk/gdkmemoryformatprivate.h @@ -75,7 +75,7 @@ VkFormat gdk_memory_format_vk_rgba_format (GdkMemoryFormat VkComponentMapping *out_swizzle); #endif guint32 gdk_memory_format_get_dmabuf_fourcc (GdkMemoryFormat format); - +const char * gdk_memory_format_get_name (GdkMemoryFormat format); void gdk_memory_convert (guchar *dest_data, gsize dest_stride, diff --git a/gdk/gdkvulkancontext.c b/gdk/gdkvulkancontext.c index cc25b728e0..6b55e64b78 100644 --- a/gdk/gdkvulkancontext.c +++ b/gdk/gdkvulkancontext.c @@ -30,6 +30,7 @@ #include "gdkdmabuftextureprivate.h" #include "gdkdisplayprivate.h" #include "gdkprofilerprivate.h" +#include "gdkmemorytexture.h" #include #include @@ -647,15 +648,18 @@ gdk_vulkan_context_begin_frame (GdkDrawContext *draw_context, { if (priv->formats[depth].gdk_format != priv->formats[priv->current_format].gdk_format) { + GdkMemoryFormat old_format = priv->current_format; GError *error = NULL; + + priv->current_format = depth; if (!gdk_vulkan_context_check_swapchain (context, &error)) { g_warning ("%s", error->message); g_error_free (error); + priv->current_format = old_format; return; } } - priv->current_format = depth; } for (i = 0; i < priv->n_images; i++) { @@ -1294,6 +1298,15 @@ gdk_vulkan_context_get_image_format (GdkVulkanContext *context) return priv->formats[priv->current_format].vk_format.format; } +GdkMemoryFormat +gdk_vulkan_context_get_memory_format (GdkVulkanContext *context) +{ + GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context); + + g_return_val_if_fail (GDK_IS_VULKAN_CONTEXT (context), GDK_MEMORY_DEFAULT); + + return priv->formats[priv->current_format].gdk_format; +} /** * gdk_vulkan_context_get_n_images: * @context: a `GdkVulkanContext` diff --git a/gdk/gdkvulkancontextprivate.h b/gdk/gdkvulkancontextprivate.h index 181ddf7f01..9f7ff7cd3e 100644 --- a/gdk/gdkvulkancontextprivate.h +++ b/gdk/gdkvulkancontextprivate.h @@ -94,6 +94,7 @@ VkDevice gdk_vulkan_context_get_device (GdkVulk VkQueue gdk_vulkan_context_get_queue (GdkVulkanContext *context); uint32_t gdk_vulkan_context_get_queue_family_index (GdkVulkanContext *context); VkFormat gdk_vulkan_context_get_image_format (GdkVulkanContext *context); +GdkMemoryFormat gdk_vulkan_context_get_memory_format (GdkVulkanContext *context); uint32_t gdk_vulkan_context_get_n_images (GdkVulkanContext *context); VkImage gdk_vulkan_context_get_image (GdkVulkanContext *context, guint id); diff --git a/gsk/gpu/gskgpuprint.c b/gsk/gpu/gskgpuprint.c index 53b919422e..7fa9df3dcb 100644 --- a/gsk/gpu/gskgpuprint.c +++ b/gsk/gpu/gskgpuprint.c @@ -140,9 +140,10 @@ void gsk_gpu_print_image (GString *string, GskGpuImage *image) { - g_string_append_printf (string, "%zux%zu ", + g_string_append_printf (string, "%zux%zu %s ", gsk_gpu_image_get_width (image), - gsk_gpu_image_get_height (image)); + gsk_gpu_image_get_height (image), + gdk_memory_format_get_name (gsk_gpu_image_get_format (image))); } void diff --git a/gsk/gpu/gskvulkanimage.c b/gsk/gpu/gskvulkanimage.c index ad024594f5..d987dbad6f 100644 --- a/gsk/gpu/gskvulkanimage.c +++ b/gsk/gpu/gskvulkanimage.c @@ -433,6 +433,7 @@ GskGpuImage * gsk_vulkan_image_new_for_swapchain (GskVulkanDevice *device, VkImage image, VkFormat format, + GdkMemoryFormat memory_format, gsize width, gsize height) { @@ -449,8 +450,8 @@ gsk_vulkan_image_new_for_swapchain (GskVulkanDevice *device, self->vk_image_layout = VK_IMAGE_LAYOUT_UNDEFINED; self->vk_access = 0; - /* FIXME: The memory format and flags here are very suboptimal */ - gsk_gpu_image_setup (GSK_GPU_IMAGE (self), 0, GDK_MEMORY_DEFAULT, width, height); + /* FIXME: The flags here are very suboptimal */ + gsk_gpu_image_setup (GSK_GPU_IMAGE (self), 0, memory_format, width, height); gsk_vulkan_image_create_view (self, format, diff --git a/gsk/gpu/gskvulkanimageprivate.h b/gsk/gpu/gskvulkanimageprivate.h index 77df1e23b3..2a4a1502e1 100644 --- a/gsk/gpu/gskvulkanimageprivate.h +++ b/gsk/gpu/gskvulkanimageprivate.h @@ -14,6 +14,7 @@ G_DECLARE_FINAL_TYPE (GskVulkanImage, gsk_vulkan_image, GSK, VULKAN_IMAGE, GskGp GskGpuImage * gsk_vulkan_image_new_for_swapchain (GskVulkanDevice *device, VkImage image, VkFormat format, + GdkMemoryFormat memory_format, gsize width, gsize height); diff --git a/gsk/gpu/gskvulkanrenderer.c b/gsk/gpu/gskvulkanrenderer.c index 544902220e..9fe9f45b7d 100644 --- a/gsk/gpu/gskvulkanrenderer.c +++ b/gsk/gpu/gskvulkanrenderer.c @@ -75,6 +75,7 @@ gsk_vulkan_renderer_update_images_cb (GdkVulkanContext *context, self->targets[i] = gsk_vulkan_image_new_for_swapchain (device, gdk_vulkan_context_get_image (context, i), gdk_vulkan_context_get_image_format (context), + gdk_vulkan_context_get_memory_format (context), width, height); } }