1#![allow(unused)]
20
21use crate::lexer::PtxToken;
22use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
23use crate::r#type::common::*;
24
25pub mod section_0 {
26 use super::*;
27 use crate::r#type::instruction::tex::section_0::*;
28
29 impl PtxParser for Ctype {
34 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
35 {
37 let saved_pos = stream.position();
38 if stream.expect_string(".s32").is_ok() {
39 return Ok(Ctype::S32);
40 }
41 stream.set_position(saved_pos);
42 }
43 let saved_pos = stream.position();
44 {
46 let saved_pos = stream.position();
47 if stream.expect_string(".f32").is_ok() {
48 return Ok(Ctype::F32);
49 }
50 stream.set_position(saved_pos);
51 }
52 stream.set_position(saved_pos);
53 let span = stream
54 .peek()
55 .map(|(_, s)| s.clone())
56 .unwrap_or(Span { start: 0, end: 0 });
57 let expected = &[".s32", ".f32"];
58 let found = stream
59 .peek()
60 .map(|(t, _)| format!("{:?}", t))
61 .unwrap_or_else(|_| "<end of input>".to_string());
62 Err(crate::parser::unexpected_value(span, expected, found))
63 }
64 }
65
66 impl PtxParser for Dtype {
67 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
68 {
70 let saved_pos = stream.position();
71 if stream.expect_string(".u32").is_ok() {
72 return Ok(Dtype::U32);
73 }
74 stream.set_position(saved_pos);
75 }
76 let saved_pos = stream.position();
77 {
79 let saved_pos = stream.position();
80 if stream.expect_string(".s32").is_ok() {
81 return Ok(Dtype::S32);
82 }
83 stream.set_position(saved_pos);
84 }
85 stream.set_position(saved_pos);
86 let saved_pos = stream.position();
87 {
89 let saved_pos = stream.position();
90 if stream.expect_string(".f16").is_ok() {
91 return Ok(Dtype::F16);
92 }
93 stream.set_position(saved_pos);
94 }
95 stream.set_position(saved_pos);
96 let saved_pos = stream.position();
97 {
99 let saved_pos = stream.position();
100 if stream.expect_string(".f32").is_ok() {
101 return Ok(Dtype::F32);
102 }
103 stream.set_position(saved_pos);
104 }
105 stream.set_position(saved_pos);
106 let span = stream
107 .peek()
108 .map(|(_, s)| s.clone())
109 .unwrap_or(Span { start: 0, end: 0 });
110 let expected = &[".u32", ".s32", ".f16", ".f32"];
111 let found = stream
112 .peek()
113 .map(|(t, _)| format!("{:?}", t))
114 .unwrap_or_else(|_| "<end of input>".to_string());
115 Err(crate::parser::unexpected_value(span, expected, found))
116 }
117 }
118
119 impl PtxParser for Geom {
120 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
121 {
123 let saved_pos = stream.position();
124 if stream.expect_string(".acube").is_ok() {
125 return Ok(Geom::Acube);
126 }
127 stream.set_position(saved_pos);
128 }
129 let saved_pos = stream.position();
130 {
132 let saved_pos = stream.position();
133 if stream.expect_string(".a2dms").is_ok() {
134 return Ok(Geom::A2dms);
135 }
136 stream.set_position(saved_pos);
137 }
138 stream.set_position(saved_pos);
139 let saved_pos = stream.position();
140 {
142 let saved_pos = stream.position();
143 if stream.expect_string(".cube").is_ok() {
144 return Ok(Geom::Cube);
145 }
146 stream.set_position(saved_pos);
147 }
148 stream.set_position(saved_pos);
149 let saved_pos = stream.position();
150 {
152 let saved_pos = stream.position();
153 if stream.expect_string(".2dms").is_ok() {
154 return Ok(Geom::_2dms);
155 }
156 stream.set_position(saved_pos);
157 }
158 stream.set_position(saved_pos);
159 let saved_pos = stream.position();
160 {
162 let saved_pos = stream.position();
163 if stream.expect_string(".a1d").is_ok() {
164 return Ok(Geom::A1d);
165 }
166 stream.set_position(saved_pos);
167 }
168 stream.set_position(saved_pos);
169 let saved_pos = stream.position();
170 {
172 let saved_pos = stream.position();
173 if stream.expect_string(".a2d").is_ok() {
174 return Ok(Geom::A2d);
175 }
176 stream.set_position(saved_pos);
177 }
178 stream.set_position(saved_pos);
179 let saved_pos = stream.position();
180 {
182 let saved_pos = stream.position();
183 if stream.expect_string(".1d").is_ok() {
184 return Ok(Geom::_1d);
185 }
186 stream.set_position(saved_pos);
187 }
188 stream.set_position(saved_pos);
189 let saved_pos = stream.position();
190 {
192 let saved_pos = stream.position();
193 if stream.expect_string(".2d").is_ok() {
194 return Ok(Geom::_2d);
195 }
196 stream.set_position(saved_pos);
197 }
198 stream.set_position(saved_pos);
199 let saved_pos = stream.position();
200 {
202 let saved_pos = stream.position();
203 if stream.expect_string(".3d").is_ok() {
204 return Ok(Geom::_3d);
205 }
206 stream.set_position(saved_pos);
207 }
208 stream.set_position(saved_pos);
209 let span = stream
210 .peek()
211 .map(|(_, s)| s.clone())
212 .unwrap_or(Span { start: 0, end: 0 });
213 let expected = &[
214 ".acube", ".a2dms", ".cube", ".2dms", ".a1d", ".a2d", ".1d", ".2d", ".3d",
215 ];
216 let found = stream
217 .peek()
218 .map(|(t, _)| format!("{:?}", t))
219 .unwrap_or_else(|_| "<end of input>".to_string());
220 Err(crate::parser::unexpected_value(span, expected, found))
221 }
222 }
223
224 impl PtxParser for TexGeomV4DtypeCtype {
225 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
226 stream.expect_string("tex")?;
227 let geom = Geom::parse(stream)?;
228 stream.expect_complete()?;
229 stream.expect_string(".v4")?;
230 let v4 = ();
231 stream.expect_complete()?;
232 let dtype = Dtype::parse(stream)?;
233 stream.expect_complete()?;
234 let ctype = Ctype::parse(stream)?;
235 stream.expect_complete()?;
236 let d = GeneralOperand::parse(stream)?;
237 let saved_pos = stream.position();
238 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
239 Some(GeneralOperand::parse(stream)?)
240 } else {
241 stream.set_position(saved_pos);
242 None
243 };
244 stream.expect_complete()?;
245 stream.expect(&PtxToken::Comma)?;
246 let a = TexHandler2::parse(stream)?;
247 stream.expect_complete()?;
248 let saved_pos = stream.position();
249 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
250 if !has_comma {
251 stream.set_position(saved_pos);
252 }
253 let saved_pos = stream.position();
254 let e = match GeneralOperand::parse(stream) {
255 Ok(val) => Some(val),
256 Err(_) => {
257 stream.set_position(saved_pos);
258 None
259 }
260 };
261 stream.expect_complete()?;
262 let saved_pos = stream.position();
263 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
264 if !has_comma {
265 stream.set_position(saved_pos);
266 }
267 let saved_pos = stream.position();
268 let f = match GeneralOperand::parse(stream) {
269 Ok(val) => Some(val),
270 Err(_) => {
271 stream.set_position(saved_pos);
272 None
273 }
274 };
275 stream.expect_complete()?;
276 stream.expect_complete()?;
277 stream.expect(&PtxToken::Semicolon)?;
278 Ok(TexGeomV4DtypeCtype {
279 geom,
280 v4,
281 dtype,
282 ctype,
283 d,
284 p,
285 a,
286 e,
287 f,
288 })
289 }
290 }
291
292 impl PtxParser for TexGeomV4DtypeCtype1 {
293 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
294 stream.expect_string("tex")?;
295 let geom = Geom::parse(stream)?;
296 stream.expect_complete()?;
297 stream.expect_string(".v4")?;
298 let v4 = ();
299 stream.expect_complete()?;
300 let dtype = Dtype::parse(stream)?;
301 stream.expect_complete()?;
302 let ctype = Ctype::parse(stream)?;
303 stream.expect_complete()?;
304 let d = GeneralOperand::parse(stream)?;
305 let saved_pos = stream.position();
306 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
307 Some(GeneralOperand::parse(stream)?)
308 } else {
309 stream.set_position(saved_pos);
310 None
311 };
312 stream.expect_complete()?;
313 stream.expect(&PtxToken::Comma)?;
314 let a = TexHandler3::parse(stream)?;
315 stream.expect_complete()?;
316 let saved_pos = stream.position();
317 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
318 if !has_comma {
319 stream.set_position(saved_pos);
320 }
321 let saved_pos = stream.position();
322 let e = match GeneralOperand::parse(stream) {
323 Ok(val) => Some(val),
324 Err(_) => {
325 stream.set_position(saved_pos);
326 None
327 }
328 };
329 stream.expect_complete()?;
330 let saved_pos = stream.position();
331 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
332 if !has_comma {
333 stream.set_position(saved_pos);
334 }
335 let saved_pos = stream.position();
336 let f = match GeneralOperand::parse(stream) {
337 Ok(val) => Some(val),
338 Err(_) => {
339 stream.set_position(saved_pos);
340 None
341 }
342 };
343 stream.expect_complete()?;
344 stream.expect_complete()?;
345 stream.expect(&PtxToken::Semicolon)?;
346 Ok(TexGeomV4DtypeCtype1 {
347 geom,
348 v4,
349 dtype,
350 ctype,
351 d,
352 p,
353 a,
354 e,
355 f,
356 })
357 }
358 }
359
360 impl PtxParser for TexGeomV2F16x2Ctype {
361 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
362 stream.expect_string("tex")?;
363 let geom = Geom::parse(stream)?;
364 stream.expect_complete()?;
365 stream.expect_string(".v2")?;
366 let v2 = ();
367 stream.expect_complete()?;
368 stream.expect_string(".f16x2")?;
369 let f16x2 = ();
370 stream.expect_complete()?;
371 let ctype = Ctype::parse(stream)?;
372 stream.expect_complete()?;
373 let d = GeneralOperand::parse(stream)?;
374 let saved_pos = stream.position();
375 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
376 Some(GeneralOperand::parse(stream)?)
377 } else {
378 stream.set_position(saved_pos);
379 None
380 };
381 stream.expect_complete()?;
382 stream.expect(&PtxToken::Comma)?;
383 let a = TexHandler2::parse(stream)?;
384 stream.expect_complete()?;
385 let saved_pos = stream.position();
386 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
387 if !has_comma {
388 stream.set_position(saved_pos);
389 }
390 let saved_pos = stream.position();
391 let e = match GeneralOperand::parse(stream) {
392 Ok(val) => Some(val),
393 Err(_) => {
394 stream.set_position(saved_pos);
395 None
396 }
397 };
398 stream.expect_complete()?;
399 let saved_pos = stream.position();
400 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
401 if !has_comma {
402 stream.set_position(saved_pos);
403 }
404 let saved_pos = stream.position();
405 let f = match GeneralOperand::parse(stream) {
406 Ok(val) => Some(val),
407 Err(_) => {
408 stream.set_position(saved_pos);
409 None
410 }
411 };
412 stream.expect_complete()?;
413 stream.expect_complete()?;
414 stream.expect(&PtxToken::Semicolon)?;
415 Ok(TexGeomV2F16x2Ctype {
416 geom,
417 v2,
418 f16x2,
419 ctype,
420 d,
421 p,
422 a,
423 e,
424 f,
425 })
426 }
427 }
428
429 impl PtxParser for TexGeomV2F16x2Ctype1 {
430 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
431 stream.expect_string("tex")?;
432 let geom = Geom::parse(stream)?;
433 stream.expect_complete()?;
434 stream.expect_string(".v2")?;
435 let v2 = ();
436 stream.expect_complete()?;
437 stream.expect_string(".f16x2")?;
438 let f16x2 = ();
439 stream.expect_complete()?;
440 let ctype = Ctype::parse(stream)?;
441 stream.expect_complete()?;
442 let d = GeneralOperand::parse(stream)?;
443 let saved_pos = stream.position();
444 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
445 Some(GeneralOperand::parse(stream)?)
446 } else {
447 stream.set_position(saved_pos);
448 None
449 };
450 stream.expect_complete()?;
451 stream.expect(&PtxToken::Comma)?;
452 let a = TexHandler3::parse(stream)?;
453 stream.expect_complete()?;
454 let saved_pos = stream.position();
455 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
456 if !has_comma {
457 stream.set_position(saved_pos);
458 }
459 let saved_pos = stream.position();
460 let e = match GeneralOperand::parse(stream) {
461 Ok(val) => Some(val),
462 Err(_) => {
463 stream.set_position(saved_pos);
464 None
465 }
466 };
467 stream.expect_complete()?;
468 let saved_pos = stream.position();
469 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
470 if !has_comma {
471 stream.set_position(saved_pos);
472 }
473 let saved_pos = stream.position();
474 let f = match GeneralOperand::parse(stream) {
475 Ok(val) => Some(val),
476 Err(_) => {
477 stream.set_position(saved_pos);
478 None
479 }
480 };
481 stream.expect_complete()?;
482 stream.expect_complete()?;
483 stream.expect(&PtxToken::Semicolon)?;
484 Ok(TexGeomV2F16x2Ctype1 {
485 geom,
486 v2,
487 f16x2,
488 ctype,
489 d,
490 p,
491 a,
492 e,
493 f,
494 })
495 }
496 }
497
498 impl PtxParser for TexBaseGeomV4DtypeCtype {
499 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
500 stream.expect_string("tex")?;
501 stream.expect_string(".base")?;
502 let base = ();
503 stream.expect_complete()?;
504 let geom = Geom::parse(stream)?;
505 stream.expect_complete()?;
506 stream.expect_string(".v4")?;
507 let v4 = ();
508 stream.expect_complete()?;
509 let dtype = Dtype::parse(stream)?;
510 stream.expect_complete()?;
511 let ctype = Ctype::parse(stream)?;
512 stream.expect_complete()?;
513 let d = GeneralOperand::parse(stream)?;
514 let saved_pos = stream.position();
515 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
516 Some(GeneralOperand::parse(stream)?)
517 } else {
518 stream.set_position(saved_pos);
519 None
520 };
521 stream.expect_complete()?;
522 stream.expect(&PtxToken::Comma)?;
523 let a = TexHandler3Optional::parse(stream)?;
524 stream.expect_complete()?;
525 let saved_pos = stream.position();
526 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
527 if !has_comma {
528 stream.set_position(saved_pos);
529 }
530 let saved_pos = stream.position();
531 let e = match GeneralOperand::parse(stream) {
532 Ok(val) => Some(val),
533 Err(_) => {
534 stream.set_position(saved_pos);
535 None
536 }
537 };
538 stream.expect_complete()?;
539 let saved_pos = stream.position();
540 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
541 if !has_comma {
542 stream.set_position(saved_pos);
543 }
544 let saved_pos = stream.position();
545 let f = match GeneralOperand::parse(stream) {
546 Ok(val) => Some(val),
547 Err(_) => {
548 stream.set_position(saved_pos);
549 None
550 }
551 };
552 stream.expect_complete()?;
553 stream.expect_complete()?;
554 stream.expect(&PtxToken::Semicolon)?;
555 Ok(TexBaseGeomV4DtypeCtype {
556 base,
557 geom,
558 v4,
559 dtype,
560 ctype,
561 d,
562 p,
563 a,
564 e,
565 f,
566 })
567 }
568 }
569
570 impl PtxParser for TexLevelGeomV4DtypeCtype {
571 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
572 stream.expect_string("tex")?;
573 stream.expect_string(".level")?;
574 let level = ();
575 stream.expect_complete()?;
576 let geom = Geom::parse(stream)?;
577 stream.expect_complete()?;
578 stream.expect_string(".v4")?;
579 let v4 = ();
580 stream.expect_complete()?;
581 let dtype = Dtype::parse(stream)?;
582 stream.expect_complete()?;
583 let ctype = Ctype::parse(stream)?;
584 stream.expect_complete()?;
585 let d = GeneralOperand::parse(stream)?;
586 let saved_pos = stream.position();
587 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
588 Some(GeneralOperand::parse(stream)?)
589 } else {
590 stream.set_position(saved_pos);
591 None
592 };
593 stream.expect_complete()?;
594 stream.expect(&PtxToken::Comma)?;
595 let a = TexHandler3Optional::parse(stream)?;
596 stream.expect_complete()?;
597 stream.expect(&PtxToken::Comma)?;
598 let lod = GeneralOperand::parse(stream)?;
599 stream.expect_complete()?;
600 let saved_pos = stream.position();
601 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
602 if !has_comma {
603 stream.set_position(saved_pos);
604 }
605 let saved_pos = stream.position();
606 let e = match GeneralOperand::parse(stream) {
607 Ok(val) => Some(val),
608 Err(_) => {
609 stream.set_position(saved_pos);
610 None
611 }
612 };
613 stream.expect_complete()?;
614 let saved_pos = stream.position();
615 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
616 if !has_comma {
617 stream.set_position(saved_pos);
618 }
619 let saved_pos = stream.position();
620 let f = match GeneralOperand::parse(stream) {
621 Ok(val) => Some(val),
622 Err(_) => {
623 stream.set_position(saved_pos);
624 None
625 }
626 };
627 stream.expect_complete()?;
628 stream.expect_complete()?;
629 stream.expect(&PtxToken::Semicolon)?;
630 Ok(TexLevelGeomV4DtypeCtype {
631 level,
632 geom,
633 v4,
634 dtype,
635 ctype,
636 d,
637 p,
638 a,
639 lod,
640 e,
641 f,
642 })
643 }
644 }
645
646 impl PtxParser for TexGradGeomV4DtypeCtype {
647 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
648 stream.expect_string("tex")?;
649 stream.expect_string(".grad")?;
650 let grad = ();
651 stream.expect_complete()?;
652 let geom = Geom::parse(stream)?;
653 stream.expect_complete()?;
654 stream.expect_string(".v4")?;
655 let v4 = ();
656 stream.expect_complete()?;
657 let dtype = Dtype::parse(stream)?;
658 stream.expect_complete()?;
659 let ctype = Ctype::parse(stream)?;
660 stream.expect_complete()?;
661 let d = GeneralOperand::parse(stream)?;
662 let saved_pos = stream.position();
663 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
664 Some(GeneralOperand::parse(stream)?)
665 } else {
666 stream.set_position(saved_pos);
667 None
668 };
669 stream.expect_complete()?;
670 stream.expect(&PtxToken::Comma)?;
671 let a = TexHandler3Optional::parse(stream)?;
672 stream.expect_complete()?;
673 stream.expect(&PtxToken::Comma)?;
674 let dpdx = GeneralOperand::parse(stream)?;
675 stream.expect_complete()?;
676 stream.expect(&PtxToken::Comma)?;
677 let dpdy = GeneralOperand::parse(stream)?;
678 stream.expect_complete()?;
679 let saved_pos = stream.position();
680 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
681 if !has_comma {
682 stream.set_position(saved_pos);
683 }
684 let saved_pos = stream.position();
685 let e = match GeneralOperand::parse(stream) {
686 Ok(val) => Some(val),
687 Err(_) => {
688 stream.set_position(saved_pos);
689 None
690 }
691 };
692 stream.expect_complete()?;
693 let saved_pos = stream.position();
694 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
695 if !has_comma {
696 stream.set_position(saved_pos);
697 }
698 let saved_pos = stream.position();
699 let f = match GeneralOperand::parse(stream) {
700 Ok(val) => Some(val),
701 Err(_) => {
702 stream.set_position(saved_pos);
703 None
704 }
705 };
706 stream.expect_complete()?;
707 stream.expect_complete()?;
708 stream.expect(&PtxToken::Semicolon)?;
709 Ok(TexGradGeomV4DtypeCtype {
710 grad,
711 geom,
712 v4,
713 dtype,
714 ctype,
715 d,
716 p,
717 a,
718 dpdx,
719 dpdy,
720 e,
721 f,
722 })
723 }
724 }
725
726 impl PtxParser for TexBaseGeomV2F16x2Ctype {
727 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
728 stream.expect_string("tex")?;
729 stream.expect_string(".base")?;
730 let base = ();
731 stream.expect_complete()?;
732 let geom = Geom::parse(stream)?;
733 stream.expect_complete()?;
734 stream.expect_string(".v2")?;
735 let v2 = ();
736 stream.expect_complete()?;
737 stream.expect_string(".f16x2")?;
738 let f16x2 = ();
739 stream.expect_complete()?;
740 let ctype = Ctype::parse(stream)?;
741 stream.expect_complete()?;
742 let d = GeneralOperand::parse(stream)?;
743 let saved_pos = stream.position();
744 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
745 Some(GeneralOperand::parse(stream)?)
746 } else {
747 stream.set_position(saved_pos);
748 None
749 };
750 stream.expect_complete()?;
751 stream.expect(&PtxToken::Comma)?;
752 let a = TexHandler3Optional::parse(stream)?;
753 stream.expect_complete()?;
754 let saved_pos = stream.position();
755 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
756 if !has_comma {
757 stream.set_position(saved_pos);
758 }
759 let saved_pos = stream.position();
760 let e = match GeneralOperand::parse(stream) {
761 Ok(val) => Some(val),
762 Err(_) => {
763 stream.set_position(saved_pos);
764 None
765 }
766 };
767 stream.expect_complete()?;
768 let saved_pos = stream.position();
769 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
770 if !has_comma {
771 stream.set_position(saved_pos);
772 }
773 let saved_pos = stream.position();
774 let f = match GeneralOperand::parse(stream) {
775 Ok(val) => Some(val),
776 Err(_) => {
777 stream.set_position(saved_pos);
778 None
779 }
780 };
781 stream.expect_complete()?;
782 stream.expect_complete()?;
783 stream.expect(&PtxToken::Semicolon)?;
784 Ok(TexBaseGeomV2F16x2Ctype {
785 base,
786 geom,
787 v2,
788 f16x2,
789 ctype,
790 d,
791 p,
792 a,
793 e,
794 f,
795 })
796 }
797 }
798
799 impl PtxParser for TexLevelGeomV2F16x2Ctype {
800 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
801 stream.expect_string("tex")?;
802 stream.expect_string(".level")?;
803 let level = ();
804 stream.expect_complete()?;
805 let geom = Geom::parse(stream)?;
806 stream.expect_complete()?;
807 stream.expect_string(".v2")?;
808 let v2 = ();
809 stream.expect_complete()?;
810 stream.expect_string(".f16x2")?;
811 let f16x2 = ();
812 stream.expect_complete()?;
813 let ctype = Ctype::parse(stream)?;
814 stream.expect_complete()?;
815 let d = GeneralOperand::parse(stream)?;
816 let saved_pos = stream.position();
817 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
818 Some(GeneralOperand::parse(stream)?)
819 } else {
820 stream.set_position(saved_pos);
821 None
822 };
823 stream.expect_complete()?;
824 stream.expect(&PtxToken::Comma)?;
825 let a = TexHandler3Optional::parse(stream)?;
826 stream.expect_complete()?;
827 stream.expect(&PtxToken::Comma)?;
828 let lod = GeneralOperand::parse(stream)?;
829 stream.expect_complete()?;
830 let saved_pos = stream.position();
831 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
832 if !has_comma {
833 stream.set_position(saved_pos);
834 }
835 let saved_pos = stream.position();
836 let e = match GeneralOperand::parse(stream) {
837 Ok(val) => Some(val),
838 Err(_) => {
839 stream.set_position(saved_pos);
840 None
841 }
842 };
843 stream.expect_complete()?;
844 let saved_pos = stream.position();
845 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
846 if !has_comma {
847 stream.set_position(saved_pos);
848 }
849 let saved_pos = stream.position();
850 let f = match GeneralOperand::parse(stream) {
851 Ok(val) => Some(val),
852 Err(_) => {
853 stream.set_position(saved_pos);
854 None
855 }
856 };
857 stream.expect_complete()?;
858 stream.expect_complete()?;
859 stream.expect(&PtxToken::Semicolon)?;
860 Ok(TexLevelGeomV2F16x2Ctype {
861 level,
862 geom,
863 v2,
864 f16x2,
865 ctype,
866 d,
867 p,
868 a,
869 lod,
870 e,
871 f,
872 })
873 }
874 }
875
876 impl PtxParser for TexGradGeomV2F16x2Ctype {
877 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
878 stream.expect_string("tex")?;
879 stream.expect_string(".grad")?;
880 let grad = ();
881 stream.expect_complete()?;
882 let geom = Geom::parse(stream)?;
883 stream.expect_complete()?;
884 stream.expect_string(".v2")?;
885 let v2 = ();
886 stream.expect_complete()?;
887 stream.expect_string(".f16x2")?;
888 let f16x2 = ();
889 stream.expect_complete()?;
890 let ctype = Ctype::parse(stream)?;
891 stream.expect_complete()?;
892 let d = GeneralOperand::parse(stream)?;
893 let saved_pos = stream.position();
894 let p = if stream.consume_if(|t| matches!(t, PtxToken::Pipe)).is_some() {
895 Some(GeneralOperand::parse(stream)?)
896 } else {
897 stream.set_position(saved_pos);
898 None
899 };
900 stream.expect_complete()?;
901 stream.expect(&PtxToken::Comma)?;
902 let a = TexHandler3Optional::parse(stream)?;
903 stream.expect_complete()?;
904 stream.expect(&PtxToken::Comma)?;
905 let dpdx = GeneralOperand::parse(stream)?;
906 stream.expect_complete()?;
907 stream.expect(&PtxToken::Comma)?;
908 let dpdy = GeneralOperand::parse(stream)?;
909 stream.expect_complete()?;
910 let saved_pos = stream.position();
911 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
912 if !has_comma {
913 stream.set_position(saved_pos);
914 }
915 let saved_pos = stream.position();
916 let e = match GeneralOperand::parse(stream) {
917 Ok(val) => Some(val),
918 Err(_) => {
919 stream.set_position(saved_pos);
920 None
921 }
922 };
923 stream.expect_complete()?;
924 let saved_pos = stream.position();
925 let has_comma = stream.expect(&PtxToken::Comma).is_ok();
926 if !has_comma {
927 stream.set_position(saved_pos);
928 }
929 let saved_pos = stream.position();
930 let f = match GeneralOperand::parse(stream) {
931 Ok(val) => Some(val),
932 Err(_) => {
933 stream.set_position(saved_pos);
934 None
935 }
936 };
937 stream.expect_complete()?;
938 stream.expect_complete()?;
939 stream.expect(&PtxToken::Semicolon)?;
940 Ok(TexGradGeomV2F16x2Ctype {
941 grad,
942 geom,
943 v2,
944 f16x2,
945 ctype,
946 d,
947 p,
948 a,
949 dpdx,
950 dpdy,
951 e,
952 f,
953 })
954 }
955 }
956}