@@ -7,7 +7,10 @@ use crate::{
77 lockfile:: { LockfileMismatchError , LockfileMismatchHandler } ,
88 spirv_builder:: { CompileResult , SpirvBuilder , SpirvBuilderError } ,
99 spirv_cache:: {
10- backend:: { Install , InstallError , InstallParams , InstallRunParams , InstalledBackend } ,
10+ backend:: {
11+ SpirvCodegenBackend , SpirvCodegenBackendInstallError , SpirvCodegenBackendInstallParams ,
12+ SpirvCodegenBackendInstaller ,
13+ } ,
1114 command:: CommandExecError ,
1215 toolchain:: {
1316 HaltToolchainInstallation , InheritStderr , InheritStdout , NoopOnComponentsInstall ,
@@ -20,14 +23,14 @@ use crate::{
2023#[ cfg( feature = "watch" ) ]
2124use crate :: spirv_builder:: SpirvWatcher ;
2225
23- /// Parameters for [`ShaderCrateBuilder ::new()`].
26+ /// Parameters for [`CargoGpuBuilder ::new()`].
2427#[ derive( Debug , Clone ) ]
2528#[ non_exhaustive]
26- pub struct ShaderCrateBuilderParams < W , T , C , O , E > {
29+ pub struct CargoGpuBuilderParams < W , T , C , O , E > {
2730 /// Parameters of the shader crate build.
2831 pub build : SpirvBuilder ,
2932 /// Parameters of the codegen backend installation for the shader crate.
30- pub install : InstallParams ,
33+ pub install : SpirvCodegenBackendInstaller ,
3134 /// There is a tricky situation where a shader crate that depends on workspace config can have
3235 /// a different `Cargo.lock` lockfile version from the the workspace's `Cargo.lock`. This can
3336 /// prevent builds when an old Rust toolchain doesn't recognise the newer lockfile version.
@@ -58,7 +61,7 @@ pub struct ShaderCrateBuilderParams<W, T, C, O, E> {
5861 pub stdio_cfg : StdioCfg < O , E > ,
5962}
6063
61- impl < W , T , C , O , E > ShaderCrateBuilderParams < W , T , C , O , E > {
64+ impl < W , T , C , O , E > CargoGpuBuilderParams < W , T , C , O , E > {
6265 /// Replaces build parameters of the shader crate.
6366 #[ inline]
6467 #[ must_use]
@@ -69,7 +72,7 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
6972 /// Replaces codegen backend installation parameters of the shader crate.
7073 #[ inline]
7174 #[ must_use]
72- pub fn install ( self , install : InstallParams ) -> Self {
75+ pub fn install ( self , install : SpirvCodegenBackendInstaller ) -> Self {
7376 Self { install, ..self }
7477 }
7578
@@ -89,8 +92,8 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
8992 /// Replaces the writer of user output.
9093 #[ inline]
9194 #[ must_use]
92- pub fn writer < NW > ( self , writer : NW ) -> ShaderCrateBuilderParams < NW , T , C , O , E > {
93- ShaderCrateBuilderParams {
95+ pub fn writer < NW > ( self , writer : NW ) -> CargoGpuBuilderParams < NW , T , C , O , E > {
96+ CargoGpuBuilderParams {
9497 build : self . build ,
9598 install : self . install ,
9699 force_overwrite_lockfiles_v4_to_v3 : self . force_overwrite_lockfiles_v4_to_v3 ,
@@ -106,8 +109,8 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
106109 pub fn halt < NT , NC > (
107110 self ,
108111 halt : HaltToolchainInstallation < NT , NC > ,
109- ) -> ShaderCrateBuilderParams < W , NT , NC , O , E > {
110- ShaderCrateBuilderParams {
112+ ) -> CargoGpuBuilderParams < W , NT , NC , O , E > {
113+ CargoGpuBuilderParams {
111114 build : self . build ,
112115 install : self . install ,
113116 force_overwrite_lockfiles_v4_to_v3 : self . force_overwrite_lockfiles_v4_to_v3 ,
@@ -123,8 +126,8 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
123126 pub fn stdio_cfg < NO , NE > (
124127 self ,
125128 stdio_cfg : StdioCfg < NO , NE > ,
126- ) -> ShaderCrateBuilderParams < W , T , C , NO , NE > {
127- ShaderCrateBuilderParams {
129+ ) -> CargoGpuBuilderParams < W , T , C , NO , NE > {
130+ CargoGpuBuilderParams {
128131 build : self . build ,
129132 install : self . install ,
130133 force_overwrite_lockfiles_v4_to_v3 : self . force_overwrite_lockfiles_v4_to_v3 ,
@@ -135,16 +138,16 @@ impl<W, T, C, O, E> ShaderCrateBuilderParams<W, T, C, O, E> {
135138 }
136139}
137140
138- /// [`Default`] parameters for [`ShaderCrateBuilder ::new()`].
139- pub type DefaultShaderCrateBuilderParams = ShaderCrateBuilderParams <
141+ /// [`Default`] parameters for [`CargoGpuBuilder ::new()`].
142+ pub type DefaultCargoGpuBuilderParams = CargoGpuBuilderParams <
140143 io:: Stdout ,
141144 NoopOnToolchainInstall ,
142145 NoopOnComponentsInstall ,
143146 InheritStdout ,
144147 InheritStderr ,
145148> ;
146149
147- impl From < SpirvBuilder > for DefaultShaderCrateBuilderParams {
150+ impl From < SpirvBuilder > for DefaultCargoGpuBuilderParams {
148151 #[ inline]
149152 fn from ( build : SpirvBuilder ) -> Self {
150153 Self {
@@ -154,12 +157,12 @@ impl From<SpirvBuilder> for DefaultShaderCrateBuilderParams {
154157 }
155158}
156159
157- impl Default for DefaultShaderCrateBuilderParams {
160+ impl Default for DefaultCargoGpuBuilderParams {
158161 #[ inline]
159162 fn default ( ) -> Self {
160163 Self {
161164 build : SpirvBuilder :: default ( ) ,
162- install : InstallParams :: default ( ) ,
165+ install : SpirvCodegenBackendInstaller :: default ( ) ,
163166 force_overwrite_lockfiles_v4_to_v3 : false ,
164167 writer : io:: stdout ( ) ,
165168 halt : HaltToolchainInstallation :: noop ( ) ,
@@ -171,20 +174,20 @@ impl Default for DefaultShaderCrateBuilderParams {
171174/// A builder for compiling a `rust-gpu` shader crate.
172175#[ derive( Debug , Clone ) ]
173176#[ non_exhaustive]
174- pub struct ShaderCrateBuilder < W = io:: Stdout > {
177+ pub struct CargoGpuBuilder < W = io:: Stdout > {
175178 /// The underlying builder for compiling the shader crate.
176179 pub builder : SpirvBuilder ,
177- /// The arguments used to install the backend .
178- pub installed_backend_args : Install ,
179- /// The installed backend.
180- pub installed_backend : InstalledBackend ,
180+ /// The underlying codegen backend installer for the shader crate .
181+ pub installer : SpirvCodegenBackendInstaller ,
182+ /// The installed codegen backend.
183+ pub codegen_backend : SpirvCodegenBackend ,
181184 /// The lockfile mismatch handler.
182185 pub lockfile_mismatch_handler : LockfileMismatchHandler ,
183186 /// Writer of user output.
184187 pub writer : W ,
185188}
186189
187- impl < W > ShaderCrateBuilder < W >
190+ impl < W > CargoGpuBuilder < W >
188191where
189192 W : io:: Write ,
190193{
@@ -199,16 +202,16 @@ where
199202 /// * the backend installation fails,
200203 /// * there is a lockfile version mismatch that cannot be resolved automatically.
201204 #[ inline]
202- pub fn new < I , R , T , C , O , E > ( params : I ) -> Result < Self , NewShaderCrateBuilderError < R > >
205+ pub fn new < I , R , T , C , O , E > ( params : I ) -> Result < Self , NewCargoGpuBuilderError < R > >
203206 where
204- I : Into < ShaderCrateBuilderParams < W , T , C , O , E > > ,
207+ I : Into < CargoGpuBuilderParams < W , T , C , O , E > > ,
205208 R : From < CommandExecError > ,
206209 T : FnOnce ( & str ) -> Result < ( ) , R > ,
207210 C : FnOnce ( & str ) -> Result < ( ) , R > ,
208211 O : FnMut ( ) -> Stdio ,
209212 E : FnMut ( ) -> Stdio ,
210213 {
211- let ShaderCrateBuilderParams {
214+ let CargoGpuBuilderParams {
212215 mut build,
213216 install,
214217 force_overwrite_lockfiles_v4_to_v3,
@@ -218,16 +221,16 @@ where
218221 } = params. into ( ) ;
219222
220223 if build. target . is_none ( ) {
221- return Err ( NewShaderCrateBuilderError :: MissingTarget ) ;
224+ return Err ( NewCargoGpuBuilderError :: MissingTarget ) ;
222225 }
223226 let path_to_crate = build
224227 . path_to_crate
225228 . as_ref ( )
226- . ok_or ( NewShaderCrateBuilderError :: MissingCratePath ) ?;
229+ . ok_or ( NewCargoGpuBuilderError :: MissingCratePath ) ?;
227230 let shader_crate = dunce:: canonicalize ( path_to_crate) ?;
231+ build. path_to_crate = Some ( shader_crate. clone ( ) ) ;
228232
229- let backend_to_install = Install :: new ( shader_crate, install) ;
230- let backend_install_params = InstallRunParams :: default ( )
233+ let backend_install_params = SpirvCodegenBackendInstallParams :: from ( & shader_crate)
231234 . writer ( & mut writer)
232235 . halt ( HaltToolchainInstallation {
233236 on_toolchain_install : |channel : & str | ( halt. on_toolchain_install ) ( channel) ,
@@ -237,23 +240,23 @@ where
237240 stdout : || ( stdio_cfg. stdout ) ( ) ,
238241 stderr : || ( stdio_cfg. stderr ) ( ) ,
239242 } ) ;
240- let backend = backend_to_install . run ( backend_install_params) ?;
243+ let codegen_backend = install . install ( backend_install_params) ?;
241244
242245 let lockfile_mismatch_handler = LockfileMismatchHandler :: new (
243- & backend_to_install . shader_crate ,
244- & backend . toolchain_channel ,
246+ & shader_crate,
247+ & codegen_backend . toolchain_channel ,
245248 force_overwrite_lockfiles_v4_to_v3,
246249 ) ?;
247250
248- #[ expect( clippy:: unreachable, reason = "target was already set" ) ]
249- backend
251+ #[ expect( clippy:: unreachable, reason = "target was set" ) ]
252+ codegen_backend
250253 . configure_spirv_builder ( & mut build)
251- . unwrap_or_else ( |_| unreachable ! ( "target was checked before calling this function" ) ) ;
254+ . unwrap_or_else ( |_| unreachable ! ( "target was set before calling this function" ) ) ;
252255
253256 Ok ( Self {
254257 builder : build,
255- installed_backend_args : backend_to_install ,
256- installed_backend : backend ,
258+ installer : install ,
259+ codegen_backend ,
257260 lockfile_mismatch_handler,
258261 writer,
259262 } )
@@ -265,8 +268,13 @@ where
265268 ///
266269 /// Returns an error if building the shader crate failed.
267270 #[ inline]
268- pub fn build ( & mut self ) -> Result < CompileResult , ShaderCrateBuildError > {
269- let shader_crate = self . installed_backend_args . shader_crate . display ( ) ;
271+ pub fn build ( & mut self ) -> Result < CompileResult , CargoGpuBuildError > {
272+ let shader_crate = self
273+ . builder
274+ . path_to_crate
275+ . as_ref ( )
276+ . ok_or ( SpirvBuilderError :: MissingCratePath ) ?
277+ . display ( ) ;
270278 user_output ! ( & mut self . writer, "Compiling shaders at {shader_crate}...\n " ) ?;
271279
272280 let result = self . builder . build ( ) ?;
@@ -280,8 +288,13 @@ where
280288 /// Returns an error if watching shader crate for changes failed.
281289 #[ cfg( feature = "watch" ) ]
282290 #[ inline]
283- pub fn watch ( & mut self ) -> Result < SpirvWatcher , ShaderCrateBuildError > {
284- let shader_crate = self . installed_backend_args . shader_crate . display ( ) ;
291+ pub fn watch ( & mut self ) -> Result < SpirvWatcher , CargoGpuBuildError > {
292+ let shader_crate = self
293+ . builder
294+ . path_to_crate
295+ . as_ref ( )
296+ . ok_or ( SpirvBuilderError :: MissingCratePath ) ?
297+ . display ( ) ;
285298 user_output ! (
286299 & mut self . writer,
287300 "Watching shaders for changes at {shader_crate}...\n "
@@ -292,10 +305,10 @@ where
292305 }
293306}
294307
295- /// An error indicating what went wrong when creating a [`ShaderCrateBuilder `].
308+ /// An error indicating what went wrong when creating a [`CargoGpuBuilder `].
296309#[ derive( Debug , thiserror:: Error ) ]
297310#[ non_exhaustive]
298- pub enum NewShaderCrateBuilderError < E = CommandExecError > {
311+ pub enum NewCargoGpuBuilderError < E = CommandExecError > {
299312 /// Shader crate target is missing from parameters of the build.
300313 #[ error( "shader crate target must be set, for example `spirv-unknown-vulkan1.2`" ) ]
301314 MissingTarget ,
@@ -307,7 +320,7 @@ pub enum NewShaderCrateBuilderError<E = CommandExecError> {
307320 InvalidCratePath ( #[ from] io:: Error ) ,
308321 /// The backend installation failed.
309322 #[ error( "could not install backend: {0}" ) ]
310- Install ( #[ from] InstallError < E > ) ,
323+ Install ( #[ from] SpirvCodegenBackendInstallError < E > ) ,
311324 /// There is a lockfile version mismatch that cannot be resolved automatically.
312325 #[ error( transparent) ]
313326 LockfileMismatch ( #[ from] LockfileMismatchError ) ,
@@ -316,7 +329,7 @@ pub enum NewShaderCrateBuilderError<E = CommandExecError> {
316329/// An error indicating what went wrong when building the shader crate.
317330#[ derive( Debug , thiserror:: Error ) ]
318331#[ non_exhaustive]
319- pub enum ShaderCrateBuildError {
332+ pub enum CargoGpuBuildError {
320333 /// Failed to write user output.
321334 #[ error( "failed to write user output: {0}" ) ]
322335 IoWrite ( #[ from] io:: Error ) ,
0 commit comments