gtk/gsk/gpu/gskvulkanimageprivate.h
Benjamin Otte b4a1ed2a70 gpu: Add straight alpha support
Add a GSK_GPU_IMAGE_STRAIGHT_ALPHA and use it for images that have
straight alpha.
Make sure those images get passed through a premultiplying pass with
the new straight alpha shader.

Also remove the old Postprocess flags from the Vulkan image that were a
leftover from copying that code from the old Vulkan renderer.
2024-01-07 07:22:51 +01:00

64 lines
4.5 KiB
C

#pragma once
#include "gskgpuimageprivate.h"
#include "gskvulkandeviceprivate.h"
#include "gdk/gdkdmabufprivate.h"
G_BEGIN_DECLS
#define GSK_TYPE_VULKAN_IMAGE (gsk_vulkan_image_get_type ())
G_DECLARE_FINAL_TYPE (GskVulkanImage, gsk_vulkan_image, GSK, VULKAN_IMAGE, GskGpuImage)
GskGpuImage * gsk_vulkan_image_new_for_swapchain (GskVulkanDevice *device,
VkImage image,
VkFormat format,
gsize width,
gsize height);
GskGpuImage * gsk_vulkan_image_new_for_atlas (GskVulkanDevice *device,
gsize width,
gsize height);
GskGpuImage * gsk_vulkan_image_new_for_offscreen (GskVulkanDevice *device,
GdkMemoryFormat preferred_format,
gsize width,
gsize height);
GskGpuImage * gsk_vulkan_image_new_for_upload (GskVulkanDevice *device,
GdkMemoryFormat format,
gsize width,
gsize height);
#ifdef HAVE_DMABUF
GskGpuImage * gsk_vulkan_image_new_for_dmabuf (GskVulkanDevice *device,
GdkTexture *texture);
#endif
guchar * gsk_vulkan_image_get_data (GskVulkanImage *self,
gsize *out_stride);
VkSampler gsk_vulkan_image_get_vk_sampler (GskVulkanImage *self);
VkPipelineStageFlags gsk_vulkan_image_get_vk_pipeline_stage (GskVulkanImage *self);
VkImageLayout gsk_vulkan_image_get_vk_image_layout (GskVulkanImage *self);
VkAccessFlags gsk_vulkan_image_get_vk_access (GskVulkanImage *self);
void gsk_vulkan_image_set_vk_image_layout (GskVulkanImage *self,
VkPipelineStageFlags stage,
VkImageLayout image_layout,
VkAccessFlags access);
void gsk_vulkan_image_transition (GskVulkanImage *self,
VkCommandBuffer command_buffer,
VkPipelineStageFlags stage,
VkImageLayout image_layout,
VkAccessFlags access);
#define gdk_vulkan_image_transition_shader(image) \
gsk_vulkan_image_transition ((image), VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, \
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_ACCESS_SHADER_READ_BIT)
VkImage gsk_vulkan_image_get_vk_image (GskVulkanImage *self);
VkImageView gsk_vulkan_image_get_vk_image_view (GskVulkanImage *self);
VkFormat gsk_vulkan_image_get_vk_format (GskVulkanImage *self);
VkFramebuffer gsk_vulkan_image_get_vk_framebuffer (GskVulkanImage *self,
VkRenderPass pass);
G_END_DECLS