/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ // https://gpuweb.github.io/gpuweb/#gpurenderpipeline [Exposed=(Window, DedicatedWorker), Serializable, Pref="dom.webgpu.enabled"] interface GPURenderPipeline { }; GPURenderPipeline includes GPUObjectBase; GPURenderPipeline includes GPUPipelineBase; dictionary GPURenderPipelineDescriptor : GPUPipelineDescriptorBase { required GPUProgrammableStageDescriptor vertexStage; GPUProgrammableStageDescriptor fragmentStage; required GPUPrimitiveTopology primitiveTopology; GPURasterizationStateDescriptor rasterizationState = {}; required sequence colorStates; GPUDepthStencilStateDescriptor depthStencilState; GPUVertexStateDescriptor vertexState = {}; GPUSize32 sampleCount = 1; GPUSampleMask sampleMask = 0xFFFFFFFF; boolean alphaToCoverageEnabled = false; }; typedef [EnforceRange] unsigned long GPUSampleMask; enum GPUPrimitiveTopology { "point-list", "line-list", "line-strip", "triangle-list", "triangle-strip" }; typedef [EnforceRange] long GPUDepthBias; dictionary GPURasterizationStateDescriptor { GPUFrontFace frontFace = "ccw"; GPUCullMode cullMode = "none"; // Enable depth clamping (requires "depth-clamping" extension) boolean clampDepth = false; GPUDepthBias depthBias = 0; float depthBiasSlopeScale = 0; float depthBiasClamp = 0; }; enum GPUFrontFace { "ccw", "cw" }; enum GPUCullMode { "none", "front", "back" }; dictionary GPUColorStateDescriptor { required GPUTextureFormat format; GPUBlendDescriptor alphaBlend = {}; GPUBlendDescriptor colorBlend = {}; GPUColorWriteFlags writeMask = 0xF; // GPUColorWrite.ALL }; dictionary GPUBlendDescriptor { GPUBlendFactor srcFactor = "one"; GPUBlendFactor dstFactor = "zero"; GPUBlendOperation operation = "add"; }; enum GPUBlendFactor { "zero", "one", "src-color", "one-minus-src-color", "src-alpha", "one-minus-src-alpha", "dst-color", "one-minus-dst-color", "dst-alpha", "one-minus-dst-alpha", "src-alpha-saturated", "blend-color", "one-minus-blend-color" }; enum GPUBlendOperation { "add", "subtract", "reverse-subtract", "min", "max" }; enum GPUStencilOperation { "keep", "zero", "replace", "invert", "increment-clamp", "decrement-clamp", "increment-wrap", "decrement-wrap" }; typedef [EnforceRange] unsigned long GPUStencilValue; dictionary GPUDepthStencilStateDescriptor { required GPUTextureFormat format; boolean depthWriteEnabled = false; GPUCompareFunction depthCompare = "always"; GPUStencilStateFaceDescriptor stencilFront = {}; GPUStencilStateFaceDescriptor stencilBack = {}; GPUStencilValue stencilReadMask = 0xFFFFFFFF; GPUStencilValue stencilWriteMask = 0xFFFFFFFF; }; dictionary GPUStencilStateFaceDescriptor { GPUCompareFunction compare = "always"; GPUStencilOperation failOp = "keep"; GPUStencilOperation depthFailOp = "keep"; GPUStencilOperation passOp = "keep"; }; enum GPUIndexFormat { "uint16", "uint32" }; enum GPUVertexFormat { "uchar2", "uchar4", "char2", "char4", "uchar2norm", "uchar4norm", "char2norm", "char4norm", "ushort2", "ushort4", "short2", "short4", "ushort2norm", "ushort4norm", "short2norm", "short4norm", "half2", "half4", "float", "float2", "float3", "float4", "uint", "uint2", "uint3", "uint4", "int", "int2", "int3", "int4" }; enum GPUInputStepMode { "vertex", "instance" }; dictionary GPUVertexStateDescriptor { GPUIndexFormat indexFormat = "uint32"; sequence vertexBuffers = []; }; dictionary GPUVertexBufferLayoutDescriptor { required GPUSize64 arrayStride; GPUInputStepMode stepMode = "vertex"; required sequence attributes; }; dictionary GPUVertexAttributeDescriptor { required GPUVertexFormat format; required GPUSize64 offset; required GPUIndex32 shaderLocation; };