nvk,nak: Plumb through the zs_self_dep key bit

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
Faith Ekstrand
2023-09-12 14:48:30 -05:00
committed by Marge Bot
parent c54f622a93
commit 64168e58cd
3 changed files with 32 additions and 6 deletions
+7 -1
View File
@@ -33,6 +33,10 @@ void nak_optimize_nir(nir_shader *nir, const struct nak_compiler *nak);
void nak_preprocess_nir(nir_shader *nir, const struct nak_compiler *nak);
void nak_postprocess_nir(nir_shader *nir, const struct nak_compiler *nak);
struct nak_fs_key {
bool zs_self_dep;
};
struct nak_shader_info {
gl_shader_stage stage;
@@ -66,7 +70,9 @@ struct nak_shader_bin {
void nak_shader_bin_destroy(struct nak_shader_bin *bin);
struct nak_shader_bin *
nak_compile_shader(nir_shader *nir, const struct nak_compiler *nak);
nak_compile_shader(nir_shader *nir,
const struct nak_compiler *nak,
const struct nak_fs_key *fs_key);
#ifdef __cplusplus
}
+14 -3
View File
@@ -203,7 +203,11 @@ pub extern "C" fn nak_shader_bin_destroy(bin: *mut nak_shader_bin) {
};
}
fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
fn encode_hdr_for_nir(
nir: &nir_shader,
tls_size: u32,
fs_key: Option<&nak_fs_key>,
) -> [u32; 32] {
if nir.info.stage() == MESA_SHADER_COMPUTE {
return [0_u32; 32];
}
@@ -232,7 +236,8 @@ fn encode_hdr_for_nir(nir: &nir_shader, tls_size: u32) -> [u32; 32] {
if nir.info.stage() == MESA_SHADER_FRAGMENT {
cw0.set_bit(14, nir.num_outputs > 1);
let info_fs = unsafe { &nir.info.__bindgen_anon_1.fs };
cw0.set_bit(15, info_fs.uses_discard());
let zs_self_dep = fs_key.map_or(false, |key| key.zs_self_dep);
cw0.set_bit(15, info_fs.uses_discard() || zs_self_dep);
}
cw0.set_bit(16, false /* TODO: DoesGlobalStore */);
cw0.set_field(17..21, 1_u32 /* SassVersion */);
@@ -434,10 +439,16 @@ fn eprint_hex(label: &str, data: &[u32]) {
pub extern "C" fn nak_compile_shader(
nir: *mut nir_shader,
nak: *const nak_compiler,
fs_key: *const nak_fs_key,
) -> *mut nak_shader_bin {
unsafe { nak_postprocess_nir(nir, nak) };
let nir = unsafe { &*nir };
let nak = unsafe { &*nak };
let nir = unsafe { &*nir };
let fs_key = if fs_key.is_null() {
None
} else {
Some(unsafe { &*fs_key })
};
let mut s = nak_shader_from_nir(nir, nak.sm);
+11 -2
View File
@@ -1221,10 +1221,19 @@ nvk_fill_transform_feedback_state(struct nir_shader *nir,
static VkResult
nvk_compile_nir_with_nak(struct nvk_physical_device *pdev,
nir_shader *nir,
const struct nvk_fs_key *fs_key,
const struct nvk_fs_key *nvk_fs_key,
struct nvk_shader *shader)
{
struct nak_shader_bin *bin = nak_compile_shader(nir, pdev->nak);
struct nak_fs_key fs_key_tmp;
const struct nak_fs_key *fs_key = NULL;
if (nir->info.stage == MESA_SHADER_FRAGMENT && nvk_fs_key != NULL) {
fs_key_tmp = (struct nak_fs_key) {
.zs_self_dep = nvk_fs_key->zs_self_dep,
};
fs_key = &fs_key_tmp;
}
struct nak_shader_bin *bin = nak_compile_shader(nir, pdev->nak, fs_key);
shader->stage = nir->info.stage;