| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../js/webgpu-functions.js"></script> |
| <script src="../../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script> |
| const vertexShaderSource = ` |
| enum Foo { |
| v |
| } |
| vertex float4 vertexShader(float4 position : attribute(0)) : SV_Position { |
| return position; |
| }`; |
| |
| const fragmentShaderSource = ` |
| fragment float4 fragmentShader(float4 position : SV_Position) : SV_Target 0 { |
| Foo x = Foo.v; |
| return float4(1, 1, 1, 1); |
| } |
| `; |
| |
| async function start(device) { |
| const vertexShaderModule = device.createShaderModule({code: vertexShaderSource}); |
| const fragmentShaderModule = device.createShaderModule({code: fragmentShaderSource}); |
| const vertexStage = {module: vertexShaderModule, entryPoint: "vertexShader"}; |
| const fragmentStage = {module: fragmentShaderModule, entryPoint: "fragmentShader"}; |
| const primitiveTopology = "triangle-strip"; |
| const rasterizationState = {frontFace: "cw", cullMode: "none"}; |
| const alphaBlend = {}; |
| const colorBlend = {}; |
| const colorStates = [{format: "rgba8unorm", alphaBlend, colorBlend, writeMask: 15}]; // GPUColorWrite.ALL |
| const depthStencilState = null; |
| |
| const attribute = {shaderLocation: 0, format: "float4"}; |
| const input = {stride: 16, attributeSet: [attribute]}; |
| const inputs = [input]; |
| const vertexInput = {vertexBuffers: inputs}; |
| |
| const pipelineLayoutDescriptor = {bindGroupLayouts: []}; |
| const pipelineLayout = device.createPipelineLayout(pipelineLayoutDescriptor); |
| |
| device.pushErrorScope("validation"); |
| const renderPipelineDescriptor = {vertexStage, fragmentStage, primitiveTopology, rasterizationState, colorStates, depthStencilState, vertexInput, sampleCount: 1, layout: pipelineLayout}; |
| const renderPipeline = device.createRenderPipeline(renderPipelineDescriptor); |
| return device.popErrorScope(); |
| } |
| window.jsTestIsAsync = true; |
| getBasicDevice().then(function(device) { |
| start(device).then(function(x) { |
| if (x) |
| testPassed(""); |
| else |
| testFailed(""); |
| finishJSTest(); |
| }, function() { |
| testFailed(""); |
| finishJSTest(); |
| }); |
| }, function() { |
| testPassed(); |
| finishJSTest(); |
| }); |
| </script> |
| <script src="../../../resources/js-test-post.js"></script> |
| </body> |
| </html> |