GPUDevice: createShaderModule() 方法
注意:此功能在 Web Workers 中可用。
GPUDevice 接口的 createShaderModule() 方法可以根据 WGSL 源代码字符串创建一个 GPUShaderModule。
语法
createShaderModule(descriptor)
参数
描述符(descriptor)-
包含以下属性的对象:
code-
一个表示着色器模块的 WGSL 源代码的字符串。
hints可选-
一系列记录类型,结构为
("string", compilationHint)。它们表现得像 有序映射。在每种情况下,"string"是用于标识或选择记录的键,而compilationHint是一个GPUPipelineLayout对象实例或"auto"的枚举值。hints的目的是尽早提供有关管道布局的信息,以提高性能。其理念是最大限度地增加createShaderModule()可以一次性完成的编译量,而不是在多次调用GPUDevice.createComputePipeline()和GPUDevice.createRenderPipeline()时重复编译。注意: 不同的实现可能会以不同的方式处理
hints,包括可能完全忽略它们。提供提示并不保证在所有浏览器/系统上都能提高着色器编译性能。 label可选-
一个字符串,提供可用于识别对象的标签,例如在
GPUError消息或控制台警告中。 sourceMap可选-
一个源映射定义,用于提供如源代码语言调试之类的开发者工具集成。源映射中的 WGSL 名称(标识符)应遵循 WGSL 标识符比较 中定义的规则。如果定义了源映射,它可能被解释为 source-map-v3 格式。
注意: 不同的实现可能会以不同的方式处理
sourceMap,包括可能完全忽略它们。
返回值
一个 GPUShaderModule 对象实例。
验证
在调用 createShaderModule() 时必须满足以下条件,否则将生成 GPUValidationError 并返回一个无效的 GPUShaderModule 对象。
示例
在我们的 基本渲染演示 中,我们的着色器模块是使用以下代码创建的:
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.");
}
const device = await adapter.requestDevice();
// …
// later on
const shaderModule = device.createShaderModule({
code: shaders,
});
// …
}
规范
| 规范 |
|---|
| WebGPU # dom-gpudevice-createshadermodule |
浏览器兼容性
加载中…