区块链技术博客
www.b2bchain.cn

WebGPU 规范篇 09 通道求职学习资料

本文介绍了WebGPU 规范篇 09 通道求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

系列博客目录传送门:https://xiaozhuanlan.com/topic/9587342601

  • 可编程通道编码器:GPUProgrammablePassEncoder
    • 创建通道编码器
    • 设置绑定组 setBindGroup
  • 1 渲染通道编码器
    • 1.1 创建
      • 1.1.1 颜色附件
        • GPULoadOp:初始化行为
        • GPUStoreOp:存储行为
      • 1.1.2 深度模板附件
      • 1.1.3 译者注
    • 1.2 触发绘制功能相关的方法
      • setPipeline 方法
      • setVertexBuffer 方法


Pass,通道。

通道允许使用多个 Pipelines。

Pipelines 允许切换不同的资源(bindGroup、VBO)。

通道在设置好 Pipelines (setPipeline)和资源绑定(setVertexBuffer、setBindGroup)、绘制命令(draw)触发之后,要进行编码(endPass),编码完成即可告诉指令编码器完成一个通道编码器的编码,并将指令编码器提交到渲染队列。

通道有两种

GPUProgrammablePassEncoder ├ GPURenderPassEncoder └ GPUComputePassEncoder

本文介绍原文 13、14、15 章的部分内容。

可编程通道编码器:GPUProgrammablePassEncoder

简称为通道编码器,它有两种子类型,渲染通道编码器 GPURenderPassEncoder 和计算通道编码器 GPUComputePassEncoder

通道编码器的主要功能就是将不同的 pipeline 和绑定组根据实际需要排列组合在一起,完成一帧完整的渲染或一次完整的计算。

通道编码器的主要功能是,设置(切换)绑定组、VBO和设置(切换)管线。除此之外,还可以进行调试,但是调试并不作为此文关注的内容,有兴趣的读者可以自行查阅文档。

创建通道编码器

由某个指令编码器创建,具体见下文两种编码器的创建小节。

设置绑定组 setBindGroup

此方法是每一种具体的通道编码器都具备的功能,有两种重载

  • setBindGroup(index, bindGroup, dynamicOffsets)
  • setBindGroup(index, bindGroup, dynamicOffsetsData, dynamicOffsetsDataStart, dynamicOffsetsDataLength)

其目的都是向位于 index 位置的 bindGroupLayout 传递 GPUBindGroup 对象 bindGroup,后面的动态偏移值、动态偏移数据等高级用法见官方文档。

通常,只用到前面两个参数即可。

1 渲染通道编码器

1.1 创建

使用指令编码器(GPUCommandEncoder)的 beginRenderPass 方法即可创建一个渲染通道编码器:

const renderPassEncoder = commandEncoder.beginRenderPass({   /* {}: GPURenderPassDescriptor */ })

参数对象是 GPURenderPassDescriptor 类型的,它不能是空且必须传递。

dictionary GPURenderPassDescriptor : GPUObjectDescriptorBase {   required sequence<GPURenderPassColorAttachment> colorAttachments;   GPURenderPassDepthStencilAttachment depthStencilAttachment;   GPUQuerySet occlusionQuerySet; };

它有一个必选的数组参数 colorAttachments,数组元素类型是 GPURenderPassColorAttachment,表示其颜色附件,此数组长度≤8且>0;若为 0,那么深度模板附件参数 depthStencilAttachment 不能为 null。

还有两个可选参数,GPURenderPassDepthStencilAttachment 类型的 depthStencilAttachment,表示其深度纹理附件;GPUQuerySet 类型的 occlusionQuerySet,表示一些查询有关的信息集。

1.1.1 颜色附件

dictionary GPURenderPassColorAttachment {   required GPUTextureView view;   GPUTextureView resolveTarget;    required (GPULoadOp or GPUColor) loadValue;   required GPUStoreOp storeOp; };

颜色附件,是指渲染管线输出的颜色保存到什么地方去的一种结果容器。

而颜色附件对象,是在渲染通道编码器创建时的一个参数,用于描述。它有三个必选字段:

  • viewGPUTextureView 类型,指颜色最终要输出到哪个纹理(视图)对象上;
  • loadValueGPULoadOpGPUColor 类型,指定初始化时的行为或颜色;
  • storeOpGPUStoreOp 类型,指定渲染通道执行结束后对 view 的存储行为

还有一个可选参数 resolveTargetGPUTextureView 类型,它用来接收当 view 使用了多重采样时的颜色输出结果,即配合多重采样抗锯齿技术使用。若设置了 resolveTarget,即使用了多重采样,那么 view 是“中途的”,而 resolveTarget 一般会设为 Canvas 的纹理视图。

GPULoadOp、GPUStoreOp 两个类型见下:

GPULoadOp:初始化行为

它是一个单字符串值枚举:

enum GPULoadOp {   "load" };

如果为颜色附件的 loadValue 指定了 “load”,那么渲染通道开始时,颜色附件的初始颜色会用颜色附件上已有的颜色。

注意,在某些设备(譬如移动端)上,对 loadValue 使用 GPUColor 来初始化会好得多。

GPUStoreOp:存储行为

enum GPUStoreOp {   "store",   "discard" };

“store” 表示通道结束后,颜色保存,”discard” 表示通道结束后,颜色丢弃。

1.1.2 深度模板附件

dictionary GPURenderPassDepthStencilAttachment {   required GPUTextureView view;    required (GPULoadOp or float) depthLoadValue;   required GPUStoreOp depthStoreOp;   boolean depthReadOnly = false;    required (GPULoadOp or GPUStencilValue) stencilLoadValue;   required GPUStoreOp stencilStoreOp;   boolean stencilReadOnly = false; };

深度模板附件是渲染通道的第二大部分,负责保存通道结束后输出的深度和模板值。

view 参数与颜色附件的作用类似,提供容器。

depthLoadValuestencilLoadValue 与颜色附件中的 loadValue 作用也类似,区别在类型不大一样。

depthStoreOpstencilStoreOp 与颜色附件中的 storeOp 也是类似的。

多出来两个可选字段 depthReadOnlystencilReadOnly 默认值是 false,它们的意思是指示 view 这个纹理视图中,深度/模板的部分是否是只读的。

对深度模板附件的合规性校验省略,也不复杂,有兴趣的读者可自己到规范文档中查阅。

1.1.3 译者注

渲染通道与 WebGL 中的 Framebuffer 非常相似。

1.2 触发绘制功能相关的方法

以下方法均在渲染通道编码器上。

setPipeline 方法

设置(或者说切换到也行)管线的方法,参数是一个 GPURenderPipeline 对象。

undefined setPipeline(GPURenderPipeline pipeline);

setVertexBuffer 方法

这个是设置顶点数据(VertexBuffer)的方法。

方法签名:

“` web-idl

系列博客目录传送门:https://xiaozhuanlan.com/topic/9587342601

  • 可编程通道编码器:GPUProgrammablePassEncoder
    • 创建通道编码器
    • 设置绑定组 setBindGroup
  • 1 渲染通道编码器
    • 1.1 创建
      • 1.1.1 颜色附件
        • GPULoadOp:初始化行为
        • GPUStoreOp:存储行为
      • 1.1.2 深度模板附件
      • 1.1.3 译者注
    • 1.2 触发绘制功能相关的方法
      • setPipeline 方法
      • setVertexBuffer 方法


Pass,通道。

通道允许使用多个 Pipelines。

Pipelines 允许切换不同的资源(bindGroup、VBO)。

通道在设置好 Pipelines (setPipeline)和资源绑定(setVertexBuffer、setBindGroup)、绘制命令(draw)触发之后,要进行编码(endPass),编码完成即可告诉指令编码器完成一个通道编码器的编码,并将指令编码器提交到渲染队列。

通道有两种

GPUProgrammablePassEncoder ├ GPURenderPassEncoder └ GPUComputePassEncoder

本文介绍原文 13、14、15 章的部分内容。

可编程通道编码器:GPUProgrammablePassEncoder

简称为通道编码器,它有两种子类型,渲染通道编码器 GPURenderPassEncoder 和计算通道编码器 GPUComputePassEncoder

通道编码器的主要功能就是将不同的 pipeline 和绑定组根据实际需要排列组合在一起,完成一帧完整的渲染或一次完整的计算。

通道编码器的主要功能是,设置(切换)绑定组、VBO和设置(切换)管线。除此之外,还可以进行调试,但是调试并不作为此文关注的内容,有兴趣的读者可以自行查阅文档。

创建通道编码器

由某个指令编码器创建,具体见下文两种编码器的创建小节。

设置绑定组 setBindGroup

此方法是每一种具体的通道编码器都具备的功能,有两种重载

  • setBindGroup(index, bindGroup, dynamicOffsets)
  • setBindGroup(index, bindGroup, dynamicOffsetsData, dynamicOffsetsDataStart, dynamicOffsetsDataLength)

其目的都是向位于 index 位置的 bindGroupLayout 传递 GPUBindGroup 对象 bindGroup,后面的动态偏移值、动态偏移数据等高级用法见官方文档。

通常,只用到前面两个参数即可。

1 渲染通道编码器

1.1 创建

使用指令编码器(GPUCommandEncoder)的 beginRenderPass 方法即可创建一个渲染通道编码器:

const renderPassEncoder = commandEncoder.beginRenderPass({   /* {}: GPURenderPassDescriptor */ })

参数对象是 GPURenderPassDescriptor 类型的,它不能是空且必须传递。

dictionary GPURenderPassDescriptor : GPUObjectDescriptorBase {   required sequence<GPURenderPassColorAttachment> colorAttachments;   GPURenderPassDepthStencilAttachment depthStencilAttachment;   GPUQuerySet occlusionQuerySet; };

它有一个必选的数组参数 colorAttachments,数组元素类型是 GPURenderPassColorAttachment,表示其颜色附件,此数组长度≤8且>0;若为 0,那么深度模板附件参数 depthStencilAttachment 不能为 null。

还有两个可选参数,GPURenderPassDepthStencilAttachment 类型的 depthStencilAttachment,表示其深度纹理附件;GPUQuerySet 类型的 occlusionQuerySet,表示一些查询有关的信息集。

1.1.1 颜色附件

dictionary GPURenderPassColorAttachment {   required GPUTextureView view;   GPUTextureView resolveTarget;    required (GPULoadOp or GPUColor) loadValue;   required GPUStoreOp storeOp; };

颜色附件,是指渲染管线输出的颜色保存到什么地方去的一种结果容器。

而颜色附件对象,是在渲染通道编码器创建时的一个参数,用于描述。它有三个必选字段:

  • viewGPUTextureView 类型,指颜色最终要输出到哪个纹理(视图)对象上;
  • loadValueGPULoadOpGPUColor 类型,指定初始化时的行为或颜色;
  • storeOpGPUStoreOp 类型,指定渲染通道执行结束后对 view 的存储行为

还有一个可选参数 resolveTargetGPUTextureView 类型,它用来接收当 view 使用了多重采样时的颜色输出结果,即配合多重采样抗锯齿技术使用。若设置了 resolveTarget,即使用了多重采样,那么 view 是“中途的”,而 resolveTarget 一般会设为 Canvas 的纹理视图。

GPULoadOp、GPUStoreOp 两个类型见下:

GPULoadOp:初始化行为

它是一个单字符串值枚举:

enum GPULoadOp {   "load" };

如果为颜色附件的 loadValue 指定了 “load”,那么渲染通道开始时,颜色附件的初始颜色会用颜色附件上已有的颜色。

注意,在某些设备(譬如移动端)上,对 loadValue 使用 GPUColor 来初始化会好得多。

GPUStoreOp:存储行为

enum GPUStoreOp {   "store",   "discard" };

“store” 表示通道结束后,颜色保存,”discard” 表示通道结束后,颜色丢弃。

1.1.2 深度模板附件

dictionary GPURenderPassDepthStencilAttachment {   required GPUTextureView view;    required (GPULoadOp or float) depthLoadValue;   required GPUStoreOp depthStoreOp;   boolean depthReadOnly = false;    required (GPULoadOp or GPUStencilValue) stencilLoadValue;   required GPUStoreOp stencilStoreOp;   boolean stencilReadOnly = false; };

深度模板附件是渲染通道的第二大部分,负责保存通道结束后输出的深度和模板值。

view 参数与颜色附件的作用类似,提供容器。

depthLoadValuestencilLoadValue 与颜色附件中的 loadValue 作用也类似,区别在类型不大一样。

depthStoreOpstencilStoreOp 与颜色附件中的 storeOp 也是类似的。

多出来两个可选字段 depthReadOnlystencilReadOnly 默认值是 false,它们的意思是指示 view 这个纹理视图中,深度/模板的部分是否是只读的。

对深度模板附件的合规性校验省略,也不复杂,有兴趣的读者可自己到规范文档中查阅。

1.1.3 译者注

渲染通道与 WebGL 中的 Framebuffer 非常相似。

1.2 触发绘制功能相关的方法

以下方法均在渲染通道编码器上。

setPipeline 方法

设置(或者说切换到也行)管线的方法,参数是一个 GPURenderPipeline 对象。

undefined setPipeline(GPURenderPipeline pipeline);

setVertexBuffer 方法

这个是设置顶点数据(VertexBuffer)的方法。

方法签名:

“` web-idl

系列博客目录传送门:https://xiaozhuanlan.com/topic/9587342601

  • 可编程通道编码器:GPUProgrammablePassEncoder
    • 创建通道编码器
    • 设置绑定组 setBindGroup
  • 1 渲染通道编码器
    • 1.1 创建
      • 1.1.1 颜色附件
        • GPULoadOp:初始化行为
        • GPUStoreOp:存储行为
      • 1.1.2 深度模板附件
      • 1.1.3 译者注
    • 1.2 触发绘制功能相关的方法
      • setPipeline 方法
      • setVertexBuffer 方法


Pass,通道。

通道允许使用多个 Pipelines。

Pipelines 允许切换不同的资源(bindGroup、VBO)。

通道在设置好 Pipelines (setPipeline)和资源绑定(setVertexBuffer、setBindGroup)、绘制命令(draw)触发之后,要进行编码(endPass),编码完成即可告诉指令编码器完成一个通道编码器的编码,并将指令编码器提交到渲染队列。

通道有两种

GPUProgrammablePassEncoder ├ GPURenderPassEncoder └ GPUComputePassEncoder

本文介绍原文 13、14、15 章的部分内容。

可编程通道编码器:GPUProgrammablePassEncoder

简称为通道编码器,它有两种子类型,渲染通道编码器 GPURenderPassEncoder 和计算通道编码器 GPUComputePassEncoder

通道编码器的主要功能就是将不同的 pipeline 和绑定组根据实际需要排列组合在一起,完成一帧完整的渲染或一次完整的计算。

通道编码器的主要功能是,设置(切换)绑定组、VBO和设置(切换)管线。除此之外,还可以进行调试,但是调试并不作为此文关注的内容,有兴趣的读者可以自行查阅文档。

创建通道编码器

由某个指令编码器创建,具体见下文两种编码器的创建小节。

设置绑定组 setBindGroup

此方法是每一种具体的通道编码器都具备的功能,有两种重载

  • setBindGroup(index, bindGroup, dynamicOffsets)
  • setBindGroup(index, bindGroup, dynamicOffsetsData, dynamicOffsetsDataStart, dynamicOffsetsDataLength)

其目的都是向位于 index 位置的 bindGroupLayout 传递 GPUBindGroup 对象 bindGroup,后面的动态偏移值、动态偏移数据等高级用法见官方文档。

通常,只用到前面两个参数即可。

1 渲染通道编码器

1.1 创建

使用指令编码器(GPUCommandEncoder)的 beginRenderPass 方法即可创建一个渲染通道编码器:

const renderPassEncoder = commandEncoder.beginRenderPass({   /* {}: GPURenderPassDescriptor */ })

参数对象是 GPURenderPassDescriptor 类型的,它不能是空且必须传递。

dictionary GPURenderPassDescriptor : GPUObjectDescriptorBase {   required sequence<GPURenderPassColorAttachment> colorAttachments;   GPURenderPassDepthStencilAttachment depthStencilAttachment;   GPUQuerySet occlusionQuerySet; };

它有一个必选的数组参数 colorAttachments,数组元素类型是 GPURenderPassColorAttachment,表示其颜色附件,此数组长度≤8且>0;若为 0,那么深度模板附件参数 depthStencilAttachment 不能为 null。

还有两个可选参数,GPURenderPassDepthStencilAttachment 类型的 depthStencilAttachment,表示其深度纹理附件;GPUQuerySet 类型的 occlusionQuerySet,表示一些查询有关的信息集。

1.1.1 颜色附件

dictionary GPURenderPassColorAttachment {   required GPUTextureView view;   GPUTextureView resolveTarget;    required (GPULoadOp or GPUColor) loadValue;   required GPUStoreOp storeOp; };

颜色附件,是指渲染管线输出的颜色保存到什么地方去的一种结果容器。

而颜色附件对象,是在渲染通道编码器创建时的一个参数,用于描述。它有三个必选字段:

  • viewGPUTextureView 类型,指颜色最终要输出到哪个纹理(视图)对象上;
  • loadValueGPULoadOpGPUColor 类型,指定初始化时的行为或颜色;
  • storeOpGPUStoreOp 类型,指定渲染通道执行结束后对 view 的存储行为

还有一个可选参数 resolveTargetGPUTextureView 类型,它用来接收当 view 使用了多重采样时的颜色输出结果,即配合多重采样抗锯齿技术使用。若设置了 resolveTarget,即使用了多重采样,那么 view 是“中途的”,而 resolveTarget 一般会设为 Canvas 的纹理视图。

GPULoadOp、GPUStoreOp 两个类型见下:

GPULoadOp:初始化行为

它是一个单字符串值枚举:

enum GPULoadOp {   "load" };

如果为颜色附件的 loadValue 指定了 “load”,那么渲染通道开始时,颜色附件的初始颜色会用颜色附件上已有的颜色。

注意,在某些设备(譬如移动端)上,对 loadValue 使用 GPUColor 来初始化会好得多。

GPUStoreOp:存储行为

enum GPUStoreOp {   "store",   "discard" };

“store” 表示通道结束后,颜色保存,”discard” 表示通道结束后,颜色丢弃。

1.1.2 深度模板附件

dictionary GPURenderPassDepthStencilAttachment {   required GPUTextureView view;    required (GPULoadOp or float) depthLoadValue;   required GPUStoreOp depthStoreOp;   boolean depthReadOnly = false;    required (GPULoadOp or GPUStencilValue) stencilLoadValue;   required GPUStoreOp stencilStoreOp;   boolean stencilReadOnly = false; };

深度模板附件是渲染通道的第二大部分,负责保存通道结束后输出的深度和模板值。

view 参数与颜色附件的作用类似,提供容器。

depthLoadValuestencilLoadValue 与颜色附件中的 loadValue 作用也类似,区别在类型不大一样。

depthStoreOpstencilStoreOp 与颜色附件中的 storeOp 也是类似的。

多出来两个可选字段 depthReadOnlystencilReadOnly 默认值是 false,它们的意思是指示 view 这个纹理视图中,深度/模板的部分是否是只读的。

对深度模板附件的合规性校验省略,也不复杂,有兴趣的读者可自己到规范文档中查阅。

1.1.3 译者注

渲染通道与 WebGL 中的 Framebuffer 非常相似。

1.2 触发绘制功能相关的方法

以下方法均在渲染通道编码器上。

setPipeline 方法

设置(或者说切换到也行)管线的方法,参数是一个 GPURenderPipeline 对象。

undefined setPipeline(GPURenderPipeline pipeline);

setVertexBuffer 方法

这个是设置顶点数据(VertexBuffer)的方法。

方法签名:

“` web-idl

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » WebGPU 规范篇 09 通道求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们