diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index de2cb463622..001594f2780 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -1712,14 +1712,18 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so, util_format_description(format); struct pan_buffer_view bview = { .format = format, - .astc.narrow = - desc->layout == UTIL_FORMAT_LAYOUT_ASTC && - so->base.astc_decode_format == PIPE_ASTC_DECODE_FORMAT_UNORM8, .width_el = MIN2(so->base.u.buf.size / util_format_get_blocksize(format), PAN_MAX_TEXEL_BUFFER_ELEMENTS), .base = prsrc->image.data.base + so->base.u.buf.offset, }; + + if (desc->layout == UTIL_FORMAT_LAYOUT_ASTC) { + bview.astc.narrow = + so->base.astc_decode_format == PIPE_ASTC_DECODE_FORMAT_UNORM8; + bview.astc.hdr = util_format_is_astc_hdr(format); + } + #if PAN_ARCH >= 9 unsigned payload_size = pan_size(PLANE); #elif PAN_ARCH >= 6 @@ -1826,9 +1830,10 @@ panfrost_create_sampler_view_bo(struct panfrost_sampler_view *so, } } - if (desc->layout == UTIL_FORMAT_LAYOUT_ASTC && - so->base.astc_decode_format == PIPE_ASTC_DECODE_FORMAT_UNORM8) { - iview.astc.narrow = true; + if (desc->layout == UTIL_FORMAT_LAYOUT_ASTC) { + iview.astc.narrow = + so->base.astc_decode_format == PIPE_ASTC_DECODE_FORMAT_UNORM8; + iview.astc.hdr = util_format_is_astc_hdr(format); } GENX(pan_sampled_texture_emit)(&iview, tex, &payload); diff --git a/src/panfrost/lib/pan_desc.h b/src/panfrost/lib/pan_desc.h index b2fb30a28e8..17e7e0079cf 100644 --- a/src/panfrost/lib/pan_desc.h +++ b/src/panfrost/lib/pan_desc.h @@ -38,6 +38,7 @@ struct pan_buffer_view { enum pipe_format format; struct { unsigned narrow; + unsigned hdr; } astc; unsigned width_el; uint64_t base; diff --git a/src/panfrost/lib/pan_image.h b/src/panfrost/lib/pan_image.h index b6407ee6a91..c519bc42459 100644 --- a/src/panfrost/lib/pan_image.h +++ b/src/panfrost/lib/pan_image.h @@ -60,6 +60,7 @@ struct pan_image_view { struct { unsigned narrow; + unsigned hdr; } astc; }; diff --git a/src/panfrost/lib/pan_texture.c b/src/panfrost/lib/pan_texture.c index e46c5457b7c..d6f2773dc09 100644 --- a/src/panfrost/lib/pan_texture.c +++ b/src/panfrost/lib/pan_texture.c @@ -453,8 +453,7 @@ pan_emit_bview_plane(const struct pan_buffer_view *bview, void *payload) bool srgb = (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB); - /* Mesa does not advertise _HDR formats yet */ - cfg.astc.decode_hdr = false; + cfg.astc.decode_hdr = bview->astc.hdr; /* sRGB formats decode to RGBA8 sRGB, which is narrow. * @@ -539,8 +538,7 @@ pan_emit_iview_plane(const struct pan_image_view *iview, bool srgb = (desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB); - /* Mesa does not advertise _HDR formats yet */ - cfg.astc.decode_hdr = false; + cfg.astc.decode_hdr = iview->astc.hdr; /* sRGB formats decode to RGBA8 sRGB, which is narrow. *