着色器中语义的理解

来源:互联网 发布:百度指数数据来源 编辑:程序博客网 时间:2024/06/06 01:04

一、着色器语义只可能出现在3种位置

(1)结构体成员的后面

(2)函数的输入参数列表中,某个参数的后面

(3)函数的输入参数列表的后面,或者可以表述为函数声明的最后来修饰函数返回值的语义

 

二、语义的作用

和c语言不同的是,着色器语言如HLSL语言的入口函数(被API调用的函数)使用捆绑参数作为输入输出的语义(HLSL函数内部调用时忽略语义)。这样,使得捆绑缓冲区数据到Shader,和捆绑输入着色器Shader到输出着色器Shader,都变得更加容易。

说的通俗一点:各个部件各干各的工作,数据的来源和数据的输出全由语义控制,HLSL实际上不关心数据怎么来的和数据如何输出去,HLSL(着色器)只能看到自己内部的运算部件和寄存器。见下图:

由上图可以看出各个部件只关心自己内部的运算,数据的传递部分各个部件自己并不负责,数据传递由流水线根据语义负责。图中可以看出着色器的数据输入到底接收哪些数据由语义决定,到底输出哪些数据到外部的流水线上的寄存器也由语义决定。当然对应的着色器函数必须得有输入用的参数和输出用的函数返回值以表示出来数据的来源和输出。

由此,语义的作用也就体现出来了,比如顶点缓冲区中的数据可能多而乱,那么顶点着色器要怎样从顶点缓冲区中取得相应的数据呢?这就通过语义,从而轻松的从顶点缓冲区获得真正需要的数据。输出也一样,只要语义定义的数据输出,其它的中间运算结果等数据不需要了,就不输出。

 补充通用着色器原理图:

原创粉丝点击