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 |
瀏覽器相容性
載入中…