skia_safe/gpu/ganesh/vk/
vk_backend_surface.rs1pub mod backend_formats {
2 use skia_bindings as sb;
3
4 use crate::{
5 gpu::{
6 vk::{Format, YcbcrConversionInfo},
7 BackendFormat,
8 },
9 prelude::*,
10 };
11
12 pub fn make_vk(
13 format: Format,
14 will_use_drm_format_modifiers: impl Into<Option<bool>>,
15 ) -> BackendFormat {
16 let will_use_drm_format_modifiers = will_use_drm_format_modifiers.into().unwrap_or(false);
17 BackendFormat::construct(|bf| unsafe {
18 sb::C_GrBackendFormat_ConstructVk(bf, format, will_use_drm_format_modifiers)
19 })
20 .assert_valid()
21 }
22
23 pub fn make_vk_ycbcr(
24 conversion_info: &YcbcrConversionInfo,
25 will_use_drm_format_modifiers: impl Into<Option<bool>>,
26 ) -> BackendFormat {
27 let will_use_drm_format_modifiers = will_use_drm_format_modifiers.into().unwrap_or(false);
28 BackendFormat::construct(|bf| unsafe {
29 sb::C_GrBackendFormat_ConstructVk2(
30 bf,
31 conversion_info.native(),
32 will_use_drm_format_modifiers,
33 )
34 })
35 .assert_valid()
36 }
37
38 pub fn as_vk_format(backend_format: &BackendFormat) -> Option<Format> {
39 let mut r = Format::UNDEFINED;
40 unsafe { sb::C_GrBackendFormats_AsVkFormat(backend_format.native(), &mut r) }
41 .if_true_some(r)
42 }
43
44 pub fn get_vk_ycbcr_conversion_info(
45 backend_format: &BackendFormat,
46 ) -> Option<&YcbcrConversionInfo> {
47 unsafe {
48 YcbcrConversionInfo::from_native_ptr(sb::C_GrBackendFormats_GetVkYcbcrConversionInfo(
49 backend_format.native(),
50 ))
51 .into_option()
52 .map(|r| &*r)
53 }
54 }
55}
56
57pub mod backend_textures {
58 use skia_bindings as sb;
59
60 use crate::{
61 gpu::{
62 vk::{ImageInfo, ImageLayout},
63 BackendTexture,
64 },
65 prelude::*,
66 };
67
68 #[allow(clippy::missing_safety_doc)]
69 pub unsafe fn make_vk(
70 (width, height): (i32, i32),
71 vk_info: &ImageInfo,
72 label: impl AsRef<str>,
73 ) -> BackendTexture {
74 let label = label.as_ref().as_bytes();
75 BackendTexture::from_native_if_valid(sb::C_GrBackendTexture_newVk(
76 width,
77 height,
78 vk_info.native(),
79 label.as_ptr() as _,
80 label.len(),
81 ))
82 .unwrap()
83 }
84
85 pub fn get_vk_image_info(texture: &BackendTexture) -> Option<ImageInfo> {
86 unsafe {
87 let mut image_info = ImageInfo::default();
89
90 sb::C_GrBackendTextures_GetVkImageInfo(texture.native(), image_info.native_mut())
91 .if_true_some(image_info)
92 }
93 }
94
95 pub fn set_vk_image_layout(
96 texture: &mut BackendTexture,
97 layout: ImageLayout,
98 ) -> &mut BackendTexture {
99 unsafe { sb::C_GrBackendTextures_SetVkImageLayout(texture.native_mut(), layout) }
100 texture
101 }
102}
103
104pub mod backend_render_targets {
105 use skia_bindings as sb;
106
107 use crate::{
108 gpu::{
109 vk::{ImageInfo, ImageLayout},
110 BackendRenderTarget,
111 },
112 prelude::*,
113 };
114
115 pub fn make_vk((width, height): (i32, i32), info: &ImageInfo) -> BackendRenderTarget {
116 BackendRenderTarget::construct(|target| unsafe {
117 sb::C_GrBackendRenderTargets_ConstructVk(target, width, height, info.native())
118 })
119 }
120
121 pub fn get_vk_image_info(target: &BackendRenderTarget) -> Option<ImageInfo> {
122 let mut info = ImageInfo::default();
123 unsafe { sb::C_GrBackendRenderTargets_GetVkImageInfo(target.native(), info.native_mut()) }
124 .if_true_some(info)
125 }
126
127 pub fn set_vk_image_layout(
128 target: &mut BackendRenderTarget,
129 layout: ImageLayout,
130 ) -> &mut BackendRenderTarget {
131 unsafe { sb::C_GrBackendRenderTargets_SetVkImageLayout(target.native_mut(), layout) }
132 target
133 }
134}