Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Sat 13 May 2017, Jason Ekstrand wrote: > On Fri, May 12, 2017 at 3:35 PM, Chad Versace> wrote: > > > On Thu 11 May 2017, Jason Ekstrand wrote: > > > On Thu, May 11, 2017 at 9:08 PM, Chad Versace > > > wrote: > > > > > > > On Thu 11 May 2017, Jason Ekstrand wrote: > > > > > On Thu, May 11, 2017 at 7:03 AM, Pohjolainen, Topi < > > > > > topi.pohjolai...@gmail.com> wrote: > > > > > > > > > > > On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > > > > > > > --- > > > > > > > src/intel/isl/isl_gen6.c | 30 -- > > > > > > > 1 file changed, 12 insertions(+), 18 deletions(-) > > > > > > > > > > > > > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > > > > > > > index b746903..0de9620 100644 > > > > > > > --- a/src/intel/isl/isl_gen6.c > > > > > > > +++ b/src/intel/isl/isl_gen6.c > > > > > > > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const > > struct > > > > > > isl_device *dev, > > > > > > > *| format | halign | valign | > > > > > > > *++++ > > > > > > > *| YUV 4:2:2 formats | 4 | * | > > > > > > > +*| BC1-5 | 4 | 4 | > > > > > > > +*| FXT1 | 8 | 4 | > > > > > > > *| uncompressed formats | 4 | * | > > > > > > > *++++ > > > > > > > * > > > > > > > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const > > > > struct > > > > > > isl_device *dev, > > > > > > > */ > > > > > > > > > > > > > > if (isl_format_is_compressed(info->format)) { > > > > > > > + /* Compressed formats have an alignment equal to their > > block > > > > size > > > > > > */ > > > > > > >*image_align_el = isl_extent3d(1, 1, 1); > > > > > > >return; > > > > > > > } > > > > > > > > > > > > > > - if (isl_format_is_yuv(info->format)) { > > > > > > > - *image_align_el = isl_extent3d(4, 2, 1); > > > > > > > - return; > > > > > > > - } > > > > > > > - > > > > > > > - if (info->samples > 1) { > > > > > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > > > > > - return; > > > > > > > - } > > > > > > > - > > > > > > > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > > > > > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { > > > > > > > > > > > > Maybe mention in the commit that we drop this as it is always > > false on > > > > > > gen6+? > > > > > > In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" > > > > > > > > > > > > > > > > No, I dropped it not because we always use separate stencil but > > because > > > > > it's redundant with the regular depth case. The PRM says to use a > > 4x4 > > > > > alignment for all depth buffers but 4x2 for separate stencil. > > Combined > > > > > depth-stencil falls under the "depth" case so I didn't think we > > needed to > > > > > call it out explicitly. > > > > > > > > I admit that the condition I wrote > > > > > > > > if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > > !ISL_DEV_USE_SEPARATE_STENCIL(dev)) > > > > > > > > was poorly chosen. I should've written it without relying on > > > > ISL_DEV_USE_SEPARATE_STENCIL. > > > > > > > > Topi has a point because a surface with > > > > format=ISL_FORMAT_X24_TYPELESS_G8_UINT will necessarily have > > > > usage=ISL_SURF_USAGE_STENCIL_BIT (no depth bit). The hardware requires > > > > the surface to have valign=4, and my badly written (but correct) > > > > condition ensured valign=4 in this case. After this patch, the function > > > > wrongly chooses valign=2. > > > > > > > > > > No it won't. It's hard to see in patch form, but after this patch is > > > applied we check for depth first and then stencil. If it has ANY depth > > > component, then it will get 4x4 aligned. Only separate stencil gets 4x2. > > > > This function, pre-patch and post-patch, does not inspect the format for > > a depth component. It checks if the depth usage flag is set. That's the > > key difference. > > > > On gen6, it's possible to create a usable surface with format > > X24_TYPELESS_G8_UINT with ISL_SURF_USAGE_STENCIL_BIT and no depth bit. > > And, if I understand this patch correctly, that surface does not satisfy > > the depth check in this patch: > > > > if (isl_surf_usage_is_depth(info->usage)) { > >/* depth buffer (possibly interleaved with stencil) */ > >*image_align_el = isl_extent3d(4, 4, 1); > >return; > > } > > > > Instead, that surface eventually hits this at the bottom of the > > function: > > > >*image_align_el = isl_extent3d(4, 2, 1); > > > > Of course, such a surface is only usable as a stencil buffer if hiz is > > disabled. So we'll probably never observe such a surface in real life. > > But we should at least assert that's the case. > > > >
Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Fri, May 12, 2017 at 3:35 PM, Chad Versacewrote: > On Thu 11 May 2017, Jason Ekstrand wrote: > > On Thu, May 11, 2017 at 9:08 PM, Chad Versace > > wrote: > > > > > On Thu 11 May 2017, Jason Ekstrand wrote: > > > > On Thu, May 11, 2017 at 7:03 AM, Pohjolainen, Topi < > > > > topi.pohjolai...@gmail.com> wrote: > > > > > > > > > On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > > > > > > --- > > > > > > src/intel/isl/isl_gen6.c | 30 -- > > > > > > 1 file changed, 12 insertions(+), 18 deletions(-) > > > > > > > > > > > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > > > > > > index b746903..0de9620 100644 > > > > > > --- a/src/intel/isl/isl_gen6.c > > > > > > +++ b/src/intel/isl/isl_gen6.c > > > > > > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const > struct > > > > > isl_device *dev, > > > > > > *| format | halign | valign | > > > > > > *++++ > > > > > > *| YUV 4:2:2 formats | 4 | * | > > > > > > +*| BC1-5 | 4 | 4 | > > > > > > +*| FXT1 | 8 | 4 | > > > > > > *| uncompressed formats | 4 | * | > > > > > > *++++ > > > > > > * > > > > > > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const > > > struct > > > > > isl_device *dev, > > > > > > */ > > > > > > > > > > > > if (isl_format_is_compressed(info->format)) { > > > > > > + /* Compressed formats have an alignment equal to their > block > > > size > > > > > */ > > > > > >*image_align_el = isl_extent3d(1, 1, 1); > > > > > >return; > > > > > > } > > > > > > > > > > > > - if (isl_format_is_yuv(info->format)) { > > > > > > - *image_align_el = isl_extent3d(4, 2, 1); > > > > > > - return; > > > > > > - } > > > > > > - > > > > > > - if (info->samples > 1) { > > > > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > > > > - return; > > > > > > - } > > > > > > - > > > > > > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > > > > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { > > > > > > > > > > Maybe mention in the commit that we drop this as it is always > false on > > > > > gen6+? > > > > > In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" > > > > > > > > > > > > > No, I dropped it not because we always use separate stencil but > because > > > > it's redundant with the regular depth case. The PRM says to use a > 4x4 > > > > alignment for all depth buffers but 4x2 for separate stencil. > Combined > > > > depth-stencil falls under the "depth" case so I didn't think we > needed to > > > > call it out explicitly. > > > > > > I admit that the condition I wrote > > > > > > if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > !ISL_DEV_USE_SEPARATE_STENCIL(dev)) > > > > > > was poorly chosen. I should've written it without relying on > > > ISL_DEV_USE_SEPARATE_STENCIL. > > > > > > Topi has a point because a surface with > > > format=ISL_FORMAT_X24_TYPELESS_G8_UINT will necessarily have > > > usage=ISL_SURF_USAGE_STENCIL_BIT (no depth bit). The hardware requires > > > the surface to have valign=4, and my badly written (but correct) > > > condition ensured valign=4 in this case. After this patch, the function > > > wrongly chooses valign=2. > > > > > > > No it won't. It's hard to see in patch form, but after this patch is > > applied we check for depth first and then stencil. If it has ANY depth > > component, then it will get 4x4 aligned. Only separate stencil gets 4x2. > > This function, pre-patch and post-patch, does not inspect the format for > a depth component. It checks if the depth usage flag is set. That's the > key difference. > > On gen6, it's possible to create a usable surface with format > X24_TYPELESS_G8_UINT with ISL_SURF_USAGE_STENCIL_BIT and no depth bit. > And, if I understand this patch correctly, that surface does not satisfy > the depth check in this patch: > > if (isl_surf_usage_is_depth(info->usage)) { >/* depth buffer (possibly interleaved with stencil) */ >*image_align_el = isl_extent3d(4, 4, 1); >return; > } > > Instead, that surface eventually hits this at the bottom of the > function: > >*image_align_el = isl_extent3d(4, 2, 1); > > Of course, such a surface is only usable as a stencil buffer if hiz is > disabled. So we'll probably never observe such a surface in real life. > But we should at least assert that's the case. > Since this verions preserves the original broken behavior, how about I make a follow-on patch which changes it to do /* Separate stencil requires 4x2 alignment */ if (isl_surf_usage_is_stencil(info->usage) && info->format == ISL_FORMAT_R8) { *image_align_el = isl_extent3d(4, 2, 1);
Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Thu 11 May 2017, Jason Ekstrand wrote: > On Thu, May 11, 2017 at 9:08 PM, Chad Versace> wrote: > > > On Thu 11 May 2017, Jason Ekstrand wrote: > > > On Thu, May 11, 2017 at 7:03 AM, Pohjolainen, Topi < > > > topi.pohjolai...@gmail.com> wrote: > > > > > > > On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > > > > > --- > > > > > src/intel/isl/isl_gen6.c | 30 -- > > > > > 1 file changed, 12 insertions(+), 18 deletions(-) > > > > > > > > > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > > > > > index b746903..0de9620 100644 > > > > > --- a/src/intel/isl/isl_gen6.c > > > > > +++ b/src/intel/isl/isl_gen6.c > > > > > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct > > > > isl_device *dev, > > > > > *| format | halign | valign | > > > > > *++++ > > > > > *| YUV 4:2:2 formats | 4 | * | > > > > > +*| BC1-5 | 4 | 4 | > > > > > +*| FXT1 | 8 | 4 | > > > > > *| uncompressed formats | 4 | * | > > > > > *++++ > > > > > * > > > > > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const > > struct > > > > isl_device *dev, > > > > > */ > > > > > > > > > > if (isl_format_is_compressed(info->format)) { > > > > > + /* Compressed formats have an alignment equal to their block > > size > > > > */ > > > > >*image_align_el = isl_extent3d(1, 1, 1); > > > > >return; > > > > > } > > > > > > > > > > - if (isl_format_is_yuv(info->format)) { > > > > > - *image_align_el = isl_extent3d(4, 2, 1); > > > > > - return; > > > > > - } > > > > > - > > > > > - if (info->samples > 1) { > > > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > > > - return; > > > > > - } > > > > > - > > > > > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > > > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { > > > > > > > > Maybe mention in the commit that we drop this as it is always false on > > > > gen6+? > > > > In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" > > > > > > > > > > No, I dropped it not because we always use separate stencil but because > > > it's redundant with the regular depth case. The PRM says to use a 4x4 > > > alignment for all depth buffers but 4x2 for separate stencil. Combined > > > depth-stencil falls under the "depth" case so I didn't think we needed to > > > call it out explicitly. > > > > I admit that the condition I wrote > > > > if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > !ISL_DEV_USE_SEPARATE_STENCIL(dev)) > > > > was poorly chosen. I should've written it without relying on > > ISL_DEV_USE_SEPARATE_STENCIL. > > > > Topi has a point because a surface with > > format=ISL_FORMAT_X24_TYPELESS_G8_UINT will necessarily have > > usage=ISL_SURF_USAGE_STENCIL_BIT (no depth bit). The hardware requires > > the surface to have valign=4, and my badly written (but correct) > > condition ensured valign=4 in this case. After this patch, the function > > wrongly chooses valign=2. > > > > No it won't. It's hard to see in patch form, but after this patch is > applied we check for depth first and then stencil. If it has ANY depth > component, then it will get 4x4 aligned. Only separate stencil gets 4x2. This function, pre-patch and post-patch, does not inspect the format for a depth component. It checks if the depth usage flag is set. That's the key difference. On gen6, it's possible to create a usable surface with format X24_TYPELESS_G8_UINT with ISL_SURF_USAGE_STENCIL_BIT and no depth bit. And, if I understand this patch correctly, that surface does not satisfy the depth check in this patch: if (isl_surf_usage_is_depth(info->usage)) { /* depth buffer (possibly interleaved with stencil) */ *image_align_el = isl_extent3d(4, 4, 1); return; } Instead, that surface eventually hits this at the bottom of the function: *image_align_el = isl_extent3d(4, 2, 1); Of course, such a surface is only usable as a stencil buffer if hiz is disabled. So we'll probably never observe such a surface in real life. But we should at least assert that's the case. > > I suggest either > > > > a. Asserting that separate stencil is true in the neighborhood of > > > > if (isl_surf_usage_is_depth(info->usage)) { > > /* depth buffer (possibly interleaved with stencil) */ > > *image_align_el = isl_extent3d(4, 4, 1); > > return; > > } > > > > and dropping the reference to possible interleaved stencil. > > > > b. Or, better, rewrite the original logic to be clearer. > > > > if ((info->usage & ISL_SURF_USAGE_STENCIL_BIT) > > && info->format == ISL_FORMAT_R8_UINT) {
Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Thu, May 11, 2017 at 9:08 PM, Chad Versacewrote: > On Thu 11 May 2017, Jason Ekstrand wrote: > > On Thu, May 11, 2017 at 7:03 AM, Pohjolainen, Topi < > > topi.pohjolai...@gmail.com> wrote: > > > > > On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > > > > --- > > > > src/intel/isl/isl_gen6.c | 30 -- > > > > 1 file changed, 12 insertions(+), 18 deletions(-) > > > > > > > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > > > > index b746903..0de9620 100644 > > > > --- a/src/intel/isl/isl_gen6.c > > > > +++ b/src/intel/isl/isl_gen6.c > > > > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct > > > isl_device *dev, > > > > *| format | halign | valign | > > > > *++++ > > > > *| YUV 4:2:2 formats | 4 | * | > > > > +*| BC1-5 | 4 | 4 | > > > > +*| FXT1 | 8 | 4 | > > > > *| uncompressed formats | 4 | * | > > > > *++++ > > > > * > > > > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const > struct > > > isl_device *dev, > > > > */ > > > > > > > > if (isl_format_is_compressed(info->format)) { > > > > + /* Compressed formats have an alignment equal to their block > size > > > */ > > > >*image_align_el = isl_extent3d(1, 1, 1); > > > >return; > > > > } > > > > > > > > - if (isl_format_is_yuv(info->format)) { > > > > - *image_align_el = isl_extent3d(4, 2, 1); > > > > - return; > > > > - } > > > > - > > > > - if (info->samples > 1) { > > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > > - return; > > > > - } > > > > - > > > > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { > > > > > > Maybe mention in the commit that we drop this as it is always false on > > > gen6+? > > > In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" > > > > > > > No, I dropped it not because we always use separate stencil but because > > it's redundant with the regular depth case. The PRM says to use a 4x4 > > alignment for all depth buffers but 4x2 for separate stencil. Combined > > depth-stencil falls under the "depth" case so I didn't think we needed to > > call it out explicitly. > > I admit that the condition I wrote > > if (isl_surf_usage_is_depth_or_stencil(info->usage) && > !ISL_DEV_USE_SEPARATE_STENCIL(dev)) > > was poorly chosen. I should've written it without relying on > ISL_DEV_USE_SEPARATE_STENCIL. > > Topi has a point because a surface with > format=ISL_FORMAT_X24_TYPELESS_G8_UINT will necessarily have > usage=ISL_SURF_USAGE_STENCIL_BIT (no depth bit). The hardware requires > the surface to have valign=4, and my badly written (but correct) > condition ensured valign=4 in this case. After this patch, the function > wrongly chooses valign=2. > No it won't. It's hard to see in patch form, but after this patch is applied we check for depth first and then stencil. If it has ANY depth component, then it will get 4x4 aligned. Only separate stencil gets 4x2. > I suggest either > > a. Asserting that separate stencil is true in the neighborhood of > > if (isl_surf_usage_is_depth(info->usage)) { > /* depth buffer (possibly interleaved with stencil) */ > *image_align_el = isl_extent3d(4, 4, 1); > return; > } > > and dropping the reference to possible interleaved stencil. > > b. Or, better, rewrite the original logic to be clearer. > > if ((info->usage & ISL_SURF_USAGE_STENCIL_BIT) > && info->format == ISL_FORMAT_R8_UINT) { > /* separate stencil surface */ > *image_align_el = isl_extent3d(4, 2, 1); > return; > } > > if (info->usage & (ISL_SURF_USAGE_DEPTH_BIT | > ISL_SURF_USAGE_STENCIL_BIT)) > /* separate depth surface or interleaved depthstencil */ > *image_align_el = isl_extent3d(4, 4, 1); > return; > } > > > > Other than that: > > > > > > Reviewed-by: Topi Pohjolainen > > > > > > > - /* interleaved depthstencil buffer */ > > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > > - return; > > > > - } > > > > - > > > > if (isl_surf_usage_is_depth(info->usage)) { > > > > - /* separate depth buffer */ > > > > + /* depth buffer (possibly interleaved with stencil) */ > > > >*image_align_el = isl_extent3d(4, 4, 1); > > > >return; > > > > } > > > > @@ -143,5 +129,13 @@ isl_gen6_choose_image_alignment_el(const struct > > > isl_device *dev, > > > >return; > > > > } > > > > > > > > + if (info->samples > 1) { > > > > + *image_align_el =
Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Thu 11 May 2017, Jason Ekstrand wrote: > On Thu, May 11, 2017 at 7:03 AM, Pohjolainen, Topi < > topi.pohjolai...@gmail.com> wrote: > > > On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > > > --- > > > src/intel/isl/isl_gen6.c | 30 -- > > > 1 file changed, 12 insertions(+), 18 deletions(-) > > > > > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > > > index b746903..0de9620 100644 > > > --- a/src/intel/isl/isl_gen6.c > > > +++ b/src/intel/isl/isl_gen6.c > > > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct > > isl_device *dev, > > > *| format | halign | valign | > > > *++++ > > > *| YUV 4:2:2 formats | 4 | * | > > > +*| BC1-5 | 4 | 4 | > > > +*| FXT1 | 8 | 4 | > > > *| uncompressed formats | 4 | * | > > > *++++ > > > * > > > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const struct > > isl_device *dev, > > > */ > > > > > > if (isl_format_is_compressed(info->format)) { > > > + /* Compressed formats have an alignment equal to their block size > > */ > > >*image_align_el = isl_extent3d(1, 1, 1); > > >return; > > > } > > > > > > - if (isl_format_is_yuv(info->format)) { > > > - *image_align_el = isl_extent3d(4, 2, 1); > > > - return; > > > - } > > > - > > > - if (info->samples > 1) { > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > - return; > > > - } > > > - > > > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { > > > > Maybe mention in the commit that we drop this as it is always false on > > gen6+? > > In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" > > > > No, I dropped it not because we always use separate stencil but because > it's redundant with the regular depth case. The PRM says to use a 4x4 > alignment for all depth buffers but 4x2 for separate stencil. Combined > depth-stencil falls under the "depth" case so I didn't think we needed to > call it out explicitly. I admit that the condition I wrote if (isl_surf_usage_is_depth_or_stencil(info->usage) && !ISL_DEV_USE_SEPARATE_STENCIL(dev)) was poorly chosen. I should've written it without relying on ISL_DEV_USE_SEPARATE_STENCIL. Topi has a point because a surface with format=ISL_FORMAT_X24_TYPELESS_G8_UINT will necessarily have usage=ISL_SURF_USAGE_STENCIL_BIT (no depth bit). The hardware requires the surface to have valign=4, and my badly written (but correct) condition ensured valign=4 in this case. After this patch, the function wrongly chooses valign=2. I suggest either a. Asserting that separate stencil is true in the neighborhood of if (isl_surf_usage_is_depth(info->usage)) { /* depth buffer (possibly interleaved with stencil) */ *image_align_el = isl_extent3d(4, 4, 1); return; } and dropping the reference to possible interleaved stencil. b. Or, better, rewrite the original logic to be clearer. if ((info->usage & ISL_SURF_USAGE_STENCIL_BIT) && info->format == ISL_FORMAT_R8_UINT) { /* separate stencil surface */ *image_align_el = isl_extent3d(4, 2, 1); return; } if (info->usage & (ISL_SURF_USAGE_DEPTH_BIT | ISL_SURF_USAGE_STENCIL_BIT)) /* separate depth surface or interleaved depthstencil */ *image_align_el = isl_extent3d(4, 4, 1); return; } > > Other than that: > > > > Reviewed-by: Topi Pohjolainen> > > > > - /* interleaved depthstencil buffer */ > > > - *image_align_el = isl_extent3d(4, 4, 1); > > > - return; > > > - } > > > - > > > if (isl_surf_usage_is_depth(info->usage)) { > > > - /* separate depth buffer */ > > > + /* depth buffer (possibly interleaved with stencil) */ > > >*image_align_el = isl_extent3d(4, 4, 1); > > >return; > > > } > > > @@ -143,5 +129,13 @@ isl_gen6_choose_image_alignment_el(const struct > > isl_device *dev, > > >return; > > > } > > > > > > + if (info->samples > 1) { > > > + *image_align_el = isl_extent3d(4, 4, 1); > > > + return; > > > + } > > > + > > > + /* For everything else, we can chose any vertical alignment we > > want. We > > > +* choose an alignment of 2 because it uses the least memory. > > > +*/ > > > *image_align_el = isl_extent3d(4, 2, 1); The code is correct, but the comment is wrong. We cannot choose any valign we wish for the remaining cases. It is true that 2 is *valid* for all remaining cases, but it is also *required* for some of those cases, as explained in the big comment block above.
Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Thu, May 11, 2017 at 7:03 AM, Pohjolainen, Topi < topi.pohjolai...@gmail.com> wrote: > On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > > --- > > src/intel/isl/isl_gen6.c | 30 -- > > 1 file changed, 12 insertions(+), 18 deletions(-) > > > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > > index b746903..0de9620 100644 > > --- a/src/intel/isl/isl_gen6.c > > +++ b/src/intel/isl/isl_gen6.c > > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct > isl_device *dev, > > *| format | halign | valign | > > *++++ > > *| YUV 4:2:2 formats | 4 | * | > > +*| BC1-5 | 4 | 4 | > > +*| FXT1 | 8 | 4 | > > *| uncompressed formats | 4 | * | > > *++++ > > * > > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const struct > isl_device *dev, > > */ > > > > if (isl_format_is_compressed(info->format)) { > > + /* Compressed formats have an alignment equal to their block size > */ > >*image_align_el = isl_extent3d(1, 1, 1); > >return; > > } > > > > - if (isl_format_is_yuv(info->format)) { > > - *image_align_el = isl_extent3d(4, 2, 1); > > - return; > > - } > > - > > - if (info->samples > 1) { > > - *image_align_el = isl_extent3d(4, 4, 1); > > - return; > > - } > > - > > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { > > Maybe mention in the commit that we drop this as it is always false on > gen6+? > In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" > No, I dropped it not because we always use separate stencil but because it's redundant with the regular depth case. The PRM says to use a 4x4 alignment for all depth buffers but 4x2 for separate stencil. Combined depth-stencil falls under the "depth" case so I didn't think we needed to call it out explicitly. > Other than that: > > Reviewed-by: Topi Pohjolainen> > > - /* interleaved depthstencil buffer */ > > - *image_align_el = isl_extent3d(4, 4, 1); > > - return; > > - } > > - > > if (isl_surf_usage_is_depth(info->usage)) { > > - /* separate depth buffer */ > > + /* depth buffer (possibly interleaved with stencil) */ > >*image_align_el = isl_extent3d(4, 4, 1); > >return; > > } > > @@ -143,5 +129,13 @@ isl_gen6_choose_image_alignment_el(const struct > isl_device *dev, > >return; > > } > > > > + if (info->samples > 1) { > > + *image_align_el = isl_extent3d(4, 4, 1); > > + return; > > + } > > + > > + /* For everything else, we can chose any vertical alignment we > want. We > > +* choose an alignment of 2 because it uses the least memory. > > +*/ > > *image_align_el = isl_extent3d(4, 2, 1); > > } > > -- > > 2.5.0.400.gff86faf > > > > ___ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev > ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
On Wed, May 10, 2017 at 02:30:31PM -0700, Jason Ekstrand wrote: > --- > src/intel/isl/isl_gen6.c | 30 -- > 1 file changed, 12 insertions(+), 18 deletions(-) > > diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c > index b746903..0de9620 100644 > --- a/src/intel/isl/isl_gen6.c > +++ b/src/intel/isl/isl_gen6.c > @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct isl_device > *dev, > *| format | halign | valign | > *++++ > *| YUV 4:2:2 formats | 4 | * | > +*| BC1-5 | 4 | 4 | > +*| FXT1 | 8 | 4 | > *| uncompressed formats | 4 | * | > *++++ > * > @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const struct > isl_device *dev, > */ > > if (isl_format_is_compressed(info->format)) { > + /* Compressed formats have an alignment equal to their block size */ >*image_align_el = isl_extent3d(1, 1, 1); >return; > } > > - if (isl_format_is_yuv(info->format)) { > - *image_align_el = isl_extent3d(4, 2, 1); > - return; > - } > - > - if (info->samples > 1) { > - *image_align_el = isl_extent3d(4, 4, 1); > - return; > - } > - > - if (isl_surf_usage_is_depth_or_stencil(info->usage) && > - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { Maybe mention in the commit that we drop this as it is always false on gen6+? In isl.c: "dev->use_separate_stencil = ISL_DEV_GEN(dev) >= 6;" Other than that: Reviewed-by: Topi Pohjolainen> - /* interleaved depthstencil buffer */ > - *image_align_el = isl_extent3d(4, 4, 1); > - return; > - } > - > if (isl_surf_usage_is_depth(info->usage)) { > - /* separate depth buffer */ > + /* depth buffer (possibly interleaved with stencil) */ >*image_align_el = isl_extent3d(4, 4, 1); >return; > } > @@ -143,5 +129,13 @@ isl_gen6_choose_image_alignment_el(const struct > isl_device *dev, >return; > } > > + if (info->samples > 1) { > + *image_align_el = isl_extent3d(4, 4, 1); > + return; > + } > + > + /* For everything else, we can chose any vertical alignment we want. We > +* choose an alignment of 2 because it uses the least memory. > +*/ > *image_align_el = isl_extent3d(4, 2, 1); > } > -- > 2.5.0.400.gff86faf > > ___ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 3/4] intel/isl: Refactor gen6_choose_image_alignment_el
--- src/intel/isl/isl_gen6.c | 30 -- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/src/intel/isl/isl_gen6.c b/src/intel/isl/isl_gen6.c index b746903..0de9620 100644 --- a/src/intel/isl/isl_gen6.c +++ b/src/intel/isl/isl_gen6.c @@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct isl_device *dev, *| format | halign | valign | *++++ *| YUV 4:2:2 formats | 4 | * | +*| BC1-5 | 4 | 4 | +*| FXT1 | 8 | 4 | *| uncompressed formats | 4 | * | *++++ * @@ -110,29 +112,13 @@ isl_gen6_choose_image_alignment_el(const struct isl_device *dev, */ if (isl_format_is_compressed(info->format)) { + /* Compressed formats have an alignment equal to their block size */ *image_align_el = isl_extent3d(1, 1, 1); return; } - if (isl_format_is_yuv(info->format)) { - *image_align_el = isl_extent3d(4, 2, 1); - return; - } - - if (info->samples > 1) { - *image_align_el = isl_extent3d(4, 4, 1); - return; - } - - if (isl_surf_usage_is_depth_or_stencil(info->usage) && - !ISL_DEV_USE_SEPARATE_STENCIL(dev)) { - /* interleaved depthstencil buffer */ - *image_align_el = isl_extent3d(4, 4, 1); - return; - } - if (isl_surf_usage_is_depth(info->usage)) { - /* separate depth buffer */ + /* depth buffer (possibly interleaved with stencil) */ *image_align_el = isl_extent3d(4, 4, 1); return; } @@ -143,5 +129,13 @@ isl_gen6_choose_image_alignment_el(const struct isl_device *dev, return; } + if (info->samples > 1) { + *image_align_el = isl_extent3d(4, 4, 1); + return; + } + + /* For everything else, we can chose any vertical alignment we want. We +* choose an alignment of 2 because it uses the least memory. +*/ *image_align_el = isl_extent3d(4, 2, 1); } -- 2.5.0.400.gff86faf ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev