On 12 December 2012 12:53, Marek Olšák <span dir="ltr"><<a href="mailto:maraeo@gmail.com" target="_blank">maraeo@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>On Wed, Dec 12, 2012 at 9:21 PM, Eric Anholt <<a href="mailto:eric@anholt.net" target="_blank">eric@anholt.net</a>> wrote:<br>
> Marek Olšák <<a href="mailto:maraeo@gmail.com" target="_blank">maraeo@gmail.com</a>> writes:<br>
><br>
>> On Wed, Dec 12, 2012 at 5:06 PM, Paul Berry <<a href="mailto:stereotype441@gmail.com" target="_blank">stereotype441@gmail.com</a>> wrote:<br>
>>> On 11 December 2012 23:49, Aras Pranckevicius <<a href="mailto:aras@unity3d.com" target="_blank">aras@unity3d.com</a>> wrote:<br>
>>>> Not sure if relevant for Mesa, but e.g. on PowerVR SGX it's really bad to<br>
>>>> pack two vec2 texture coordinates into a single vec4. That's because var.xy<br>
>>>> texture read can be "prefetched", whereas <a href="http://var.zw" target="_blank">var.zw</a> texture read is not<br>
>>>> prefetched (essentially treated as a dependent texture read), and often<br>
>>>> causes stalls in the shader execution.<br>
>>><br>
>>><br>
>>> Interesting--I had not thought of that possibility.  On i965 all texture<br>
>>> reads have to be done explicitly by the fragment shader (there is no<br>
>>> prefetching IIRC), so this penalty doesn't apply.  Does anyone know if a<br>
>>> penalty like this exists in any of Mesa's other back-ends?  If so that might<br>
>>> suggest some good experiments to try.  I'm open to revising my opinion if<br>
>>> someone measures a significant performance degradation, particularly with a<br>
>>> real-world app.<br>
>><br>
>> R300 and R400 support 4 texture indirections (as defined by<br>
>> ARB_fragment_program). Adding ALU instructions before the first TEX<br>
>> instruction increases the number of texture indirections by 1, which<br>
>> might make some shaders not be executable on the hardware at all.<br>
>><br>
>> I think this optimization should be disabled on drivers where the<br>
>> texture indirection limit is too low.<br>
><br>
> And are swizzles of texcoords required to be separate MOVs beforehand<br>
> (like on i915)?<br>
<br>
</div></div>Yes, swizzles aren't supported by the TEX instruction and must be<br>
lowered. And the lowering sucks, because the only supported 3D source<br>
operand swizzles are .xxx, .yyy, .zzz, .www, .yzw, .zxy, .wzy, .111,<br>
.000, and 0.HHH (H=0.5), so the swizzle can occupy up to 3 MOV<br>
instructions. The 4th channel is handled by a separate scalar<br>
instruction, which is independent of the 3D instruction. (R300 can<br>
execute one 3D and one scalar instruction simultaneously)<br>
<span><font color="#888888"><br>
Marek<br>
</font></span></blockquote></div><br></div><div class="gmail_extra">Ok, unless I hear objections, I'll rework the patch series so that the driver can opt out of varying packing (e.g. by setting Const.DisableVaryingPacking or some such).  I'll add an assertion to verify that drivers that opt out of varying packing don't support transform feedback (so that we don't have to go to extra work to support transform feedback of both packed and unpacked varyings).<br>
<br>I don't expect the re-work to change too many things, so feel free to review the patch series as-is and I'll fold your review into v2 when I get to it (probably in the next day or two).<br></div>