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