[Mesa-dev] depth writing and missing something

Marek Olšák maraeo at gmail.com
Thu Sep 30 10:58:31 PDT 2010


On Thu, Sep 30, 2010 at 4:57 PM, Brian Paul <brianp at vmware.com> wrote:

> On 09/29/2010 07:34 PM, Dave Airlie wrote:
>
>> So I've been playing with stencil writing on r600, and it lead me to
>> examine the depth writing.
>>
>> So at the moment in gallium if we are writing to depth via DrawPixels,
>> we construct a fragment program that samples from a texture.
>>
>> TEX OUT[0].z, IN[1], SAMP[0], 2D
>>
>> Now from what I can see the format we pick to sample from is
>> Z24_UNORM_S8_USCALED, which from the u_format.csv file seems to say it
>> will put the results into X and Y components.
>>
>
> I think what the u_format.csv file says isn't totally consistant with what
> the table at the bottom of tgsi.rst says.
>
> We never did nail down the Z/Gallium cell in the later table.
>
> To be consistant with what the u_format.csv file says, I think the tgsi.rgs
> table needs to be updated to read:
>
>  Texture Comps   Gallium        OpenGL               Direct3D 9
> +--------------+--------------+--------------------+--------------+
> | Z            | (Z, ?, ?, ?) | (z, z, z, 1)*      | (0, z, 0, 1) |
> +--------------+--------------+--------------------+--------------+
> | ZS           | (Z, S, ?, ?) | (z, z, z, 1)*      | tbd          |
> +--------------+--------------+--------------------+--------------+
> | S            | (?, S, ?, ?) | undefined          | tbd          |
> +--------------+--------------+--------------------+--------------+
>
> What do people think about that?


As was mentioned in the other thread, D3D doesn't allow reading both the
depth and stencil values at the same time. Is there any hardware which
supports that? I would rather split ZS into 2 views:

 Texture Comps   Gallium        OpenGL               Direct3D 9
+--------------+--------------+--------------------+--------------+
| Z24X8        | (Z, ?, ?, ?) | depth texture mode | tbd          |
+--------------+--------------+--------------------+--------------+
| X24S8        | (?, S, ?, ?) | undefined          | tbd          |

I think this is the case where the format member in pipe_sampler_view should
come into play.



>
>
>  Now if we sample from
>> the X and Y components and the texture dest writemask is Z, I can't
>> see how any value arrives in the right place. It seems to work but I'm
>> a bit lost where the magic is.
>>
>> I'd have expected there to be swizzles in the sampler but I can't see
>> them being set to anything special either.
>>
>
> I think we've just been getting lucky by the TEX instructions returning
> (Z,Z,Z,?).
>
> If we go with the table changes above, we need to either specify a sampler
> swizzle or do something like this in the shader:
>
> TEX TEMP[0].x, IN[1], SAMP[0], 2D
> MOV OUT[0].z, TEMP[0].xxxx;
>

Since the depth texture modes were implemented in st/mesa, you may only get
these swizzles in a sampler view for depth textures:
(X,X,X,1)
(X,X,X,X)
(0,0,0,X)
being luminance, intensity, and alpha, respectively. So (Z,?,?,?) is already
a valid swizzle for st/mesa, and nothing else uses depth texturing, I guess.

Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20100930/f274c4b2/attachment-0003.htm>


More information about the mesa-dev mailing list