The imageAtomic<Op> functions added by GL_NV_shader_atomic_fp16_vector require the argument to be cast to f16vec4, however by default that throws the following error:
error: 'built-in function: float16 types can only be in uniform block or buffer storage' : required extension not requested: Possible extensions include:
GL_AMD_gpu_shader_half_float
GL_EXT_shader_explicit_arithmetic_types
GL_EXT_shader_explicit_arithmetic_types_float16
Enabling GL_EXT_shader_explicit_arithmetic_types_float16 does fix the error, however it leads to a validation error during runtime because my GTX 970 doesn't support arithmetic float16 operations.
This might be an oversight in the spec (I'm not sure if the generated SPIR-V is even valid if it doesn't declare Float16 support) but in case it's not, using f16vec4 as a constructor in imageAtomic<Op> should not throw an error with GL_NV_shader_atomic_fp16_vector and/or GL_EXT_shader_16bit_storage.
The
imageAtomic<Op>
functions added byGL_NV_shader_atomic_fp16_vector
require the argument to be cast to f16vec4, however by default that throws the following error:Enabling
GL_EXT_shader_explicit_arithmetic_types_float16
does fix the error, however it leads to a validation error during runtime because my GTX 970 doesn't support arithmetic float16 operations.This might be an oversight in the spec (I'm not sure if the generated SPIR-V is even valid if it doesn't declare Float16 support) but in case it's not, using f16vec4 as a constructor in
imageAtomic<Op>
should not throw an error withGL_NV_shader_atomic_fp16_vector
and/orGL_EXT_shader_16bit_storage
.