mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 08:40:11 +01:00
nak: Implement VK_KHR_shader_terminate_invocation
Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
parent
c32b73fdf2
commit
09d3871267
2 changed files with 16 additions and 2 deletions
|
|
@ -1374,15 +1374,23 @@ impl<'a> ShaderFromNir<'a> {
|
|||
data: data,
|
||||
});
|
||||
}
|
||||
nir_intrinsic_demote | nir_intrinsic_discard => {
|
||||
nir_intrinsic_demote
|
||||
| nir_intrinsic_discard
|
||||
| nir_intrinsic_terminate => {
|
||||
if let ShaderIoInfo::Fragment(info) = &mut self.info.io {
|
||||
info.uses_kill = true;
|
||||
} else {
|
||||
panic!("OpKill is only available in fragment shaders");
|
||||
}
|
||||
b.push_op(OpKill {});
|
||||
|
||||
if intrin.intrinsic == nir_intrinsic_terminate {
|
||||
b.push_op(OpExit {});
|
||||
}
|
||||
}
|
||||
nir_intrinsic_demote_if | nir_intrinsic_discard_if => {
|
||||
nir_intrinsic_demote_if
|
||||
| nir_intrinsic_discard_if
|
||||
| nir_intrinsic_terminate_if => {
|
||||
if let ShaderIoInfo::Fragment(info) = &mut self.info.io {
|
||||
info.uses_kill = true;
|
||||
} else {
|
||||
|
|
@ -1390,6 +1398,10 @@ impl<'a> ShaderFromNir<'a> {
|
|||
}
|
||||
let cond = self.get_ssa(&srcs[0].as_def())[0];
|
||||
b.predicate(cond.into()).push_op(OpKill {});
|
||||
|
||||
if intrin.intrinsic == nir_intrinsic_terminate_if {
|
||||
b.predicate(cond.into()).push_op(OpExit {});
|
||||
}
|
||||
}
|
||||
nir_intrinsic_global_atomic => {
|
||||
let bit_size = intrin.def.bit_size();
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ nvk_get_device_extensions(const struct nv_device_info *info,
|
|||
.KHR_shader_clock = true,
|
||||
.KHR_shader_draw_parameters = true,
|
||||
.KHR_shader_non_semantic_info = true,
|
||||
.KHR_shader_terminate_invocation = true,
|
||||
.KHR_spirv_1_4 = true,
|
||||
.KHR_storage_buffer_storage_class = true,
|
||||
.KHR_timeline_semaphore = true,
|
||||
|
|
@ -245,6 +246,7 @@ nvk_get_device_features(const struct nv_device_info *info,
|
|||
.descriptorBindingInlineUniformBlockUpdateAfterBind = true,
|
||||
.privateData = true,
|
||||
.shaderDemoteToHelperInvocation = true,
|
||||
.shaderTerminateInvocation = true,
|
||||
.dynamicRendering = true,
|
||||
.maintenance4 = true,
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue