1use super::*;
2
3pub(crate) fn set_u8_c1(
4 stream_context: &StreamContext,
5 value: u8,
6 destination: &mut ImageViewMut<'_, u8, C1>,
7) -> Result<()> {
8 unsafe {
9 try_ffi!(sys::nppiSet_8u_C1R_Ctx(
10 value,
11 destination.as_mut_ptr().cast(),
12 destination.step(),
13 destination.size().into(),
14 stream_context.as_raw(),
15 ))?;
16 }
17 Ok(())
18}
19
20pub(crate) fn set_u8_c2(
21 stream_context: &StreamContext,
22 value: [u8; 2],
23 destination: &mut ImageViewMut<'_, u8, C2>,
24) -> Result<()> {
25 unsafe {
26 try_ffi!(sys::nppiSet_8u_C2R_Ctx(
27 value.as_ptr().cast(),
28 destination.as_mut_ptr().cast(),
29 destination.step(),
30 destination.size().into(),
31 stream_context.as_raw(),
32 ))?;
33 }
34 Ok(())
35}
36
37pub(crate) fn set_u8_c3(
38 stream_context: &StreamContext,
39 value: [u8; 3],
40 destination: &mut ImageViewMut<'_, u8, C3>,
41) -> Result<()> {
42 unsafe {
43 try_ffi!(sys::nppiSet_8u_C3R_Ctx(
44 value.as_ptr().cast(),
45 destination.as_mut_ptr().cast(),
46 destination.step(),
47 destination.size().into(),
48 stream_context.as_raw(),
49 ))?;
50 }
51 Ok(())
52}
53
54pub(crate) fn set_u8_c4(
55 stream_context: &StreamContext,
56 value: [u8; 4],
57 destination: &mut ImageViewMut<'_, u8, C4>,
58) -> Result<()> {
59 unsafe {
60 try_ffi!(sys::nppiSet_8u_C4R_Ctx(
61 value.as_ptr().cast(),
62 destination.as_mut_ptr().cast(),
63 destination.step(),
64 destination.size().into(),
65 stream_context.as_raw(),
66 ))?;
67 }
68 Ok(())
69}
70
71pub(crate) fn set_u8_ac4(
72 stream_context: &StreamContext,
73 value: [u8; 3],
74 destination: &mut ImageViewMut<'_, u8, AC4>,
75) -> Result<()> {
76 unsafe {
77 try_ffi!(sys::nppiSet_8u_AC4R_Ctx(
78 value.as_ptr().cast(),
79 destination.as_mut_ptr().cast(),
80 destination.step(),
81 destination.size().into(),
82 stream_context.as_raw(),
83 ))?;
84 }
85 Ok(())
86}
87
88pub(crate) fn set_masked_u8_c1(
89 stream_context: &StreamContext,
90 value: u8,
91 destination: &mut ImageViewMut<'_, u8, C1>,
92 mask: &MaskView<'_>,
93) -> Result<()> {
94 validate_mask_size(destination.size(), mask.size())?;
95
96 unsafe {
97 try_ffi!(sys::nppiSet_8u_C1MR_Ctx(
98 value,
99 destination.as_mut_ptr().cast(),
100 destination.step(),
101 destination.size().into(),
102 mask.as_ptr().cast(),
103 mask.step(),
104 stream_context.as_raw(),
105 ))?;
106 }
107 Ok(())
108}
109
110pub(crate) fn set_masked_u8_c3(
111 stream_context: &StreamContext,
112 value: [u8; 3],
113 destination: &mut ImageViewMut<'_, u8, C3>,
114 mask: &MaskView<'_>,
115) -> Result<()> {
116 validate_mask_size(destination.size(), mask.size())?;
117
118 unsafe {
119 try_ffi!(sys::nppiSet_8u_C3MR_Ctx(
120 value.as_ptr().cast(),
121 destination.as_mut_ptr().cast(),
122 destination.step(),
123 destination.size().into(),
124 mask.as_ptr().cast(),
125 mask.step(),
126 stream_context.as_raw(),
127 ))?;
128 }
129 Ok(())
130}
131
132pub(crate) fn set_masked_u8_c4(
133 stream_context: &StreamContext,
134 value: [u8; 4],
135 destination: &mut ImageViewMut<'_, u8, C4>,
136 mask: &MaskView<'_>,
137) -> Result<()> {
138 validate_mask_size(destination.size(), mask.size())?;
139
140 unsafe {
141 try_ffi!(sys::nppiSet_8u_C4MR_Ctx(
142 value.as_ptr().cast(),
143 destination.as_mut_ptr().cast(),
144 destination.step(),
145 destination.size().into(),
146 mask.as_ptr().cast(),
147 mask.step(),
148 stream_context.as_raw(),
149 ))?;
150 }
151 Ok(())
152}
153
154pub(crate) fn set_masked_u8_ac4(
155 stream_context: &StreamContext,
156 value: [u8; 3],
157 destination: &mut ImageViewMut<'_, u8, AC4>,
158 mask: &MaskView<'_>,
159) -> Result<()> {
160 validate_mask_size(destination.size(), mask.size())?;
161
162 unsafe {
163 try_ffi!(sys::nppiSet_8u_AC4MR_Ctx(
164 value.as_ptr().cast(),
165 destination.as_mut_ptr().cast(),
166 destination.step(),
167 destination.size().into(),
168 mask.as_ptr().cast(),
169 mask.step(),
170 stream_context.as_raw(),
171 ))?;
172 }
173 Ok(())
174}
175
176impl_set!(set_i8_c1, i8, i8, C1, nppiSet_8s_C1R_Ctx, |value: &i8| {
177 *value
178});
179impl_set!(
180 set_i8_c2,
181 i8,
182 [i8; 2],
183 C2,
184 nppiSet_8s_C2R_Ctx,
185 |value: &[i8; 2]| value.as_ptr()
186);
187impl_set!(
188 set_i8_c3,
189 i8,
190 [i8; 3],
191 C3,
192 nppiSet_8s_C3R_Ctx,
193 |value: &[i8; 3]| value.as_ptr()
194);
195impl_set!(
196 set_i8_c4,
197 i8,
198 [i8; 4],
199 C4,
200 nppiSet_8s_C4R_Ctx,
201 |value: &[i8; 4]| value.as_ptr()
202);
203impl_set!(
204 set_i8_ac4,
205 i8,
206 [i8; 3],
207 AC4,
208 nppiSet_8s_AC4R_Ctx,
209 |value: &[i8; 3]| value.as_ptr()
210);
211impl_set!(
212 set_u16_c1,
213 u16,
214 u16,
215 C1,
216 nppiSet_16u_C1R_Ctx,
217 |value: &u16| *value
218);
219impl_set!(
220 set_u16_c2,
221 u16,
222 [u16; 2],
223 C2,
224 nppiSet_16u_C2R_Ctx,
225 |value: &[u16; 2]| value.as_ptr()
226);
227impl_set!(
228 set_u16_c3,
229 u16,
230 [u16; 3],
231 C3,
232 nppiSet_16u_C3R_Ctx,
233 |value: &[u16; 3]| value.as_ptr()
234);
235impl_set!(
236 set_u16_c4,
237 u16,
238 [u16; 4],
239 C4,
240 nppiSet_16u_C4R_Ctx,
241 |value: &[u16; 4]| value.as_ptr()
242);
243impl_set!(
244 set_u16_ac4,
245 u16,
246 [u16; 3],
247 AC4,
248 nppiSet_16u_AC4R_Ctx,
249 |value: &[u16; 3]| value.as_ptr()
250);
251impl_set!(
252 set_f16_c1,
253 f16,
254 f32,
255 C1,
256 nppiSet_16f_C1R_Ctx,
257 |value: &f32| *value
258);
259impl_set!(
260 set_f16_c2,
261 f16,
262 [f32; 2],
263 C2,
264 nppiSet_16f_C2R_Ctx,
265 |value: &[f32; 2]| value.as_ptr()
266);
267impl_set!(
268 set_f16_c3,
269 f16,
270 [f32; 3],
271 C3,
272 nppiSet_16f_C3R_Ctx,
273 |value: &[f32; 3]| value.as_ptr()
274);
275impl_set!(
276 set_f16_c4,
277 f16,
278 [f32; 4],
279 C4,
280 nppiSet_16f_C4R_Ctx,
281 |value: &[f32; 4]| value.as_ptr()
282);
283impl_set!(
284 set_i16_c1,
285 i16,
286 i16,
287 C1,
288 nppiSet_16s_C1R_Ctx,
289 |value: &i16| *value
290);
291impl_set!(
292 set_i16_c2,
293 i16,
294 [i16; 2],
295 C2,
296 nppiSet_16s_C2R_Ctx,
297 |value: &[i16; 2]| value.as_ptr()
298);
299impl_set!(
300 set_i16_c3,
301 i16,
302 [i16; 3],
303 C3,
304 nppiSet_16s_C3R_Ctx,
305 |value: &[i16; 3]| value.as_ptr()
306);
307impl_set!(
308 set_i16_c4,
309 i16,
310 [i16; 4],
311 C4,
312 nppiSet_16s_C4R_Ctx,
313 |value: &[i16; 4]| value.as_ptr()
314);
315impl_set!(
316 set_i16_ac4,
317 i16,
318 [i16; 3],
319 AC4,
320 nppiSet_16s_AC4R_Ctx,
321 |value: &[i16; 3]| value.as_ptr()
322);
323impl_set!(
324 set_i32_c1,
325 i32,
326 i32,
327 C1,
328 nppiSet_32s_C1R_Ctx,
329 |value: &i32| *value
330);
331impl_set!(
332 set_i32_c2,
333 i32,
334 [i32; 2],
335 C2,
336 nppiSet_32s_C2R_Ctx,
337 |value: &[i32; 2]| value.as_ptr()
338);
339impl_set!(
340 set_i32_c3,
341 i32,
342 [i32; 3],
343 C3,
344 nppiSet_32s_C3R_Ctx,
345 |value: &[i32; 3]| value.as_ptr()
346);
347impl_set!(
348 set_i32_c4,
349 i32,
350 [i32; 4],
351 C4,
352 nppiSet_32s_C4R_Ctx,
353 |value: &[i32; 4]| value.as_ptr()
354);
355impl_set!(
356 set_i32_ac4,
357 i32,
358 [i32; 3],
359 AC4,
360 nppiSet_32s_AC4R_Ctx,
361 |value: &[i32; 3]| value.as_ptr()
362);
363impl_set!(
364 set_u32_c1,
365 u32,
366 u32,
367 C1,
368 nppiSet_32u_C1R_Ctx,
369 |value: &u32| *value
370);
371impl_set!(
372 set_u32_c2,
373 u32,
374 [u32; 2],
375 C2,
376 nppiSet_32u_C2R_Ctx,
377 |value: &[u32; 2]| value.as_ptr()
378);
379impl_set!(
380 set_u32_c3,
381 u32,
382 [u32; 3],
383 C3,
384 nppiSet_32u_C3R_Ctx,
385 |value: &[u32; 3]| value.as_ptr()
386);
387impl_set!(
388 set_u32_c4,
389 u32,
390 [u32; 4],
391 C4,
392 nppiSet_32u_C4R_Ctx,
393 |value: &[u32; 4]| value.as_ptr()
394);
395impl_set!(
396 set_u32_ac4,
397 u32,
398 [u32; 3],
399 AC4,
400 nppiSet_32u_AC4R_Ctx,
401 |value: &[u32; 3]| value.as_ptr()
402);
403impl_set!(
404 set_i16_complex_c1,
405 ComplexI16,
406 ComplexI16,
407 C1,
408 nppiSet_16sc_C1R_Ctx,
409 |value: &ComplexI16| (*value).into_npp()
410);
411impl_set!(
412 set_i16_complex_c2,
413 ComplexI16,
414 [ComplexI16; 2],
415 C2,
416 nppiSet_16sc_C2R_Ctx,
417 |value: &[ComplexI16; 2]| value.as_ptr().cast()
418);
419impl_set!(
420 set_i16_complex_c3,
421 ComplexI16,
422 [ComplexI16; 3],
423 C3,
424 nppiSet_16sc_C3R_Ctx,
425 |value: &[ComplexI16; 3]| value.as_ptr().cast()
426);
427impl_set!(
428 set_i16_complex_c4,
429 ComplexI16,
430 [ComplexI16; 4],
431 C4,
432 nppiSet_16sc_C4R_Ctx,
433 |value: &[ComplexI16; 4]| value.as_ptr().cast()
434);
435impl_set!(
436 set_i16_complex_ac4,
437 ComplexI16,
438 [ComplexI16; 3],
439 AC4,
440 nppiSet_16sc_AC4R_Ctx,
441 |value: &[ComplexI16; 3]| value.as_ptr().cast()
442);
443impl_set!(
444 set_f32_complex_c1,
445 Complex32,
446 Complex32,
447 C1,
448 nppiSet_32fc_C1R_Ctx,
449 |value: &Complex32| (*value).into_npp()
450);
451impl_set!(
452 set_f32_complex_c2,
453 Complex32,
454 [Complex32; 2],
455 C2,
456 nppiSet_32fc_C2R_Ctx,
457 |value: &[Complex32; 2]| value.as_ptr().cast()
458);
459impl_set!(
460 set_f32_complex_c3,
461 Complex32,
462 [Complex32; 3],
463 C3,
464 nppiSet_32fc_C3R_Ctx,
465 |value: &[Complex32; 3]| value.as_ptr().cast()
466);
467impl_set!(
468 set_f32_complex_c4,
469 Complex32,
470 [Complex32; 4],
471 C4,
472 nppiSet_32fc_C4R_Ctx,
473 |value: &[Complex32; 4]| value.as_ptr().cast()
474);
475impl_set!(
476 set_f32_complex_ac4,
477 Complex32,
478 [Complex32; 3],
479 AC4,
480 nppiSet_32fc_AC4R_Ctx,
481 |value: &[Complex32; 3]| value.as_ptr().cast()
482);
483impl_set!(
484 set_i32_complex_c1,
485 ComplexI32,
486 ComplexI32,
487 C1,
488 nppiSet_32sc_C1R_Ctx,
489 |value: &ComplexI32| (*value).into_npp()
490);
491impl_set!(
492 set_i32_complex_c2,
493 ComplexI32,
494 [ComplexI32; 2],
495 C2,
496 nppiSet_32sc_C2R_Ctx,
497 |value: &[ComplexI32; 2]| value.as_ptr().cast()
498);
499impl_set!(
500 set_i32_complex_c3,
501 ComplexI32,
502 [ComplexI32; 3],
503 C3,
504 nppiSet_32sc_C3R_Ctx,
505 |value: &[ComplexI32; 3]| value.as_ptr().cast()
506);
507impl_set!(
508 set_i32_complex_c4,
509 ComplexI32,
510 [ComplexI32; 4],
511 C4,
512 nppiSet_32sc_C4R_Ctx,
513 |value: &[ComplexI32; 4]| value.as_ptr().cast()
514);
515impl_set!(
516 set_i32_complex_ac4,
517 ComplexI32,
518 [ComplexI32; 3],
519 AC4,
520 nppiSet_32sc_AC4R_Ctx,
521 |value: &[ComplexI32; 3]| value.as_ptr().cast()
522);
523impl_set!(
524 set_f32_c1,
525 f32,
526 f32,
527 C1,
528 nppiSet_32f_C1R_Ctx,
529 |value: &f32| *value
530);
531impl_set!(
532 set_f32_c2,
533 f32,
534 [f32; 2],
535 C2,
536 nppiSet_32f_C2R_Ctx,
537 |value: &[f32; 2]| value.as_ptr()
538);
539impl_set!(
540 set_f32_c3,
541 f32,
542 [f32; 3],
543 C3,
544 nppiSet_32f_C3R_Ctx,
545 |value: &[f32; 3]| value.as_ptr()
546);
547impl_set!(
548 set_f32_c4,
549 f32,
550 [f32; 4],
551 C4,
552 nppiSet_32f_C4R_Ctx,
553 |value: &[f32; 4]| value.as_ptr()
554);
555impl_set!(
556 set_f32_ac4,
557 f32,
558 [f32; 3],
559 AC4,
560 nppiSet_32f_AC4R_Ctx,
561 |value: &[f32; 3]| value.as_ptr()
562);
563
564impl_set_masked!(
565 set_masked_u16_c1,
566 u16,
567 u16,
568 C1,
569 nppiSet_16u_C1MR_Ctx,
570 |value: &u16| *value
571);
572impl_set_masked!(
573 set_masked_u16_c3,
574 u16,
575 [u16; 3],
576 C3,
577 nppiSet_16u_C3MR_Ctx,
578 |value: &[u16; 3]| value.as_ptr()
579);
580impl_set_masked!(
581 set_masked_u16_c4,
582 u16,
583 [u16; 4],
584 C4,
585 nppiSet_16u_C4MR_Ctx,
586 |value: &[u16; 4]| value.as_ptr()
587);
588impl_set_masked!(
589 set_masked_u16_ac4,
590 u16,
591 [u16; 3],
592 AC4,
593 nppiSet_16u_AC4MR_Ctx,
594 |value: &[u16; 3]| value.as_ptr()
595);
596impl_set_masked!(
597 set_masked_i16_c1,
598 i16,
599 i16,
600 C1,
601 nppiSet_16s_C1MR_Ctx,
602 |value: &i16| *value
603);
604impl_set_masked!(
605 set_masked_i16_c3,
606 i16,
607 [i16; 3],
608 C3,
609 nppiSet_16s_C3MR_Ctx,
610 |value: &[i16; 3]| value.as_ptr()
611);
612impl_set_masked!(
613 set_masked_i16_c4,
614 i16,
615 [i16; 4],
616 C4,
617 nppiSet_16s_C4MR_Ctx,
618 |value: &[i16; 4]| value.as_ptr()
619);
620impl_set_masked!(
621 set_masked_i16_ac4,
622 i16,
623 [i16; 3],
624 AC4,
625 nppiSet_16s_AC4MR_Ctx,
626 |value: &[i16; 3]| value.as_ptr()
627);
628impl_set_masked!(
629 set_masked_i32_c1,
630 i32,
631 i32,
632 C1,
633 nppiSet_32s_C1MR_Ctx,
634 |value: &i32| *value
635);
636impl_set_masked!(
637 set_masked_i32_c3,
638 i32,
639 [i32; 3],
640 C3,
641 nppiSet_32s_C3MR_Ctx,
642 |value: &[i32; 3]| value.as_ptr()
643);
644impl_set_masked!(
645 set_masked_i32_c4,
646 i32,
647 [i32; 4],
648 C4,
649 nppiSet_32s_C4MR_Ctx,
650 |value: &[i32; 4]| value.as_ptr()
651);
652impl_set_masked!(
653 set_masked_i32_ac4,
654 i32,
655 [i32; 3],
656 AC4,
657 nppiSet_32s_AC4MR_Ctx,
658 |value: &[i32; 3]| value.as_ptr()
659);
660impl_set_masked!(
661 set_masked_f32_c1,
662 f32,
663 f32,
664 C1,
665 nppiSet_32f_C1MR_Ctx,
666 |value: &f32| *value
667);
668impl_set_masked!(
669 set_masked_f32_c3,
670 f32,
671 [f32; 3],
672 C3,
673 nppiSet_32f_C3MR_Ctx,
674 |value: &[f32; 3]| value.as_ptr()
675);
676impl_set_masked!(
677 set_masked_f32_c4,
678 f32,
679 [f32; 4],
680 C4,
681 nppiSet_32f_C4MR_Ctx,
682 |value: &[f32; 4]| value.as_ptr()
683);
684impl_set_masked!(
685 set_masked_f32_ac4,
686 f32,
687 [f32; 3],
688 AC4,
689 nppiSet_32f_AC4MR_Ctx,
690 |value: &[f32; 3]| value.as_ptr()
691);
692impl_generic_set_operation!(
693 SetC1,
694 set_c1,
695 C1,
696 [
697 u8 => (u8, set_u8_c1),
698 i8 => (i8, set_i8_c1),
699 u16 => (u16, set_u16_c1),
700 f16 => (f32, set_f16_c1),
701 i16 => (i16, set_i16_c1),
702 i32 => (i32, set_i32_c1),
703 u32 => (u32, set_u32_c1),
704 ComplexI16 => (ComplexI16, set_i16_complex_c1),
705 Complex32 => (Complex32, set_f32_complex_c1),
706 ComplexI32 => (ComplexI32, set_i32_complex_c1),
707 f32 => (f32, set_f32_c1),
708 ]
709);
710impl_generic_set_operation!(
711 SetC2,
712 set_c2,
713 C2,
714 [
715 u8 => ([u8; 2], set_u8_c2),
716 i8 => ([i8; 2], set_i8_c2),
717 u16 => ([u16; 2], set_u16_c2),
718 f16 => ([f32; 2], set_f16_c2),
719 i16 => ([i16; 2], set_i16_c2),
720 i32 => ([i32; 2], set_i32_c2),
721 u32 => ([u32; 2], set_u32_c2),
722 ComplexI16 => ([ComplexI16; 2], set_i16_complex_c2),
723 Complex32 => ([Complex32; 2], set_f32_complex_c2),
724 ComplexI32 => ([ComplexI32; 2], set_i32_complex_c2),
725 f32 => ([f32; 2], set_f32_c2),
726 ]
727);
728impl_generic_set_operation!(
729 SetC3,
730 set_c3,
731 C3,
732 [
733 u8 => ([u8; 3], set_u8_c3),
734 i8 => ([i8; 3], set_i8_c3),
735 u16 => ([u16; 3], set_u16_c3),
736 f16 => ([f32; 3], set_f16_c3),
737 i16 => ([i16; 3], set_i16_c3),
738 i32 => ([i32; 3], set_i32_c3),
739 u32 => ([u32; 3], set_u32_c3),
740 ComplexI16 => ([ComplexI16; 3], set_i16_complex_c3),
741 Complex32 => ([Complex32; 3], set_f32_complex_c3),
742 ComplexI32 => ([ComplexI32; 3], set_i32_complex_c3),
743 f32 => ([f32; 3], set_f32_c3),
744 ]
745);
746impl_generic_set_operation!(
747 SetC4,
748 set_c4,
749 C4,
750 [
751 u8 => ([u8; 4], set_u8_c4),
752 i8 => ([i8; 4], set_i8_c4),
753 u16 => ([u16; 4], set_u16_c4),
754 f16 => ([f32; 4], set_f16_c4),
755 i16 => ([i16; 4], set_i16_c4),
756 i32 => ([i32; 4], set_i32_c4),
757 u32 => ([u32; 4], set_u32_c4),
758 ComplexI16 => ([ComplexI16; 4], set_i16_complex_c4),
759 Complex32 => ([Complex32; 4], set_f32_complex_c4),
760 ComplexI32 => ([ComplexI32; 4], set_i32_complex_c4),
761 f32 => ([f32; 4], set_f32_c4),
762 ]
763);
764impl_generic_set_operation!(
765 SetAC4,
766 set_ac4,
767 AC4,
768 [
769 u8 => ([u8; 3], set_u8_ac4),
770 i8 => ([i8; 3], set_i8_ac4),
771 u16 => ([u16; 3], set_u16_ac4),
772 i16 => ([i16; 3], set_i16_ac4),
773 i32 => ([i32; 3], set_i32_ac4),
774 u32 => ([u32; 3], set_u32_ac4),
775 ComplexI16 => ([ComplexI16; 3], set_i16_complex_ac4),
776 Complex32 => ([Complex32; 3], set_f32_complex_ac4),
777 ComplexI32 => ([ComplexI32; 3], set_i32_complex_ac4),
778 f32 => ([f32; 3], set_f32_ac4),
779 ]
780);
781impl_generic_set_masked_operation!(
782 SetMaskedC1,
783 set_masked_c1,
784 C1,
785 [
786 u8 => (u8, set_masked_u8_c1),
787 u16 => (u16, set_masked_u16_c1),
788 i16 => (i16, set_masked_i16_c1),
789 i32 => (i32, set_masked_i32_c1),
790 f32 => (f32, set_masked_f32_c1),
791 ]
792);
793impl_generic_set_masked_operation!(
794 SetMaskedC3,
795 set_masked_c3,
796 C3,
797 [
798 u8 => ([u8; 3], set_masked_u8_c3),
799 u16 => ([u16; 3], set_masked_u16_c3),
800 i16 => ([i16; 3], set_masked_i16_c3),
801 i32 => ([i32; 3], set_masked_i32_c3),
802 f32 => ([f32; 3], set_masked_f32_c3),
803 ]
804);
805impl_generic_set_masked_operation!(
806 SetMaskedC4,
807 set_masked_c4,
808 C4,
809 [
810 u8 => ([u8; 4], set_masked_u8_c4),
811 u16 => ([u16; 4], set_masked_u16_c4),
812 i16 => ([i16; 4], set_masked_i16_c4),
813 i32 => ([i32; 4], set_masked_i32_c4),
814 f32 => ([f32; 4], set_masked_f32_c4),
815 ]
816);
817impl_generic_set_masked_operation!(
818 SetMaskedAC4,
819 set_masked_ac4,
820 AC4,
821 [
822 u8 => ([u8; 3], set_masked_u8_ac4),
823 u16 => ([u16; 3], set_masked_u16_ac4),
824 i16 => ([i16; 3], set_masked_i16_ac4),
825 i32 => ([i32; 3], set_masked_i32_ac4),
826 f32 => ([f32; 3], set_masked_f32_ac4),
827 ]
828);