skia_safe/gpu/ganesh/vk/
vk_backend_surface.rs

1pub 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            // constructor not available.
87            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}