google / shaderc

A collection of tools, libraries, and tests for Vulkan shader compilation.
Other
1.86k stars 363 forks source link

glslc: GL_NV_shader_atomic_fp16_vector requires float16 arithmetic type #1450

Open Botondar opened 3 weeks ago

Botondar commented 3 weeks ago

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.