mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
rusticl/device: improve advertisement of fp64 support
Enabling fp64 support makes rarely sense, but in case we do claim it, we should also tell if it's a pure software implementation. Signed-off-by: Karol Herbst <kherbst@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22649>
This commit is contained in:
parent
b82004d960
commit
400847a990
2 changed files with 22 additions and 12 deletions
|
|
@ -45,18 +45,23 @@ impl CLInfo<cl_device_info> for cl_device_id {
|
||||||
CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES => {
|
CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES => {
|
||||||
cl_prop::<cl_device_device_enqueue_capabilities>(0)
|
cl_prop::<cl_device_device_enqueue_capabilities>(0)
|
||||||
}
|
}
|
||||||
CL_DEVICE_DOUBLE_FP_CONFIG => {
|
CL_DEVICE_DOUBLE_FP_CONFIG => cl_prop::<cl_device_fp_config>(
|
||||||
cl_prop::<cl_device_fp_config>(if dev.doubles_supported() {
|
if dev.doubles_supported() {
|
||||||
(CL_FP_FMA
|
let mut fp64_config = CL_FP_FMA
|
||||||
| CL_FP_ROUND_TO_NEAREST
|
| CL_FP_ROUND_TO_NEAREST
|
||||||
| CL_FP_ROUND_TO_ZERO
|
| CL_FP_ROUND_TO_ZERO
|
||||||
| CL_FP_ROUND_TO_INF
|
| CL_FP_ROUND_TO_INF
|
||||||
| CL_FP_INF_NAN
|
| CL_FP_INF_NAN
|
||||||
| CL_FP_DENORM) as cl_device_fp_config
|
| CL_FP_DENORM;
|
||||||
|
if dev.doubles_is_softfp() {
|
||||||
|
fp64_config |= CL_FP_SOFT_FLOAT;
|
||||||
|
}
|
||||||
|
fp64_config
|
||||||
} else {
|
} else {
|
||||||
0
|
0
|
||||||
})
|
}
|
||||||
}
|
.into(),
|
||||||
|
),
|
||||||
CL_DEVICE_ENDIAN_LITTLE => cl_prop::<bool>(dev.little_endian()),
|
CL_DEVICE_ENDIAN_LITTLE => cl_prop::<bool>(dev.little_endian()),
|
||||||
CL_DEVICE_ERROR_CORRECTION_SUPPORT => cl_prop::<bool>(false),
|
CL_DEVICE_ERROR_CORRECTION_SUPPORT => cl_prop::<bool>(false),
|
||||||
CL_DEVICE_EXECUTION_CAPABILITIES => {
|
CL_DEVICE_EXECUTION_CAPABILITIES => {
|
||||||
|
|
@ -125,7 +130,9 @@ impl CLInfo<cl_device_info> for cl_device_id {
|
||||||
}
|
}
|
||||||
CL_DEVICE_NAME => cl_prop(dev.screen().name()),
|
CL_DEVICE_NAME => cl_prop(dev.screen().name()),
|
||||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR => cl_prop::<cl_uint>(1),
|
CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR => cl_prop::<cl_uint>(1),
|
||||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE => cl_prop::<cl_uint>(0),
|
CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE => {
|
||||||
|
cl_prop::<cl_uint>(if dev.doubles_supported() { 1 } else { 0 })
|
||||||
|
}
|
||||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT => cl_prop::<cl_uint>(1),
|
CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT => cl_prop::<cl_uint>(1),
|
||||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF => cl_prop::<cl_uint>(0),
|
CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF => cl_prop::<cl_uint>(0),
|
||||||
CL_DEVICE_NATIVE_VECTOR_WIDTH_INT => cl_prop::<cl_uint>(1),
|
CL_DEVICE_NATIVE_VECTOR_WIDTH_INT => cl_prop::<cl_uint>(1),
|
||||||
|
|
|
||||||
|
|
@ -584,17 +584,20 @@ impl Device {
|
||||||
pub fn doubles_supported(&self) -> bool {
|
pub fn doubles_supported(&self) -> bool {
|
||||||
false
|
false
|
||||||
/*
|
/*
|
||||||
if self.screen.param(pipe_cap::PIPE_CAP_DOUBLES) == 0 {
|
|
||||||
return false;
|
self.screen.param(pipe_cap::PIPE_CAP_DOUBLES) == 1
|
||||||
}
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn doubles_is_softfp(&self) -> bool {
|
||||||
let nir_options = self
|
let nir_options = self
|
||||||
.screen
|
.screen
|
||||||
.nir_shader_compiler_options(pipe_shader_type::PIPE_SHADER_COMPUTE);
|
.nir_shader_compiler_options(pipe_shader_type::PIPE_SHADER_COMPUTE);
|
||||||
!bit_check(
|
|
||||||
|
bit_check(
|
||||||
unsafe { *nir_options }.lower_doubles_options as u32,
|
unsafe { *nir_options }.lower_doubles_options as u32,
|
||||||
nir_lower_doubles_options::nir_lower_fp64_full_software as u32,
|
nir_lower_doubles_options::nir_lower_fp64_full_software as u32,
|
||||||
)
|
)
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn long_supported(&self) -> bool {
|
pub fn long_supported(&self) -> bool {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue