///|
priv struct WgslIrRuntimeWriterBackend {
shader_module : Module
view : WgslIrWriterModule
}
///|
fn emit_wgsl_module_with_runtime_writer_backend(
shader_module : Module,
root_items : Array[String]?,
compatibility : WgslNagaCompatibilityView,
) -> String raise WgslIrEmitError {
let view = build_wgsl_ir_runtime_writer_module(
shader_module,
root_items,
compatibility~,
)
let backend = WgslIrRuntimeWriterBackend::{ shader_module, view }
backend.emit()
}
///|
fn WgslIrRuntimeWriterBackend::emit(
self : WgslIrRuntimeWriterBackend,
) -> String raise WgslIrEmitError {
self.validate()
self.emitter().emit_module()
}
///|
fn WgslIrRuntimeWriterBackend::validate(
self : WgslIrRuntimeWriterBackend,
) -> Unit raise WgslIrEmitError {
ignore(self.view.filter)
validate_wgsl_ir_module(self.shader_module) catch {
error => raise Unsupported(error.message())
}
}
///|
fn WgslIrRuntimeWriterBackend::emitter(
self : WgslIrRuntimeWriterBackend,
) -> WgslIrEmitter {
{
shader_module: self.shader_module,
options: WgslIrEmitOptions::valid_wgsl(),
writer_module: self.view,
names: self.view.names,
current_function_origin: None,
compat_negative_zero_seen: false,
emitted_function_named_expressions: Set([]),
emitted_function_materialized_expressions: Set([]),
}
}