mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
clover: Enable cl_khr_fp64 for devices that support doubles v4
v2:
- Report correct values for CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE
and CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE.
- Only define cl_khr_fp64 if the extension is supported.
- Remove trailing space from extension string.
- Rename device query function from cl_khr_fp64() to
has_doubles().
v3:
- Return 0 for device::doubled_fp_confg() when doubles aren't
supported.
v4:
- Remove device query for double fp_config.
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
parent
8d8ca64c28
commit
c97e902a1a
3 changed files with 25 additions and 3 deletions
|
|
@ -145,7 +145,7 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
|
|||
break;
|
||||
|
||||
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:
|
||||
buf.as_scalar<cl_uint>() = 2;
|
||||
buf.as_scalar<cl_uint>() = dev.has_doubles() ? 2 : 0;
|
||||
break;
|
||||
|
||||
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF:
|
||||
|
|
@ -205,6 +205,21 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
|
|||
CL_FP_DENORM | CL_FP_INF_NAN | CL_FP_ROUND_TO_NEAREST;
|
||||
break;
|
||||
|
||||
case CL_DEVICE_DOUBLE_FP_CONFIG:
|
||||
if (dev.has_doubles())
|
||||
// This is the "mandated minimum double precision floating-point
|
||||
// capability"
|
||||
buf.as_scalar<cl_device_fp_config>() =
|
||||
CL_FP_FMA
|
||||
| CL_FP_ROUND_TO_NEAREST
|
||||
| CL_FP_ROUND_TO_ZERO
|
||||
| CL_FP_ROUND_TO_INF
|
||||
| CL_FP_INF_NAN
|
||||
| CL_FP_DENORM;
|
||||
else
|
||||
buf.as_scalar<cl_device_fp_config>() = 0;
|
||||
break;
|
||||
|
||||
case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE:
|
||||
buf.as_scalar<cl_device_mem_cache_type>() = CL_NONE;
|
||||
break;
|
||||
|
|
@ -283,7 +298,7 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
|
|||
break;
|
||||
|
||||
case CL_DEVICE_EXTENSIONS:
|
||||
buf.as_string() = "";
|
||||
buf.as_string() = dev.has_doubles() ? "cl_khr_fp64" : "";
|
||||
break;
|
||||
|
||||
case CL_DEVICE_PLATFORM:
|
||||
|
|
@ -315,7 +330,7 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
|
|||
break;
|
||||
|
||||
case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE:
|
||||
buf.as_scalar<cl_uint>() = 2;
|
||||
buf.as_scalar<cl_uint>() = dev.has_doubles() ? 2 : 0;
|
||||
break;
|
||||
|
||||
case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF:
|
||||
|
|
|
|||
|
|
@ -173,6 +173,12 @@ device::image_support() const {
|
|||
PIPE_COMPUTE_CAP_IMAGES_SUPPORTED)[0];
|
||||
}
|
||||
|
||||
bool
|
||||
device::has_doubles() const {
|
||||
return pipe->get_shader_param(pipe, PIPE_SHADER_COMPUTE,
|
||||
PIPE_SHADER_CAP_DOUBLES);
|
||||
}
|
||||
|
||||
std::vector<size_t>
|
||||
device::max_block_size() const {
|
||||
auto v = get_compute_param<uint64_t>(pipe, PIPE_COMPUTE_CAP_MAX_BLOCK_SIZE);
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ namespace clover {
|
|||
cl_uint max_clock_frequency() const;
|
||||
cl_uint max_compute_units() const;
|
||||
bool image_support() const;
|
||||
bool has_doubles() const;
|
||||
|
||||
std::vector<size_t> max_block_size() const;
|
||||
std::string device_name() const;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue