nvk: Fix local memory loads in Kepler shader header

Kepler cards shader header needs the load/store flag enabled even for
local memory usage.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35151>
This commit is contained in:
Lorenzo Rossi 2025-05-20 15:53:41 +02:00 committed by Marge Bot
parent a427f540e5
commit 4942a29314
2 changed files with 9 additions and 2 deletions

View file

@ -7732,6 +7732,11 @@ pub trait ShaderModel {
self.sm() >= 32 && self.sm() < 40
}
#[allow(dead_code)]
fn is_kepler(&self) -> bool {
self.is_kepler_a() || self.is_kepler_b()
}
// The following helpers are pulled from GetSpaVersion in the open-source
// NVIDIA kernel driver sources

View file

@ -473,12 +473,14 @@ pub fn encode_header(
let mut sph =
ShaderProgramHeader::new(ShaderType::from(&shader_info.stage), sm.sm());
let slm_size = shader_info.slm_size.next_multiple_of(16);
sph.set_sass_version(1);
sph.set_does_load_or_store(shader_info.uses_global_mem);
sph.set_does_load_or_store(
shader_info.uses_global_mem || (sm.is_kepler() && slm_size > 0),
);
sph.set_does_global_store(shader_info.writes_global_mem);
sph.set_does_fp64(shader_info.uses_fp64);
let slm_size = shader_info.slm_size.next_multiple_of(16);
sph.set_shader_local_memory_size(slm_size.into());
let crs_size = sm.crs_size(shader_info.max_crs_depth);
sph.set_shader_local_memory_crs_size(crs_size);