summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Desaulniers <ndesaulniers@google.com>2019-11-12 13:29:31 -0800
committerNick Desaulniers <ndesaulniers@google.com>2019-11-12 13:37:25 -0800
commitdde081846ac1c12575e398e6b1c159a6e132e9c6 (patch)
tree7e44f6f89690f3fd1778cafd2250bdc17f582281
parent25afe11d72873090430823335d8ebee8c2425030 (diff)
downloaddisplay-dde081846ac1c12575e398e6b1c159a6e132e9c6.tar.gz
hardware: qcom: sdm845: display: fix -Wimplicit-int-float-conversion
All of the below have loss of precision due to implicit conversions to float (or double). Accept the imprecision with explicit casts. Fixes the following warnings from the compiler upgrade: hardware/qcom/sdm845/display/sdm/libs/core/display_base.cpp:207:56: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] if (gpu_target_layer_dst_xpixels > mixer_attributes_.width || ~ ~~~~~~~~~~~~~~~~~~^~~~~ hardware/qcom/sdm845/display/sdm/libs/core/display_base.cpp:208:54: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] gpu_target_layer_dst_ypixels > mixer_attributes_.height) { ~ ~~~~~~~~~~~~~~~~~~^~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/display_base.cpp:1176:42: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] layer_height), align_x); ^~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/drm/hw_device_drm.cpp:1524:57: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up; ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/resource_default.cpp:472:33: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] if ((src_width > hw_res_info_.max_pipe_width) || (dst_width > hw_res_info_.max_pipe_width)) { ~ ~~~~~~~~~~~~~^~~~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/resource_default.cpp:472:78: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] if ((src_width > hw_res_info_.max_pipe_width) || (dst_width > hw_res_info_.max_pipe_width)) { ~ ~~~~~~~~~~~~~^~~~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/fb/hw_device.cpp:1328:57: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up; ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/drm/hw_tv_drm.cpp:264:67: error: implicit conversion from 'long' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] float hdr_reset_time_start = ((hdr_reset_start.tv_sec*1000) + (hdr_reset_start.tv_usec/1000)); ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/drm/hw_tv_drm.cpp:265:63: error: implicit conversion from 'long' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] float hdr_reset_time_end = ((hdr_reset_end.tv_sec*1000) + (hdr_reset_end.tv_usec/1000)); ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/core/strategy.cpp:162:47: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] float layer_mixer_width = mixer_attributes_.width; ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~^~~~~ hardware/qcom/sdm845/display/sdm/libs/core/strategy.cpp:163:48: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] float layer_mixer_height = mixer_attributes_.height; ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~^~~~~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display.cpp:284:19: error: implicit conversion from 'int' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] return ((c2 * rgb * rgb + c1 * rgb + c0) / kCompensatedMaxRGB); ~ ^~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display.cpp:284:25: error: implicit conversion from 'int' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] return ((c2 * rgb * rgb + c1 * rgb + c0) / kCompensatedMaxRGB); ~ ^~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display.cpp:284:36: error: implicit conversion from 'int' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] return ((c2 * rgb * rgb + c1 * rgb + c0) / kCompensatedMaxRGB); ~ ^~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display.cpp:805:45: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] layer->src_rect.right = layer_buffer->width; ~ ~~~~~~~~~~~~~~^~~~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display.cpp:806:46: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] layer->src_rect.bottom = layer_buffer->height; ~ ~~~~~~~~~~~~~~^~~~~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display_external_test.cpp:628:46: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] layer->src_rect = LayerRect(0, 0, var_info.x_pixels, var_info.y_pixels); ~~~~~~~~~ ~~~~~~~~~^~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display_external_test.cpp:628:65: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] layer->src_rect = LayerRect(0, 0, var_info.x_pixels, var_info.y_pixels); ~~~~~~~~~ ~~~~~~~~~^~~~~~~~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display_external.cpp:169:37: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] uint32_t new_mixer_width = UINT32(mixer_width * FLOAT(1.0f - width_ratio)); ^~~~~~~~~~~ ~ hardware/qcom/sdm845/display/sdm/libs/hwc2/hwc_display_external.cpp:170:38: error: implicit conversion from 'uint32_t' (aka 'unsigned int') to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion] uint32_t new_mixer_height = UINT32(mixer_height * FLOAT(1.0f - height_ratio)); ^~~~~~~~~~~~ ~ Bug: 139945549 Test: mm Change-Id: I926e875e6df43a0d4a66fc1764a53c5b95a4d6a3 Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
-rw-r--r--sdm/libs/core/display_base.cpp6
-rw-r--r--sdm/libs/core/drm/hw_device_drm.cpp2
-rw-r--r--sdm/libs/core/drm/hw_tv_drm.cpp4
-rw-r--r--sdm/libs/core/fb/hw_device.cpp2
-rw-r--r--sdm/libs/core/resource_default.cpp3
-rw-r--r--sdm/libs/core/strategy.cpp4
-rw-r--r--sdm/libs/hwc2/hwc_display.cpp7
-rw-r--r--sdm/libs/hwc2/hwc_display_external.cpp4
-rw-r--r--sdm/libs/hwc2/hwc_display_external_test.cpp3
9 files changed, 19 insertions, 16 deletions
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
index f0efc2d5..d096f24e 100644
--- a/sdm/libs/core/display_base.cpp
+++ b/sdm/libs/core/display_base.cpp
@@ -204,8 +204,8 @@ DisplayError DisplayBase::ValidateGPUTargetParams() {
auto gpu_target_layer_dst_xpixels = out_rect.right - out_rect.left;
auto gpu_target_layer_dst_ypixels = out_rect.bottom - out_rect.top;
- if (gpu_target_layer_dst_xpixels > mixer_attributes_.width ||
- gpu_target_layer_dst_ypixels > mixer_attributes_.height) {
+ if (gpu_target_layer_dst_xpixels > layer_mixer_width ||
+ gpu_target_layer_dst_ypixels > layer_mixer_height) {
DLOGE("GPU target layer dst rect is not with in limits gpu wxh %fx%f, mixer wxh %dx%d",
gpu_target_layer_dst_xpixels, gpu_target_layer_dst_ypixels,
mixer_attributes_.width, mixer_attributes_.height);
@@ -1173,7 +1173,7 @@ bool DisplayBase::NeedsMixerReconfiguration(LayerStack *layer_stack, uint32_t *n
// Align the width and height according to fb's aspect ratio
*new_mixer_width = FloorToMultipleOf(UINT32((FLOAT(fb_width) / FLOAT(fb_height)) *
- layer_height), align_x);
+ FLOAT(layer_height)), align_x);
*new_mixer_height = FloorToMultipleOf(layer_height, align_y);
LayerRect dst_domain = {0.0f, 0.0f, FLOAT(*new_mixer_width), FLOAT(*new_mixer_height)};
diff --git a/sdm/libs/core/drm/hw_device_drm.cpp b/sdm/libs/core/drm/hw_device_drm.cpp
index 5d6dfde5..aa0e13c5 100644
--- a/sdm/libs/core/drm/hw_device_drm.cpp
+++ b/sdm/libs/core/drm/hw_device_drm.cpp
@@ -1521,7 +1521,7 @@ DisplayError HWDeviceDRM::SetMixerAttributes(const HWMixerAttributes &mixer_attr
float scale_x = FLOAT(display_attributes_[index].x_pixels) / FLOAT(mixer_attributes.width);
float scale_y = FLOAT(display_attributes_[index].y_pixels) / FLOAT(mixer_attributes.height);
- float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up;
+ float max_scale_up = FLOAT(hw_resource_.hw_dest_scalar_info.max_scale_up);
if (scale_x > max_scale_up || scale_y > max_scale_up) {
DLOGW(
"Up scaling ratio exceeds for destination scalar upscale limit scale_x %f scale_y %f "
diff --git a/sdm/libs/core/drm/hw_tv_drm.cpp b/sdm/libs/core/drm/hw_tv_drm.cpp
index 8e141e32..da1a1797 100644
--- a/sdm/libs/core/drm/hw_tv_drm.cpp
+++ b/sdm/libs/core/drm/hw_tv_drm.cpp
@@ -261,8 +261,8 @@ DisplayError HWTVDRM::UpdateHDRMetaData(HWLayers *hw_layers) {
// metadata. This will be replaced with an idle timer implementation in the future.
if (reset_hdr_flag) {
gettimeofday(&hdr_reset_end, NULL);
- float hdr_reset_time_start = ((hdr_reset_start.tv_sec*1000) + (hdr_reset_start.tv_usec/1000));
- float hdr_reset_time_end = ((hdr_reset_end.tv_sec*1000) + (hdr_reset_end.tv_usec/1000));
+ float hdr_reset_time_start = FLOAT((hdr_reset_start.tv_sec*1000) + (hdr_reset_start.tv_usec/1000));
+ float hdr_reset_time_end = FLOAT((hdr_reset_end.tv_sec*1000) + (hdr_reset_end.tv_usec/1000));
if (((hdr_reset_time_end-hdr_reset_time_start)/1000) >= MIN_HDR_RESET_WAITTIME) {
memset(&hdr_metadata_, 0, sizeof(hdr_metadata_));
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
index 148f866e..c7a004c5 100644
--- a/sdm/libs/core/fb/hw_device.cpp
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -1325,7 +1325,7 @@ DisplayError HWDevice::SetMixerAttributes(const HWMixerAttributes &mixer_attribu
float scale_x = FLOAT(display_attributes_.x_pixels) / FLOAT(mixer_attributes.width);
float scale_y = FLOAT(display_attributes_.y_pixels) / FLOAT(mixer_attributes.height);
- float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up;
+ float max_scale_up = FLOAT(hw_resource_.hw_dest_scalar_info.max_scale_up);
if (scale_x > max_scale_up || scale_y > max_scale_up) {
DLOGW_IF(kTagDriverConfig, "Up scaling ratio exceeds for destination scalar upscale " \
"limit scale_x %f scale_y %f max_scale_up %f", scale_x, scale_y, max_scale_up);
diff --git a/sdm/libs/core/resource_default.cpp b/sdm/libs/core/resource_default.cpp
index e8cce43f..6dd70266 100644
--- a/sdm/libs/core/resource_default.cpp
+++ b/sdm/libs/core/resource_default.cpp
@@ -467,9 +467,10 @@ DisplayError ResourceDefault::SrcSplitConfig(DisplayResourceContext *display_res
HWPipeInfo *right_pipe = &layer_config->right_pipe;
float src_width = src_rect.right - src_rect.left;
float dst_width = dst_rect.right - dst_rect.left;
+ float fmax_pipe_width = FLOAT(hw_res_info_.max_pipe_width);
// Layer cannot qualify for SrcSplit if source or destination width exceeds max pipe width.
- if ((src_width > hw_res_info_.max_pipe_width) || (dst_width > hw_res_info_.max_pipe_width)) {
+ if ((src_width > fmax_pipe_width) || (dst_width > fmax_pipe_width)) {
SplitRect(src_rect, dst_rect, &left_pipe->src_roi, &left_pipe->dst_roi, &right_pipe->src_roi,
&right_pipe->dst_roi);
left_pipe->valid = true;
diff --git a/sdm/libs/core/strategy.cpp b/sdm/libs/core/strategy.cpp
index d6820704..a2a3ba2c 100644
--- a/sdm/libs/core/strategy.cpp
+++ b/sdm/libs/core/strategy.cpp
@@ -159,8 +159,8 @@ void Strategy::GenerateROI() {
return;
}
- float layer_mixer_width = mixer_attributes_.width;
- float layer_mixer_height = mixer_attributes_.height;
+ float layer_mixer_width = FLOAT(mixer_attributes_.width);
+ float layer_mixer_height = FLOAT(mixer_attributes_.height);
if (!hw_resource_info_.is_src_split && display_attributes_.is_device_split) {
split_display = true;
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
index 45effc06..4ba4a274 100644
--- a/sdm/libs/hwc2/hwc_display.cpp
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -281,7 +281,8 @@ void WhiteCompensation::CalculateRGBRatio() {
// g_ratio = g/kCompensatedMaxRGB
// b_ratio = b/kCompensatedMaxRGB
auto rgb_ratio = [=](int rgb, float c2, float c1, float c0) {
- return ((c2 * rgb * rgb + c1 * rgb + c0) / kCompensatedMaxRGB);
+ float frgb = FLOAT(rgb);
+ return ((c2 * frgb * frgb + c1 * frgb + c0) / kCompensatedMaxRGB);
};
compensated_red_ratio_ =
@@ -802,8 +803,8 @@ void HWCDisplay::BuildLayerStack() {
layer_buffer->release_fence_fd = -1;
layer->src_rect.left = 0;
layer->src_rect.top = 0;
- layer->src_rect.right = layer_buffer->width;
- layer->src_rect.bottom = layer_buffer->height;
+ layer->src_rect.right = FLOAT(layer_buffer->width);
+ layer->src_rect.bottom = FLOAT(layer_buffer->height);
}
if (hwc_layer->HasMetaDataRefreshRate() && layer->frame_rate > metadata_refresh_rate_) {
diff --git a/sdm/libs/hwc2/hwc_display_external.cpp b/sdm/libs/hwc2/hwc_display_external.cpp
index 21a9284a..90dd2143 100644
--- a/sdm/libs/hwc2/hwc_display_external.cpp
+++ b/sdm/libs/hwc2/hwc_display_external.cpp
@@ -166,8 +166,8 @@ void HWCDisplayExternal::ApplyScanAdjustment(hwc_rect_t *display_frame) {
return;
}
- uint32_t new_mixer_width = UINT32(mixer_width * FLOAT(1.0f - width_ratio));
- uint32_t new_mixer_height = UINT32(mixer_height * FLOAT(1.0f - height_ratio));
+ uint32_t new_mixer_width = UINT32(FLOAT(mixer_width) * (1.0f - width_ratio));
+ uint32_t new_mixer_height = UINT32(FLOAT(mixer_height) * (1.0f - height_ratio));
int x_offset = INT((FLOAT(mixer_width) * width_ratio) / 2.0f);
int y_offset = INT((FLOAT(mixer_height) * height_ratio) / 2.0f);
diff --git a/sdm/libs/hwc2/hwc_display_external_test.cpp b/sdm/libs/hwc2/hwc_display_external_test.cpp
index 8551854c..a6fcb08e 100644
--- a/sdm/libs/hwc2/hwc_display_external_test.cpp
+++ b/sdm/libs/hwc2/hwc_display_external_test.cpp
@@ -625,7 +625,8 @@ int HWCDisplayExternalTest::InitLayer(Layer *layer) {
GetDisplayAttributesForConfig(INT32(active_config), &var_info);
layer->flags.updating = 1;
- layer->src_rect = LayerRect(0, 0, var_info.x_pixels, var_info.y_pixels);
+ layer->src_rect = LayerRect(0, 0, FLOAT(var_info.x_pixels),
+ FLOAT(var_info.y_pixels));
layer->dst_rect = layer->src_rect;
layer->frame_rate = var_info.fps;
layer->blending = kBlendingPremultiplied;