[Mesa-dev] [PATCH 1/2 v2] blorp: Don't try to use R32_UNORM for R24_UNORM_X8_TYPELESS rendering.
Jason Ekstrand
jason at jlekstrand.net
Sat Aug 11 13:25:00 UTC 2018
This needs a fixes tag. With that added, rb. I really have no idea how
this worked before. I was sure I had it working and that it was being
tested but it's definitely bogus. :-(
On August 10, 2018 23:57:11 Kenneth Graunke <kenneth at whitecape.org> wrote:
> The hardware doesn't support rendering to R24_UNORM_X8_TYPELESS, so
> Jason decided to fake it with a bit of shader math and R32_UNORM RTs.
>
> The only problem is that R32_UNORM isn't renderable either...so we've
> just traded one bad format for another.
>
> This patch makes us use R32_UINT instead.
> ---
> src/intel/blorp/blorp_blit.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> v2, now without the (iand value factor).
>
> diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c
> index c85ec8543a9..cb07092ae88 100644
> --- a/src/intel/blorp/blorp_blit.c
> +++ b/src/intel/blorp/blorp_blit.c
> @@ -984,14 +984,14 @@ convert_color(struct nir_builder *b, nir_ssa_def *color,
> nir_ssa_def *value;
>
> if (key->dst_format == ISL_FORMAT_R24_UNORM_X8_TYPELESS) {
> - /* The destination image is bound as R32_UNORM but the data needs to be
> + /* The destination image is bound as R32_UINT but the data needs to be
> * in R24_UNORM_X8_TYPELESS. The bottom 24 are the actual data and the
> * top 8 need to be zero. We can accomplish this by simply multiplying
> * by a factor to scale things down.
> */
> - float factor = (float)((1 << 24) - 1) / (float)UINT32_MAX;
> - value = nir_fmul(b, nir_fsat(b, nir_channel(b, color, 0)),
> - nir_imm_float(b, factor));
> + unsigned factor = (1 << 24) - 1;
> + value = nir_fsat(b, nir_channel(b, color, 0));
> + value = nir_f2i32(b, nir_fmul(b, value, nir_imm_float(b, factor)));
> } else if (key->dst_format == ISL_FORMAT_L8_UNORM_SRGB) {
> value = nir_format_linear_to_srgb(b, nir_channel(b, color, 0));
> } else if (key->dst_format == ISL_FORMAT_R8G8B8_UNORM_SRGB) {
> @@ -1976,7 +1976,7 @@ try_blorp_blit(struct blorp_batch *batch,
> isl_format_rgbx_to_rgba(params->dst.view.format);
> } else if (params->dst.view.format == ISL_FORMAT_R24_UNORM_X8_TYPELESS) {
> wm_prog_key->dst_format = params->dst.view.format;
> - params->dst.view.format = ISL_FORMAT_R32_UNORM;
> + params->dst.view.format = ISL_FORMAT_R32_UINT;
> } else if (params->dst.view.format == ISL_FORMAT_A4B4G4R4_UNORM) {
> params->dst.view.swizzle =
> isl_swizzle_compose(params->dst.view.swizzle,
> --
> 2.18.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list