From 7f2395046f5e0b09821a22d45bf22ce41f0b09cb Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 25 Aug 2021 13:00:51 -0700 Subject: [PATCH] anv: Advertise support for shaderBufferFloat32AtomicAdd Rework: (Sagar) - Enable shaderBufferFloat32AtomicAdd for XeHPG Reviewed-by: Sagar Ghuge Reviewed-by: Jordan Justen Part-of: --- src/intel/vulkan/anv_device.c | 2 +- src/intel/vulkan/anv_nir_apply_pipeline_layout.c | 3 +++ src/intel/vulkan/anv_pipeline.c | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index e37c776f14e..6baf64f46e7 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -1708,7 +1708,7 @@ void anv_GetPhysicalDeviceFeatures2( case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT: { VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *features = (void *)ext; features->shaderBufferFloat32Atomics = true; - features->shaderBufferFloat32AtomicAdd = false; + features->shaderBufferFloat32AtomicAdd = pdevice->info.has_lsc; features->shaderBufferFloat64Atomics = false; features->shaderBufferFloat64AtomicAdd = false; features->shaderSharedFloat32Atomics = true; diff --git a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c index efaf00a5df8..8c342235202 100644 --- a/src/intel/vulkan/anv_nir_apply_pipeline_layout.c +++ b/src/intel/vulkan/anv_nir_apply_pipeline_layout.c @@ -143,6 +143,7 @@ get_used_bindings(UNUSED nir_builder *_b, nir_instr *instr, void *_state) case nir_intrinsic_image_deref_atomic_xor: case nir_intrinsic_image_deref_atomic_exchange: case nir_intrinsic_image_deref_atomic_comp_swap: + case nir_intrinsic_image_deref_atomic_fadd: case nir_intrinsic_image_deref_size: case nir_intrinsic_image_deref_samples: case nir_intrinsic_image_deref_load_param_intel: @@ -819,6 +820,7 @@ lower_direct_buffer_instr(nir_builder *b, nir_instr *instr, void *_state) case nir_intrinsic_deref_atomic_xor: case nir_intrinsic_deref_atomic_exchange: case nir_intrinsic_deref_atomic_comp_swap: + case nir_intrinsic_deref_atomic_fadd: case nir_intrinsic_deref_atomic_fmin: case nir_intrinsic_deref_atomic_fmax: case nir_intrinsic_deref_atomic_fcomp_swap: @@ -1350,6 +1352,7 @@ apply_pipeline_layout(nir_builder *b, nir_instr *instr, void *_state) case nir_intrinsic_image_deref_atomic_xor: case nir_intrinsic_image_deref_atomic_exchange: case nir_intrinsic_image_deref_atomic_comp_swap: + case nir_intrinsic_image_deref_atomic_fadd: case nir_intrinsic_image_deref_size: case nir_intrinsic_image_deref_samples: case nir_intrinsic_image_deref_load_param_intel: diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index d56db49ba52..70eaa0eab37 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -112,6 +112,7 @@ anv_shader_compile_to_nir(struct anv_device *device, .device_group = true, .draw_parameters = true, .float16 = pdevice->info.ver >= 8, + .float32_atomic_add = pdevice->info.has_lsc, .float32_atomic_min_max = pdevice->info.ver >= 9, .float64 = pdevice->info.ver >= 8, .fragment_shader_sample_interlock = pdevice->info.ver >= 9,