<p dir="ltr"><br>
On Mar 4, 2016 7:53 PM, "Oded Gabbay" <<a href="mailto:oded.gabbay@gmail.com">oded.gabbay@gmail.com</a>> wrote:<br>
><br>
> On Fri, Mar 4, 2016 at 6:59 PM, Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>
> > On Fri, Mar 4, 2016 at 4:56 PM, Oded Gabbay <<a href="mailto:oded.gabbay@gmail.com">oded.gabbay@gmail.com</a>> wrote:<br>
> >> On Fri, Mar 4, 2016 at 2:19 PM, Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>
> >>> Note that the DB only supports tiling and separate depth and stencil, so<br>
> >>> it's unmappable. Before transfers and sometimes even texturing, the buffer<br>
> >>> must be copied via the DB->CB path, because CB supports both interleaved and<br>
> >>> linear layouts. The result is the flushed texture. The goal here is to<br>
> >>> ensure the flushed texture uses the correct format.<br>
> >>><br>
> >>> Marek<br>
> >>><br>
> >> Marek,<br>
> >> Thanks for the info, makes the code more clear :)<br>
> >><br>
> >> I can do what you asked, but frankly, I don't think it looks better:<br>
> >><br>
> >> @@ -2657,9 +2657,15 @@ uint32_t r600_translate_colorformat(enum<br>
> >> chip_class chip, enum pipe_format forma<br>
> >>                                         return V_0280A0_COLOR_32_32;<br>
> >>                         }<br>
> >>                 } else if (HAS_SIZE(8,24,0,0)) {<br>
> >> -                       return V_0280A0_COLOR_24_8;<br>
> >> +                       if (R600_BIG_ENDIAN)<br>
> >> +                               return V_0280A0_COLOR_8_24;<br>
> >> +                       else<br>
> >> +                               return V_0280A0_COLOR_24_8;<br>
> >>                 } else if (HAS_SIZE(24,8,0,0)) {<br>
> >> -                       return V_0280A0_COLOR_8_24;<br>
> >> +                       if (R600_BIG_ENDIAN)<br>
> >> +                               return V_0280A0_COLOR_24_8;<br>
> >> +                       else<br>
> >> +                               return V_0280A0_COLOR_8_24;<br>
> >>                 }<br>
> >>                 break;<br>
> >>         case 3:<br>
> >><br>
> >><br>
> >> @@ -1296,7 +1296,11 @@ unsigned r600_translate_colorswap(enum<br>
> >> pipe_format format)<br>
> >>                          (HAS_SWIZZLE(0,Y) && HAS_SWIZZLE(1,NONE)) ||<br>
> >>                          (HAS_SWIZZLE(0,NONE) && HAS_SWIZZLE(1,X))) {<br>
> >>                         entry = 2;<br>
> >> +#ifdef PIPE_ARCH_LITTLE_ENDIAN<br>
> >>                         ret = V_0280A0_SWAP_STD_REV; /* YX__ */<br>
> >> +#else<br>
> >> +                       ret = V_0280A0_SWAP_STD; /* YX__ */<br>
> >> +#endif<br>
> >>                 } else if (HAS_SWIZZLE(0,X) && HAS_SWIZZLE(3,Y)) {<br>
> >>                         entry = 3;<br>
> >>                         ret = V_0280A0_SWAP_ALT; /* X__Y */<br>
> >><br>
> >><br>
> >> Actually I think it looks worse as we need to intervene in two places<br>
> >> to get the same result I got with just switching the pipe format of<br>
> >> the CB. And I still didn't check what happens with textures.<br>
> >><br>
> >> In any case, this is basically a workaround, because gallium still<br>
> >> thinks it uses the PIPE_FORMAT_Z24_UNORM_S8_UINT format, while we<br>
> >> program the GPU with the PIPE_FORMAT_S8_UINT_Z24_UNORM parameters.<br>
> >><br>
> >> I think that if we use a workaround, better use a cleaner/simpler one.<br>
> ><br>
> > Have you tested entire piglit with your first workaround? I doubt it<br>
> > passes depth texturing tests.<br>
><br>
> No. I only focused so far on getting gl-1.0-readpixsanity to work...<br>
><br>
> piglit run on BE r600g is in such worse shape, there is no way of<br>
> telling. It crashes after about 300 tests (out of 8600) and in those<br>
> 300 tests, about 50 are failing, and I get dmesg errors from the<br>
> kernel driver.<br>
> Really, BE r600g is so broken, that there can be no baseline until I<br>
> manage to fix things so I get at least an entire piglit run without<br>
> dmesg errors and computer crashes. And I think I'm not anywhere near<br>
> that yet.<br>
><br>
> I'm sure I will find out that some of my current fixes don't match all<br>
> of the cases and they will need better tweaking. I don't see that as<br>
> problematic.<br>
><br>
> ><br>
> > The problem with hacking the DB->CB decompression blit path is that<br>
> > it's sometimes used for texturing and other times it's not, and it<br>
> > depends on the format and the chip. The other option is that the<br>
> > DB->CB copy is not used for texturing if the hardware supports<br>
> > in-place DB decompression; if so, the DB->CB copy is only used for<br>
> > downloads. The result is that we have to maintain 2 texturing<br>
> > codepaths: one that uses the original texture used by DB and<br>
> > decompressed in-place, and one that is the result of the DB->CB copy.<br>
><br>
> I assume you mean r600_blit_decompress_depth() and<br>
> r600_blit_decompress_depth_in_place() ?<br>
><br>
> ><br>
> > If you want to change the format of the flushed texture, fine, but you<br>
> > should change it for all users of that codepath, not just texture<br>
> > downloads.<br>
><br>
> I'm not sure what you mean by that. Could you please give me an<br>
> example or point me to the relevant functions ?<br>
><br>
> Thanks,<br>
><br>
>      Oded<br>
> ><br>
> > Marek<br>
Marek, <br>
fwiw, 3 weeks ago was the first time I ever saw the r600g driver, so my questions maybe a bit basic. </p>
<p dir="ltr">Oded </p>