dx10 学习随笔(五)

Shader Stages

 

 

D3D10 管线包含3个可编程 shader Stages:

 

1、Vertex-Shader Stage:

 

2、Geometry-Shader Stage:

 

3、Pixel-Shader Stage:

 

下面对这三个 Stage 进行详细的介绍:

 

一、Vetex-Shader Stage:

 

VS Stage 对从 IA Stage 传输过来的数据进行 transformation 、skinning、morphing、per-vertex lighting 等操作。VS 的输入

 

是一个顶点,输出也是一个顶点。对图形管线来说,VS Stage 是必不可少的,即使没有任何顶点操作,一个 VS 也是要被创建并设置到管线中

 

来传输数据的。

 

VS 的每个输入的顶点最多可以有16个32位的vector来组成,其输出也是最多有16个32位的vector来组成。

 

VS Stage 使用到了 IA Stage 生成的 2 个 system generated values : VertexID 和 InstanceID。因为 VertexID 和

 

InstanceID 对顶点是有意义的,而且这两个值也仅仅对 VS Shader有意义。

 

VS Stage 会在所有的顶点上执行运算,包括 邻接顶点。VS 执行的次数可以通过 CPU 查询 VSInvocations pipeline statistic。

 

VS 可以执行加载纹理和纹理采样操作(需要屏幕空间导数计算的情况除外)。

 

二、Geometry-Shader Stage:

 

GS Stage 和 VS Stage 不同,VS 是以一个顶点为运算对象,而且只能输出一个顶点。GS 是以构成一个完整的图元的所有的顶点作

 

为输入的,而且 GS 还可以用图元的邻接信息作为输入。

 

GS Stage 使用到了 IA Stage 生成的 SV_PrimitiveID 。这使得获取一个图元的数据和计算一个图元的数据变为可能。

 

GS Stage 还可以输出图元(可以是 tristrip、linestrip、pointlist)。GS 生成的图元的数目根据不同的 GS 代码而不同,具体数目

 

没有限制。GS 生成的顶点的最大数目必须定义为静态变量。GS 生成的 Strip 的长度可以是任意的。一个新的 strip 可以通过调用 HLSL 命

 

令 RestartStrip 来实现。

 

GS Stage 的输出被传输到 rasterizer Stage 或者通过 stream output stage 被传输到一个内存中的 vertex buffer 中。输出到

 

内存中的数据被重新组装成独立的 point/line/triangle lists(和他们被传输到 rasterizer Stage 的操作一样)。

 

        当 GS 被激活时,在每个图元被传输进来的时候 GS 就会被调用一次。每次 GS 的调用,是针对一个图元进行的操作,例如,一个点,

 

一条线,一个三角形。所以,一个 triangle strip 会被分割为一个 triangle list。对 list 中的每个 triangle 都会调用一次 GS 。每个图元

 

的所有的顶点信息(包括其包含的邻接图元信息)对 GS 都是可以访问的。

 

GS 每次输出一个顶点,该顶点会被填充到一个 output stream 对象中。GS Stage 的输出是由固定的声明确定的 Stream,

 

(PointStream、LineStream、TriangleStream)。每个 Stream 都是模板对象。输出数据的拓扑结构是由他们对应的对象的类型来确

 

定的,顶点如何被扩展到 stream 中是由模板类型来确定的。Execution of a geometry shader instance is atomic from other

 

invocations, except that data added to the streams is serial. 一个 GS 调用的输出对于其他 GS 调用来说是独立的(但是顺序需要

 

考虑)。一个 GS 生成的 triangle strips 会引起一个新的 strip 调用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值