ptx_parser/parser/instruction/
txq.rs

1//! Original PTX specification:
2//!
3//! txq.tquery.b32         d, [a];       // texture attributes
4//! txq.level.tlquery.b32  d, [a], lod;  // texture attributes
5//! txq.squery.b32         d, [a];       // sampler attributes
6//! .tquery  = { .width, .height, .depth,
7//! .channel_data_type, .channel_order,
8//! .normalized_coords, .array_size,
9//! .num_mipmap_levels, .num_samples};
10//! .tlquery = { .width, .height, .depth };
11//! .squery  = { .force_unnormalized_coords, .filter_mode,
12//! .addr_mode_0, addr_mode_1, addr_mode_2 };
13
14#![allow(unused)]
15
16use crate::lexer::PtxToken;
17use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
18use crate::r#type::common::*;
19
20pub mod section_0 {
21    use super::*;
22    use crate::r#type::instruction::txq::section_0::*;
23
24    // ============================================================================
25    // Generated enum parsers
26    // ============================================================================
27
28    impl PtxParser for Squery {
29        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
30            // Try ForceUnnormalizedCoords
31            {
32                let saved_pos = stream.position();
33                if stream.expect_string(".force_unnormalized_coords").is_ok() {
34                    return Ok(Squery::ForceUnnormalizedCoords);
35                }
36                stream.set_position(saved_pos);
37            }
38            let saved_pos = stream.position();
39            // Try FilterMode
40            {
41                let saved_pos = stream.position();
42                if stream.expect_string(".filter_mode").is_ok() {
43                    return Ok(Squery::FilterMode);
44                }
45                stream.set_position(saved_pos);
46            }
47            stream.set_position(saved_pos);
48            let saved_pos = stream.position();
49            // Try AddrMode0
50            {
51                let saved_pos = stream.position();
52                if stream.expect_string(".addr_mode_0").is_ok() {
53                    return Ok(Squery::AddrMode0);
54                }
55                stream.set_position(saved_pos);
56            }
57            stream.set_position(saved_pos);
58            let saved_pos = stream.position();
59            // Try AddrMode1
60            {
61                let saved_pos = stream.position();
62                if stream.expect_string("addr_mode_1").is_ok() {
63                    return Ok(Squery::AddrMode1);
64                }
65                stream.set_position(saved_pos);
66            }
67            stream.set_position(saved_pos);
68            let saved_pos = stream.position();
69            // Try AddrMode2
70            {
71                let saved_pos = stream.position();
72                if stream.expect_string("addr_mode_2").is_ok() {
73                    return Ok(Squery::AddrMode2);
74                }
75                stream.set_position(saved_pos);
76            }
77            stream.set_position(saved_pos);
78            let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
79            let expected = &[".force_unnormalized_coords", ".filter_mode", ".addr_mode_0", "addr_mode_1", "addr_mode_2"];
80            let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
81            Err(crate::parser::unexpected_value(span, expected, found))
82        }
83    }
84
85    impl PtxParser for Tlquery {
86        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
87            // Try Height
88            {
89                let saved_pos = stream.position();
90                if stream.expect_string(".height").is_ok() {
91                    return Ok(Tlquery::Height);
92                }
93                stream.set_position(saved_pos);
94            }
95            let saved_pos = stream.position();
96            // Try Width
97            {
98                let saved_pos = stream.position();
99                if stream.expect_string(".width").is_ok() {
100                    return Ok(Tlquery::Width);
101                }
102                stream.set_position(saved_pos);
103            }
104            stream.set_position(saved_pos);
105            let saved_pos = stream.position();
106            // Try Depth
107            {
108                let saved_pos = stream.position();
109                if stream.expect_string(".depth").is_ok() {
110                    return Ok(Tlquery::Depth);
111                }
112                stream.set_position(saved_pos);
113            }
114            stream.set_position(saved_pos);
115            let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
116            let expected = &[".height", ".width", ".depth"];
117            let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
118            Err(crate::parser::unexpected_value(span, expected, found))
119        }
120    }
121
122    impl PtxParser for Tquery {
123        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
124            // Try ChannelDataType
125            {
126                let saved_pos = stream.position();
127                if stream.expect_string(".channel_data_type").is_ok() {
128                    return Ok(Tquery::ChannelDataType);
129                }
130                stream.set_position(saved_pos);
131            }
132            let saved_pos = stream.position();
133            // Try NormalizedCoords
134            {
135                let saved_pos = stream.position();
136                if stream.expect_string(".normalized_coords").is_ok() {
137                    return Ok(Tquery::NormalizedCoords);
138                }
139                stream.set_position(saved_pos);
140            }
141            stream.set_position(saved_pos);
142            let saved_pos = stream.position();
143            // Try NumMipmapLevels
144            {
145                let saved_pos = stream.position();
146                if stream.expect_string(".num_mipmap_levels").is_ok() {
147                    return Ok(Tquery::NumMipmapLevels);
148                }
149                stream.set_position(saved_pos);
150            }
151            stream.set_position(saved_pos);
152            let saved_pos = stream.position();
153            // Try ChannelOrder
154            {
155                let saved_pos = stream.position();
156                if stream.expect_string(".channel_order").is_ok() {
157                    return Ok(Tquery::ChannelOrder);
158                }
159                stream.set_position(saved_pos);
160            }
161            stream.set_position(saved_pos);
162            let saved_pos = stream.position();
163            // Try NumSamples
164            {
165                let saved_pos = stream.position();
166                if stream.expect_string(".num_samples").is_ok() {
167                    return Ok(Tquery::NumSamples);
168                }
169                stream.set_position(saved_pos);
170            }
171            stream.set_position(saved_pos);
172            let saved_pos = stream.position();
173            // Try ArraySize
174            {
175                let saved_pos = stream.position();
176                if stream.expect_string(".array_size").is_ok() {
177                    return Ok(Tquery::ArraySize);
178                }
179                stream.set_position(saved_pos);
180            }
181            stream.set_position(saved_pos);
182            let saved_pos = stream.position();
183            // Try Height
184            {
185                let saved_pos = stream.position();
186                if stream.expect_string(".height").is_ok() {
187                    return Ok(Tquery::Height);
188                }
189                stream.set_position(saved_pos);
190            }
191            stream.set_position(saved_pos);
192            let saved_pos = stream.position();
193            // Try Width
194            {
195                let saved_pos = stream.position();
196                if stream.expect_string(".width").is_ok() {
197                    return Ok(Tquery::Width);
198                }
199                stream.set_position(saved_pos);
200            }
201            stream.set_position(saved_pos);
202            let saved_pos = stream.position();
203            // Try Depth
204            {
205                let saved_pos = stream.position();
206                if stream.expect_string(".depth").is_ok() {
207                    return Ok(Tquery::Depth);
208                }
209                stream.set_position(saved_pos);
210            }
211            stream.set_position(saved_pos);
212            let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
213            let expected = &[".channel_data_type", ".normalized_coords", ".num_mipmap_levels", ".channel_order", ".num_samples", ".array_size", ".height", ".width", ".depth"];
214            let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
215            Err(crate::parser::unexpected_value(span, expected, found))
216        }
217    }
218
219    impl PtxParser for TxqTqueryB32 {
220        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
221            stream.expect_string("txq")?;
222            let tquery = Tquery::parse(stream)?;
223            stream.expect_complete()?;
224            stream.expect_string(".b32")?;
225            let b32 = ();
226            stream.expect_complete()?;
227            let d = GeneralOperand::parse(stream)?;
228            stream.expect_complete()?;
229            stream.expect(&PtxToken::Comma)?;
230            let a = AddressOperand::parse(stream)?;
231            stream.expect_complete()?;
232            stream.expect_complete()?;
233            stream.expect(&PtxToken::Semicolon)?;
234            Ok(TxqTqueryB32 {
235                tquery,
236                b32,
237                d,
238                a,
239            })
240        }
241    }
242
243
244    impl PtxParser for TxqLevelTlqueryB32 {
245        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
246            stream.expect_string("txq")?;
247            stream.expect_string(".level")?;
248            let level = ();
249            stream.expect_complete()?;
250            let tlquery = Tlquery::parse(stream)?;
251            stream.expect_complete()?;
252            stream.expect_string(".b32")?;
253            let b32 = ();
254            stream.expect_complete()?;
255            let d = GeneralOperand::parse(stream)?;
256            stream.expect_complete()?;
257            stream.expect(&PtxToken::Comma)?;
258            let a = AddressOperand::parse(stream)?;
259            stream.expect_complete()?;
260            stream.expect(&PtxToken::Comma)?;
261            let lod = GeneralOperand::parse(stream)?;
262            stream.expect_complete()?;
263            stream.expect_complete()?;
264            stream.expect(&PtxToken::Semicolon)?;
265            Ok(TxqLevelTlqueryB32 {
266                level,
267                tlquery,
268                b32,
269                d,
270                a,
271                lod,
272            })
273        }
274    }
275
276
277    impl PtxParser for TxqSqueryB32 {
278        fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
279            stream.expect_string("txq")?;
280            let squery = Squery::parse(stream)?;
281            stream.expect_complete()?;
282            stream.expect_string(".b32")?;
283            let b32 = ();
284            stream.expect_complete()?;
285            let d = GeneralOperand::parse(stream)?;
286            stream.expect_complete()?;
287            stream.expect(&PtxToken::Comma)?;
288            let a = AddressOperand::parse(stream)?;
289            stream.expect_complete()?;
290            stream.expect_complete()?;
291            stream.expect(&PtxToken::Semicolon)?;
292            Ok(TxqSqueryB32 {
293                squery,
294                b32,
295                d,
296                a,
297            })
298        }
299    }
300
301
302}
303