GPUDevice: createShaderModule() 方法
createShaderModule()
方法是 GPUDevice
接口的一部分,它从 WGSL 源代码字符串创建 GPUShaderModule
。
语法
js
createShaderModule(descriptor)
参数
descriptor
-
包含以下属性的对象
code
-
表示着色器模块的 WGSL 源代码的字符串。
hints
可选-
一系列记录类型,结构为
("string", compilationHint)
。它们的行为类似于有序映射。在每种情况下,"string"
都是用于标识或选择记录的键,compilationHint
则是GPUPipelineLayout
对象实例或枚举值"auto"
。hints
的目的是尽早提供有关管道布局的信息,以提高性能。其目的是最大限度地提高createShaderModule()
可以完成的编译量,而不是在对GPUDevice.createComputePipeline()
和GPUDevice.createRenderPipeline()
的多次调用中多次执行。注意:不同的实现可能以不同的方式处理
hints
,包括可能完全忽略它们。提供提示不能保证所有浏览器/系统上的着色器编译性能都能得到改善。 label
可选-
一个字符串,提供一个标签,可以用来标识该对象,例如在
GPUError
消息或控制台警告中。 sourceMap
可选-
一个源映射定义,用于提供开发者工具集成,例如源语言调试。源映射中的 WGSL 名称(标识符)应遵循 WGSL 标识符比较 中定义的规则。如果定义,源映射可以被解释为 源映射 v3 格式。
注意:不同的实现可能以不同的方式处理
sourceMap
,包括可能完全忽略它们。
返回值
一个 GPUShaderModule
对象实例。
示例
在我们的基本渲染演示中,我们的着色器模块使用以下代码创建
js
const shaders = `
struct VertexOut {
@builtin(position) position : vec4f,
@location(0) color : vec4f
}
@vertex
fn vertex_main(@location(0) position: vec4f,
@location(1) color: vec4f) -> VertexOut
{
var output : VertexOut;
output.position = position;
output.color = color;
return output;
}
@fragment
fn fragment_main(fragData: VertexOut) -> @location(0) vec4f
{
return fragData.color;
}
`;
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
let device = await adapter.requestDevice();
// ...
// later on
const shaderModule = device.createShaderModule({
code: shaders,
});
// ...
}
规范
规范 |
---|
WebGPU # dom-gpudevice-createshadermodule |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。