Ping (for the series)?

Roland

Am 09.11.2017 um 20:00 schrieb srol...@vmware.com:
> From: Roland Scheidegger <srol...@vmware.com>
> 
> Float rts were always set as unorm instead of float.
> Not sure of the consequences, but at least it looks like the blend clamp
> would have been enabled, which is against the rules (only eg really bothered
> to even attempt to specify this correctly, r600 always used clamp anyway).
> Albeit r600 (not r700) setup still looks bugged to me due to never setting
> BLEND_FLOAT32 which must be set according to docs...
> Not sure if the hw really cares, no piglit change (on eg/juniper).
> ---
>  src/gallium/drivers/r600/evergreen_state.c |  7 ++++++-
>  src/gallium/drivers/r600/r600_state.c      | 10 +++++++++-
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/r600/evergreen_state.c 
> b/src/gallium/drivers/r600/evergreen_state.c
> index ef323bf4f6..e724cb157f 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -1042,7 +1042,7 @@ static void evergreen_set_color_surface_buffer(struct 
> r600_context *rctx,
>               }
>       }
>       ntype = V_028C70_NUMBER_UNORM;
> -             if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
> +     if (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB)
>               ntype = V_028C70_NUMBER_SRGB;
>       else if (desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED) {
>               if (desc->channel[i].normalized)
> @@ -1054,7 +1054,10 @@ static void evergreen_set_color_surface_buffer(struct 
> r600_context *rctx,
>                       ntype = V_028C70_NUMBER_UNORM;
>               else if (desc->channel[i].pure_integer)
>                       ntype = V_028C70_NUMBER_UINT;
> +     } else if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
> +             ntype = V_028C70_NUMBER_FLOAT;
>       }
> +
>       pitch = (pitch / 8) - 1;
>       color->pitch = S_028C64_PITCH_TILE_MAX(pitch);
>  
> @@ -1180,6 +1183,8 @@ static void evergreen_set_color_surface_common(struct 
> r600_context *rctx,
>                       ntype = V_028C70_NUMBER_UNORM;
>               else if (desc->channel[i].pure_integer)
>                       ntype = V_028C70_NUMBER_UINT;
> +     } else if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
> +             ntype = V_028C70_NUMBER_FLOAT;
>       }
>  
>       if (R600_BIG_ENDIAN)
> diff --git a/src/gallium/drivers/r600/r600_state.c 
> b/src/gallium/drivers/r600/r600_state.c
> index db3d6db70b..f024987a30 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -817,7 +817,7 @@ static void r600_init_color_surface(struct r600_context 
> *rctx,
>       unsigned offset;
>       const struct util_format_description *desc;
>       int i;
> -     bool blend_bypass = 0, blend_clamp = 1, do_endian_swap = FALSE;
> +     bool blend_bypass = 0, blend_clamp = 0, do_endian_swap = FALSE;
>  
>       if (rtex->db_compatible && !r600_can_sample_zs(rtex, false)) {
>               r600_init_flushed_depth_texture(&rctx->b.b, surf->base.texture, 
> NULL);
> @@ -869,6 +869,8 @@ static void r600_init_color_surface(struct r600_context 
> *rctx,
>                       ntype = V_0280A0_NUMBER_UNORM;
>               else if (desc->channel[i].pure_integer)
>                       ntype = V_0280A0_NUMBER_UINT;
> +     } else if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) {
> +             ntype = V_0280A0_NUMBER_FLOAT;
>       }
>  
>       if (R600_BIG_ENDIAN)
> @@ -883,6 +885,11 @@ static void r600_init_color_surface(struct r600_context 
> *rctx,
>  
>       endian = r600_colorformat_endian_swap(format, do_endian_swap);
>  
> +     /* blend clamp should be set for all NORM/SRGB types */
> +     if (ntype == V_0280A0_NUMBER_UNORM || ntype == V_0280A0_NUMBER_SNORM ||
> +         ntype == V_0280A0_NUMBER_SRGB)
> +             blend_clamp = 1;
> +
>       /* set blend bypass according to docs if SINT/UINT or
>          8/24 COLOR variants */
>       if (ntype == V_0280A0_NUMBER_UINT || ntype == V_0280A0_NUMBER_SINT ||
> @@ -916,6 +923,7 @@ static void r600_init_color_surface(struct r600_context 
> *rctx,
>                    ntype != V_0280A0_NUMBER_UINT &&
>                    ntype != V_0280A0_NUMBER_SINT) &&
>                   G_0280A0_BLEND_CLAMP(color_info) &&
> +                 /* XXX this condition is always true since BLEND_FLOAT32 is 
> never set (bug?). */
>                   !G_0280A0_BLEND_FLOAT32(color_info)) {
>                       color_info |= 
> S_0280A0_SOURCE_FORMAT(V_0280A0_EXPORT_NORM);
>                       surf->export_16bpc = true;
> 

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to