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) }.then_some(r)
41 }
42
43 pub fn get_vk_ycbcr_conversion_info(
44 backend_format: &BackendFormat,
45 ) -> Option<&YcbcrConversionInfo> {
46 unsafe {
47 YcbcrConversionInfo::from_native_ptr(sb::C_GrBackendFormats_GetVkYcbcrConversionInfo(
48 backend_format.native(),
49 ))
50 .into_non_null()
51 .map(|r| r.as_ref())
52 }
53 }
54}
55
56pub mod backend_textures {
57 use skia_bindings as sb;
58
59 use crate::{
60 gpu::{
61 vk::{ImageInfo, ImageLayout},
62 BackendTexture,
63 },
64 prelude::*,
65 };
66
67 #[allow(clippy::missing_safety_doc)]
68 pub unsafe fn make_vk(
69 (width, height): (i32, i32),
70 vk_info: &ImageInfo,
71 label: impl AsRef<str>,
72 ) -> BackendTexture {
73 let label = label.as_ref().as_bytes();
74 BackendTexture::from_native_if_valid(sb::C_GrBackendTexture_newVk(
75 width,
76 height,
77 vk_info.native(),
78 label.as_ptr() as _,
79 label.len(),
80 ))
81 .unwrap()
82 }
83
84 pub fn get_vk_image_info(texture: &BackendTexture) -> Option<ImageInfo> {
85 unsafe {
86 let mut image_info = ImageInfo::default();
88
89 sb::C_GrBackendTextures_GetVkImageInfo(texture.native(), image_info.native_mut())
90 .then_some(image_info)
91 }
92 }
93
94 pub fn set_vk_image_layout(
95 texture: &mut BackendTexture,
96 layout: ImageLayout,
97 ) -> &mut BackendTexture {
98 unsafe { sb::C_GrBackendTextures_SetVkImageLayout(texture.native_mut(), layout) }
99 texture
100 }
101}
102
103pub mod backend_render_targets {
104 use skia_bindings as sb;
105
106 use crate::{
107 gpu::{
108 vk::{ImageInfo, ImageLayout},
109 BackendRenderTarget,
110 },
111 prelude::*,
112 };
113
114 pub fn make_vk((width, height): (i32, i32), info: &ImageInfo) -> BackendRenderTarget {
115 BackendRenderTarget::construct(|target| unsafe {
116 sb::C_GrBackendRenderTargets_ConstructVk(target, width, height, info.native())
117 })
118 }
119
120 pub fn get_vk_image_info(target: &BackendRenderTarget) -> Option<ImageInfo> {
121 let mut info = ImageInfo::default();
122 unsafe { sb::C_GrBackendRenderTargets_GetVkImageInfo(target.native(), info.native_mut()) }
123 .then_some(info)
124 }
125
126 pub fn set_vk_image_layout(
127 target: &mut BackendRenderTarget,
128 layout: ImageLayout,
129 ) -> &mut BackendRenderTarget {
130 unsafe { sb::C_GrBackendRenderTargets_SetVkImageLayout(target.native_mut(), layout) }
131 target
132 }
133}