mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-20 05:50:11 +00:00
vulkan: Pick high depth texture for high depth nodes
If a node has a higher depth, pick the RGBA format that has that depth as the texture format we're renderig to with render_texture(). Support for adapting the swapchain is not part of this.
This commit is contained in:
parent
d61737ac7a
commit
5b64ca7e0a
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#include "gdk/gdkmemoryformatprivate.h"
|
#include "gdk/gdkmemoryformatprivate.h"
|
||||||
|
|
||||||
|
#include "gskrendernodeprivate.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
struct _GskVulkanUploader
|
struct _GskVulkanUploader
|
||||||
@ -485,6 +487,24 @@ gsk_memory_format_get_fallback (GdkMemoryFormat format)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
static gboolean
|
||||||
gsk_vulkan_context_supports_format (GdkVulkanContext *context,
|
gsk_vulkan_context_supports_format (GdkVulkanContext *context,
|
||||||
VkFormat format)
|
VkFormat format)
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gdk/gdk.h>
|
#include <gdk/gdk.h>
|
||||||
|
#include <gsk/gskrendernode.h>
|
||||||
|
|
||||||
#include "gskvulkanbufferprivate.h"
|
#include "gskvulkanbufferprivate.h"
|
||||||
#include "gskvulkancommandpoolprivate.h"
|
#include "gskvulkancommandpoolprivate.h"
|
||||||
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
typedef struct _GskVulkanUploader GskVulkanUploader;
|
typedef struct _GskVulkanUploader GskVulkanUploader;
|
||||||
@ -20,6 +22,8 @@ void gsk_vulkan_uploader_free (GskVulk
|
|||||||
void gsk_vulkan_uploader_reset (GskVulkanUploader *self);
|
void gsk_vulkan_uploader_reset (GskVulkanUploader *self);
|
||||||
void gsk_vulkan_uploader_upload (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,
|
GskVulkanImage * gsk_vulkan_image_new_for_swapchain (GdkVulkanContext *context,
|
||||||
VkImage image,
|
VkImage image,
|
||||||
VkFormat format,
|
VkFormat format,
|
||||||
|
@ -285,7 +285,7 @@ gsk_vulkan_renderer_render_texture (GskRenderer *renderer,
|
|||||||
ceil (viewport->size.width),
|
ceil (viewport->size.width),
|
||||||
ceil (viewport->size.height));
|
ceil (viewport->size.height));
|
||||||
image = gsk_vulkan_image_new_for_offscreen (self->vulkan,
|
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.width,
|
||||||
rounded_viewport.size.height);
|
rounded_viewport.size.height);
|
||||||
|
|
||||||
|
@ -1249,7 +1249,7 @@ gsk_vulkan_render_pass_render_offscreen (GdkVulkanContext *vulkan,
|
|||||||
ceil (scale_y * viewport->size.height));
|
ceil (scale_y * viewport->size.height));
|
||||||
|
|
||||||
result = gsk_vulkan_image_new_for_offscreen (vulkan,
|
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);
|
view.size.width, view.size.height);
|
||||||
|
|
||||||
#ifdef G_ENABLE_DEBUG
|
#ifdef G_ENABLE_DEBUG
|
||||||
|
Loading…
Reference in New Issue
Block a user