mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-03 17:38:25 +02:00
gallium: add fp16_no_denorms cap
Rusticl has to know whether a driver always flushes fp16 denorms in order to set the correct nir float execution mode. Reviewed-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41703>
This commit is contained in:
parent
5a8d4b28b5
commit
d1af3d95c7
4 changed files with 11 additions and 2 deletions
|
|
@ -275,6 +275,7 @@ fd_init_shader_caps(struct fd_screen *screen)
|
|||
(is_a5xx(screen) || is_a6xx(screen)) &&
|
||||
(i == MESA_SHADER_COMPUTE || i == MESA_SHADER_FRAGMENT) &&
|
||||
!FD_DBG(NOFP16);
|
||||
caps->fp16_no_denorms = caps->fp16 && screen->gen < 8;
|
||||
caps->glsl_16bit_load_dst = true;
|
||||
|
||||
caps->max_texture_samplers =
|
||||
|
|
|
|||
|
|
@ -631,6 +631,8 @@ zink_init_shader_caps(struct zink_screen *screen)
|
|||
screen->info.feats12.shaderFloat16 ||
|
||||
(screen->info.have_KHR_shader_float16_int8 &&
|
||||
screen->info.shader_float16_int8_feats.shaderFloat16);
|
||||
caps->fp16_no_denorms = caps->fp16 && !screen->info.props12.shaderDenormPreserveFloat16
|
||||
&& screen->info.props12.shaderDenormFlushToZeroFloat16;
|
||||
caps->glsl_16bit_load_dst = true;
|
||||
|
||||
caps->int16 = screen->info.feats.features.shaderInt16;
|
||||
|
|
|
|||
|
|
@ -1389,12 +1389,17 @@ impl DeviceBase {
|
|||
}
|
||||
|
||||
pub fn spirv_to_nir_opts(&self) -> SPIRVToNirOptions {
|
||||
let spirv_float_controls = float_controls::FLOAT_CONTROLS_DENORM_PRESERVE_FP16
|
||||
| float_controls::FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32
|
||||
let mut spirv_float_controls = float_controls::FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32
|
||||
| float_controls::FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP16
|
||||
| float_controls::FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP32
|
||||
| float_controls::FLOAT_CONTROLS_ROUNDING_MODE_RTE_FP64;
|
||||
|
||||
if self.shader_caps().fp16_no_denorms {
|
||||
spirv_float_controls |= float_controls::FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP16;
|
||||
} else {
|
||||
spirv_float_controls |= float_controls::FLOAT_CONTROLS_DENORM_PRESERVE_FP16;
|
||||
}
|
||||
|
||||
SPIRVToNirOptions {
|
||||
caps: &self.spirv_caps,
|
||||
address_bits: self.address_bits(),
|
||||
|
|
|
|||
|
|
@ -802,6 +802,7 @@ struct pipe_shader_caps {
|
|||
bool fp16;
|
||||
bool fp16_derivatives;
|
||||
bool fp16_const_buffers;
|
||||
bool fp16_no_denorms;
|
||||
bool int16;
|
||||
bool glsl_16bit_consts;
|
||||
bool glsl_16bit_load_dst; /* fp16 or int16 is AND'ed with this */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue