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 BackendFormat,
7 vk::{Format, YcbcrConversionInfo},
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 BackendTexture,
62 vk::{ImageInfo, ImageLayout},
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 unsafe {
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 }
83 .unwrap()
84 }
85
86 pub fn get_vk_image_info(texture: &BackendTexture) -> Option<ImageInfo> {
87 unsafe {
88 let mut image_info = ImageInfo::default();
90
91 sb::C_GrBackendTextures_GetVkImageInfo(texture.native(), image_info.native_mut())
92 .then_some(image_info)
93 }
94 }
95
96 pub fn set_vk_image_layout(
97 texture: &mut BackendTexture,
98 layout: ImageLayout,
99 ) -> &mut BackendTexture {
100 unsafe { sb::C_GrBackendTextures_SetVkImageLayout(texture.native_mut(), layout) }
101 texture
102 }
103}
104
105pub mod backend_render_targets {
106 use skia_bindings as sb;
107
108 use crate::{
109 gpu::{
110 BackendRenderTarget,
111 vk::{ImageInfo, ImageLayout},
112 },
113 prelude::*,
114 };
115
116 pub fn make_vk((width, height): (i32, i32), info: &ImageInfo) -> BackendRenderTarget {
117 BackendRenderTarget::construct(|target| unsafe {
118 sb::C_GrBackendRenderTargets_ConstructVk(target, width, height, info.native())
119 })
120 }
121
122 pub fn get_vk_image_info(target: &BackendRenderTarget) -> Option<ImageInfo> {
123 let mut info = ImageInfo::default();
124 unsafe { sb::C_GrBackendRenderTargets_GetVkImageInfo(target.native(), info.native_mut()) }
125 .then_some(info)
126 }
127
128 pub fn set_vk_image_layout(
129 target: &mut BackendRenderTarget,
130 layout: ImageLayout,
131 ) -> &mut BackendRenderTarget {
132 unsafe { sb::C_GrBackendRenderTargets_SetVkImageLayout(target.native_mut(), layout) }
133 target
134 }
135}