如何从深度/模板纹理中读取或采样模板值?

时间:2019-04-08 07:19:05

标签: metal

假设我有一个深度/模板纹理,其格式为MTLPixelFormatDepth32Float_Stencil8,我将其用作渲染过程中的附件,然后在下一个渲染过程中从该纹理中采样模板值。

金属着色语言规范完全没有提及任何内容,只是深度纹理需要声明为depth2d<T, access a = access::sample>depth2dT sample(sampler s, float2 coord, int2 offset = int2(0)) const都需要声明为T read(uint2 coord, uint lod = 0) const返回T,其中T最有可能是float

所以,我的问题是,如何从该纹理读取或采样模板值?

1 个答案:

答案 0 :(得分:2)

创建stencil texture view的深度/模板纹理,格式为MTLPixelFormatX32_Stencil8。然后,将该纹理视图传递到要读取的着色器中。它可以作为R8Uint纹理使用。

请注意,并非所有设备都支持模具纹理视图。支持等于或优于iOS_GPUFamily1_v3,iOS_GPUFamily2_v3,iOS_GPUFamily3_v2,tvOS_GPUFamily1_v2或OSX_GPUFamily1_v2的功能集。

如果不支持,则需要使用blit编码器将深度/模板纹理复制到缓冲区中,然后直接使用该缓冲区或将其复制到适当格式的纹理中。