|
1083 | 1083 | <a href="#1082" id="1082">1082</a> |
1084 | 1084 | <a href="#1083" id="1083">1083</a> |
1085 | 1085 | <a href="#1084" id="1084">1084</a> |
1086 | | -<a href="#1085" id="1085">1085</a></pre></div><pre class="rust"><code><span class="kw">mod </span>allocator; |
| 1086 | +<a href="#1085" id="1085">1085</a> |
| 1087 | +<a href="#1086" id="1086">1086</a> |
| 1088 | +<a href="#1087" id="1087">1087</a> |
| 1089 | +<a href="#1088" id="1088">1088</a> |
| 1090 | +<a href="#1089" id="1089">1089</a> |
| 1091 | +<a href="#1090" id="1090">1090</a> |
| 1092 | +<a href="#1091" id="1091">1091</a> |
| 1093 | +<a href="#1092" id="1092">1092</a> |
| 1094 | +<a href="#1093" id="1093">1093</a> |
| 1095 | +<a href="#1094" id="1094">1094</a></pre></div><pre class="rust"><code><span class="kw">mod </span>allocator; |
1087 | 1096 | <span class="kw">mod </span>bind; |
1088 | 1097 | <span class="kw">mod </span>bundle; |
1089 | 1098 | <span class="kw">mod </span>clear; |
|
1180 | 1189 |
|
1181 | 1190 | <span class="kw">impl </span>CommandEncoderStatus { |
1182 | 1191 | <span class="doccomment">/// Checks that the encoder is in the [`Self::Recording`] state. |
1183 | | - </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>record(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><RecordingGuard<<span class="lifetime">'_</span>>, CommandEncoderError> { |
| 1192 | + </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>record(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><RecordingGuard<<span class="lifetime">'_</span>>, EncoderStateError> { |
1184 | 1193 | <span class="kw">match </span><span class="self">self </span>{ |
1185 | 1194 | <span class="self">Self</span>::Recording(<span class="kw">_</span>) => <span class="prelude-val">Ok</span>(RecordingGuard { inner: <span class="self">self </span>}), |
1186 | 1195 | <span class="self">Self</span>::Locked(<span class="kw">_</span>) => { |
1187 | 1196 | <span class="kw-2">*</span><span class="self">self </span>= <span class="self">Self</span>::Error; |
1188 | | - <span class="prelude-val">Err</span>(CommandEncoderError::Locked) |
| 1197 | + <span class="prelude-val">Err</span>(EncoderStateError::Locked) |
1189 | 1198 | } |
1190 | | - <span class="self">Self</span>::Finished(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(CommandEncoderError::NotRecording), |
1191 | | - <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(CommandEncoderError::Invalid), |
| 1199 | + <span class="self">Self</span>::Finished(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(EncoderStateError::Ended), |
| 1200 | + <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(EncoderStateError::Invalid), |
1192 | 1201 | } |
1193 | 1202 | } |
1194 | 1203 |
|
|
1207 | 1216 | <span class="doccomment">/// Locks the encoder by putting it in the [`Self::Locked`] state. |
1208 | 1217 | /// |
1209 | 1218 | /// Call [`Self::unlock_encoder`] to put the [`CommandBuffer`] back into the [`Self::Recording`] state. |
1210 | | - </span><span class="kw">fn </span>lock_encoder(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><(), CommandEncoderError> { |
| 1219 | + </span><span class="kw">fn </span>lock_encoder(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><(), EncoderStateError> { |
1211 | 1220 | <span class="kw">match </span>mem::replace(<span class="self">self</span>, <span class="self">Self</span>::Error) { |
1212 | 1221 | <span class="self">Self</span>::Recording(inner) => { |
1213 | 1222 | <span class="kw-2">*</span><span class="self">self </span>= <span class="self">Self</span>::Locked(inner); |
1214 | 1223 | <span class="prelude-val">Ok</span>(()) |
1215 | 1224 | } |
1216 | 1225 | <span class="self">Self</span>::Finished(inner) => { |
1217 | 1226 | <span class="kw-2">*</span><span class="self">self </span>= <span class="self">Self</span>::Finished(inner); |
1218 | | - <span class="prelude-val">Err</span>(CommandEncoderError::NotRecording) |
| 1227 | + <span class="prelude-val">Err</span>(EncoderStateError::Ended) |
1219 | 1228 | } |
1220 | | - <span class="self">Self</span>::Locked(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(CommandEncoderError::Locked), |
1221 | | - <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(CommandEncoderError::Invalid), |
| 1229 | + <span class="self">Self</span>::Locked(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(EncoderStateError::Locked), |
| 1230 | + <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(EncoderStateError::Invalid), |
1222 | 1231 | } |
1223 | 1232 | } |
1224 | 1233 |
|
|
1227 | 1236 | /// This function is the unlocking counterpart to [`Self::lock_encoder`]. |
1228 | 1237 | /// |
1229 | 1238 | /// It is only valid to call this function if the encoder is in the [`Self::Locked`] state. |
1230 | | - </span><span class="kw">fn </span>unlock_encoder(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><RecordingGuard<<span class="lifetime">'_</span>>, CommandEncoderError> { |
| 1239 | + </span><span class="kw">fn </span>unlock_encoder(<span class="kw-2">&mut </span><span class="self">self</span>) -> <span class="prelude-ty">Result</span><RecordingGuard<<span class="lifetime">'_</span>>, EncoderStateError> { |
1231 | 1240 | <span class="kw">match </span>mem::replace(<span class="self">self</span>, <span class="self">Self</span>::Error) { |
1232 | 1241 | <span class="self">Self</span>::Locked(inner) => { |
1233 | 1242 | <span class="kw-2">*</span><span class="self">self </span>= <span class="self">Self</span>::Recording(inner); |
1234 | 1243 | <span class="prelude-val">Ok</span>(RecordingGuard { inner: <span class="self">self </span>}) |
1235 | 1244 | } |
1236 | 1245 | <span class="self">Self</span>::Finished(inner) => { |
1237 | 1246 | <span class="kw-2">*</span><span class="self">self </span>= <span class="self">Self</span>::Finished(inner); |
1238 | | - <span class="prelude-val">Err</span>(CommandEncoderError::NotRecording) |
| 1247 | + <span class="prelude-val">Err</span>(EncoderStateError::Ended) |
1239 | 1248 | } |
1240 | | - <span class="self">Self</span>::Recording(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(CommandEncoderError::Invalid), |
1241 | | - <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(CommandEncoderError::Invalid), |
| 1249 | + <span class="self">Self</span>::Recording(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(EncoderStateError::Invalid), |
| 1250 | + <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(EncoderStateError::Invalid), |
1242 | 1251 | } |
1243 | 1252 | } |
1244 | 1253 |
|
|
1256 | 1265 | } |
1257 | 1266 | <span class="self">Self</span>::Finished(inner) => { |
1258 | 1267 | <span class="kw-2">*</span><span class="self">self </span>= <span class="self">Self</span>::Finished(inner); |
1259 | | - <span class="prelude-val">Err</span>(CommandEncoderError::NotRecording) |
| 1268 | + <span class="prelude-val">Err</span>(EncoderStateError::Ended.into()) |
1260 | 1269 | } |
1261 | | - <span class="self">Self</span>::Locked(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(CommandEncoderError::Locked), |
1262 | | - <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(CommandEncoderError::Invalid), |
| 1270 | + <span class="self">Self</span>::Locked(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(EncoderStateError::Locked.into()), |
| 1271 | + <span class="self">Self</span>::Error => <span class="prelude-val">Err</span>(EncoderStateError::Invalid.into()), |
1263 | 1272 | } |
1264 | 1273 | } |
1265 | 1274 | } |
|
1810 | 1819 | } |
1811 | 1820 | } |
1812 | 1821 |
|
| 1822 | +<span class="doccomment">/// Errors related to the state of a command or pass encoder. |
| 1823 | +</span><span class="attr">#[derive(Clone, Debug, Error)] |
| 1824 | +#[non_exhaustive] |
| 1825 | +</span><span class="kw">pub enum </span>EncoderStateError { |
| 1826 | + <span class="attr">#[error(<span class="string">"Encoder is invalid"</span>)] |
| 1827 | + </span>Invalid, |
| 1828 | + <span class="attr">#[error(<span class="string">"Encoding must not have ended"</span>)] |
| 1829 | + </span>Ended, |
| 1830 | + |
| 1831 | + <span class="doccomment">/// Note: only command encoders can be locked (not pass encoders). |
| 1832 | + </span><span class="attr">#[error(<span class="string">"Encoder is locked by a previously created render/compute pass. Before recording any new commands, the pass must be ended."</span>)] |
| 1833 | + </span>Locked, |
| 1834 | +} |
| 1835 | + |
1813 | 1836 | <span class="attr">#[derive(Clone, Debug, Error)] |
1814 | 1837 | #[non_exhaustive] |
1815 | 1838 | </span><span class="kw">pub enum </span>CommandEncoderError { |
1816 | | - <span class="attr">#[error(<span class="string">"Command encoder is invalid"</span>)] |
1817 | | - </span>Invalid, |
1818 | | - <span class="attr">#[error(<span class="string">"Command encoder must be active"</span>)] |
1819 | | - </span>NotRecording, |
| 1839 | + <span class="attr">#[error(transparent)] |
| 1840 | + </span>State(<span class="attr">#[from] </span>EncoderStateError), |
1820 | 1841 | <span class="attr">#[error(transparent)] |
1821 | 1842 | </span>Device(<span class="attr">#[from] </span>DeviceError), |
1822 | | - <span class="attr">#[error(<span class="string">"Command encoder is locked by a previously created render/compute pass. Before recording any new commands, the pass must be ended."</span>)] |
1823 | | - </span>Locked, |
1824 | | - |
1825 | 1843 | <span class="attr">#[error(transparent)] |
1826 | 1844 | </span>InvalidColorAttachment(<span class="attr">#[from] </span>ColorAttachmentError), |
1827 | 1845 | <span class="attr">#[error(transparent)] |
|
0 commit comments