@@ -333,6 +333,9 @@ impl Device {
333333 None => validation:: BindingLayoutSource :: new_derived ( & self . limits ) ,
334334 } ;
335335
336+ // The size the immediates will be if there is no pipeline layout
337+ let mut derived_immediate_size = 0 ;
338+
336339 let final_ray_gen_name;
337340 let ray_generation = {
338341 let stage = validation:: ShaderStageForValidation :: RayGeneration ;
@@ -353,19 +356,22 @@ impl Device {
353356 error : e,
354357 } ) ?;
355358
356- if let Some ( ref interface) = desc. ray_generation . module . interface {
359+ if let Some ( interface) = desc. ray_generation . module . interface . interface ( ) {
357360 io = interface
358361 . check_stage (
359362 & mut binding_layout_source,
360363 & mut shader_binding_sizes,
361364 & final_ray_gen_name,
362365 stage,
363366 io,
367+ None ,
364368 )
365369 . map_err ( |e| pipeline:: CreateRayTracingPipelineError :: Stage {
366370 stage : stage_bit,
367371 error : e,
368372 } ) ?;
373+
374+ derived_immediate_size = derived_immediate_size. max ( interface. immediate_size ) ;
369375 }
370376
371377 hal:: ProgrammableStage {
@@ -395,19 +401,22 @@ impl Device {
395401 error : e,
396402 } ) ?;
397403
398- if let Some ( ref interface) = desc. miss . module . interface {
404+ if let Some ( interface) = desc. miss . module . interface . interface ( ) {
399405 io = interface
400406 . check_stage (
401407 & mut binding_layout_source,
402408 & mut shader_binding_sizes,
403409 & final_miss_name,
404410 stage,
405411 io,
412+ None ,
406413 )
407414 . map_err ( |e| pipeline:: CreateRayTracingPipelineError :: Stage {
408415 stage : stage_bit,
409416 error : e,
410417 } ) ?;
418+
419+ derived_immediate_size = derived_immediate_size. max ( interface. immediate_size ) ;
411420 }
412421
413422 hal:: ProgrammableStage {
@@ -500,19 +509,22 @@ impl Device {
500509 validation:: ShaderStageForValidation :: ClosestHit { triangle : true } ;
501510
502511 let stage_bits = stage. to_wgt_bit ( ) ;
503- if let Some ( ref interface) = closest_hit. module . interface {
512+ if let Some ( interface) = closest_hit. module . interface . interface ( ) {
504513 io = interface
505514 . check_stage (
506515 & mut binding_layout_source,
507516 & mut shader_binding_sizes,
508517 final_closest_name,
509518 stage,
510519 io,
520+ None ,
511521 )
512522 . map_err ( |e| pipeline:: CreateRayTracingPipelineError :: Stage {
513523 stage : stage_bits,
514524 error : e,
515525 } ) ?;
526+
527+ derived_immediate_size = derived_immediate_size. max ( interface. immediate_size ) ;
516528 }
517529
518530 hal:: ProgrammableStage {
@@ -532,21 +544,24 @@ impl Device {
532544 let final_any_name = final_any_name. as_ref ( ) . unwrap ( ) ;
533545
534546 let stage_bits = stage. to_wgt_bit ( ) ;
535- if let Some ( ref interface) = any_hit. module . interface {
547+ if let Some ( interface) = any_hit. module . interface . interface ( ) {
536548 io = interface
537549 . check_stage (
538550 & mut binding_layout_source,
539551 & mut shader_binding_sizes,
540552 final_any_name,
541553 stage,
542554 io,
555+ None ,
543556 )
544557 . map_err ( |e| {
545558 pipeline:: CreateRayTracingPipelineError :: Stage {
546559 stage : stage_bits,
547560 error : e,
548561 }
549562 } ) ?;
563+
564+ derived_immediate_size = derived_immediate_size. max ( interface. immediate_size ) ;
550565 }
551566
552567 Some ( hal:: ProgrammableStage {
@@ -587,7 +602,7 @@ impl Device {
587602 let pipeline_layout = match binding_layout_source {
588603 validation:: BindingLayoutSource :: Provided ( layout) => layout,
589604 validation:: BindingLayoutSource :: Derived ( entries) => {
590- self . create_derived_pipeline_layout ( entries) ?
605+ self . create_derived_pipeline_layout ( entries, derived_immediate_size ) ?
591606 }
592607 } ;
593608
0 commit comments