From b15407117808324b8e84965e4fe7b1340f885dbe Mon Sep 17 00:00:00 2001 From: Mel Henning Date: Thu, 11 Dec 2025 15:26:17 -0500 Subject: [PATCH] nak: Don't box ShaderModelInfo Reviewed-by: Mary Guillemard Part-of: --- src/nouveau/compiler/nak/api.rs | 7 +++-- src/nouveau/compiler/nak/hw_tests.rs | 30 +++++++++++----------- src/nouveau/compiler/nak/nvdisasm_tests.rs | 4 +-- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/nouveau/compiler/nak/api.rs b/src/nouveau/compiler/nak/api.rs index de69f69e682..4d430c83087 100644 --- a/src/nouveau/compiler/nak/api.rs +++ b/src/nouveau/compiler/nak/api.rs @@ -433,8 +433,8 @@ fn nak_compile_shader_internal( Some(unsafe { &*fs_key }) }; - let sm = Box::new(ShaderModelInfo::new(nak.sm)); - let mut s = nak_shader_from_nir(nak, nir, sm.as_ref()); + let sm = ShaderModelInfo::new(nak.sm); + let mut s = nak_shader_from_nir(nak, nir, &sm); if DEBUG.print() { eprintln!("NAK IR:\n{}", &s); @@ -472,8 +472,7 @@ fn nak_compile_shader_internal( } let code = sm.encode_shader(&s); - let bin = - Box::new(ShaderBin::new(sm.as_ref(), &s.info, fs_key, code, &asm)); + let bin = Box::new(ShaderBin::new(&sm, &s.info, fs_key, code, &asm)); Box::into_raw(bin) as *mut nak_shader_bin } diff --git a/src/nouveau/compiler/nak/hw_tests.rs b/src/nouveau/compiler/nak/hw_tests.rs index 011b9f2d25e..0a809e936e5 100644 --- a/src/nouveau/compiler/nak/hw_tests.rs +++ b/src/nouveau/compiler/nak/hw_tests.rs @@ -21,7 +21,7 @@ use nv_push_rs::Push as NvPush; use nvidia_headers::classes::cl90b5::mthd as cl90b5; struct RunSingleton { - sm: Box, + sm: ShaderModelInfo, run: Runner, } @@ -37,7 +37,7 @@ impl RunSingleton { let run = Runner::new(dev_id); let sm_nr = run.dev_info().sm; - let sm = Box::new(ShaderModelInfo::new(sm_nr)); + let sm = ShaderModelInfo::new(sm_nr); RunSingleton { sm, run } }) } @@ -273,7 +273,7 @@ impl SSABuilder for TestShaderBuilder<'_> { #[test] fn test_sanity() { let run = RunSingleton::get(); - let b = TestShaderBuilder::new(run.sm.as_ref()); + let b = TestShaderBuilder::new(&run.sm); let bin = b.compile(); unsafe { run.run @@ -309,7 +309,7 @@ pub fn test_foldable_op_with( mut rand_u32: impl FnMut(usize) -> u32, ) { let run = RunSingleton::get(); - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let mut comps = 0_u16; let mut fold_src = Vec::new(); @@ -494,7 +494,7 @@ pub fn test_foldable_op_with( srcs: &fold_src, dsts: &mut fold_dst, }; - op.fold(&*run.sm, &mut fold); + op.fold(&run.sm, &mut fold); debug_assert!(fold_dst.len() == op.dsts_as_slice().len()); for (i, dst) in fold_dst.iter().enumerate() { @@ -839,7 +839,7 @@ fn test_lea64() { let invocations = 100; for shift in 0..64 { - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let x = Src::from([ b.ld_test_data(0, MemType::B32)[0], @@ -1081,7 +1081,7 @@ fn test_plop2() { for op in logic_ops { for (x_mod, y_mod) in mods { - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let x = b.ld_test_data(0, MemType::B32)[0]; let y = b.ld_test_data(4, MemType::B32)[0]; @@ -1145,7 +1145,7 @@ fn test_iadd64() { ]; for (x_mod, y_mod) in cases { - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let mut x = Src::from([ b.ld_test_data(0, MemType::B32)[0], @@ -1356,7 +1356,7 @@ fn test_ineg64() { let run = RunSingleton::get(); let invocations = 100; - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let x = SSARef::from([ b.ld_test_data(0, MemType::B32)[0], @@ -1400,7 +1400,7 @@ fn test_isetp64() { ]; for i in 0..(ops.len() * 2) { - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let cmp_type = types[i % 2]; let cmp_op = ops[i / 2]; @@ -1491,7 +1491,7 @@ fn test_shl64() { let invocations = 100; - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let srcs = SSARef::from([ b.ld_test_data(0, MemType::B32)[0], @@ -1532,7 +1532,7 @@ fn test_shr64() { let cases = [true, false]; for signed in cases { - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let srcs = SSARef::from([ b.ld_test_data(0, MemType::B32)[0], @@ -1573,7 +1573,7 @@ fn test_f2fp_pack_ab() { return; } - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); let srcs = SSARef::from([ b.ld_test_data(0, MemType::B32)[0], @@ -1626,7 +1626,7 @@ fn test_f2fp_pack_ab() { #[test] pub fn test_gpr_limit_from_local_size() { let run = RunSingleton::get(); - let b = TestShaderBuilder::new(run.sm.as_ref()); + let b = TestShaderBuilder::new(&run.sm); let mut bin = b.compile(); for local_size in 1..=1024 { @@ -1652,7 +1652,7 @@ fn test_op_ldsm() { return; } - let mut b = TestShaderBuilder::new(run.sm.as_ref()); + let mut b = TestShaderBuilder::new(&run.sm); // First load the test data and store it inside shared memory. Each thread handles 8 elements. let input = b.ld_test_data(0, MemType::B128)[0]; diff --git a/src/nouveau/compiler/nak/nvdisasm_tests.rs b/src/nouveau/compiler/nak/nvdisasm_tests.rs index 4a1358371d8..622d4ba22ad 100644 --- a/src/nouveau/compiler/nak/nvdisasm_tests.rs +++ b/src/nouveau/compiler/nak/nvdisasm_tests.rs @@ -87,9 +87,9 @@ fn disassemble_instrs(instrs: Vec, sm: u8) -> Vec { io: ShaderIoInfo::None, }; - let sm: Box = Box::new(ShaderModelInfo::new(sm)); + let sm = ShaderModelInfo::new(sm); let s = Shader { - sm: &*sm, + sm: &sm, info: info, functions: vec![f], };