blob: 5dcc3d9429eb343478b92de68825315300f88ff2 [file] [log] [blame]
<!DOCTYPE html>
<meta charset="utf-8">
<title>WebGPU Hello Triangles</title>
<meta name="assert" content="WebGPU correctly renders a green canvas.">
<link rel="match" href="color-write-mask-triangle-strip-expected.html">
<p>Pass if square canvas below is completely green.</p>
<canvas width="400" height="400"></canvas>
<script src="js/webgpu-functions.js"></script>
<script>
if (window.testRunner)
testRunner.waitUntilDone();
const shaderCode = `
#include <metal_stdlib>
using namespace metal;
struct Vertex
{
float4 position [[position]];
};
vertex Vertex vertex_main(uint vid [[vertex_id]])
{
Vertex v;
switch (vid) {
case 0:
v.position = float4(-1, 1, 0, 1);
break;
case 1:
v.position = float4(-1, -1, 0, 1);
break;
case 2:
v.position = float4(1, 1, 0, 1);
break;
default:
v.position = float4(1, -1, 0, 1);
}
return v;
}
fragment float4 fragment_main()
{
return float4(1, 1, 1, 1);
}
`
async function test() {
const device = await getBasicDevice();
const canvas = document.querySelector("canvas");
const swapChain = createBasicSwapChain(canvas, device);
const shaderModule = device.createShaderModule({ code: shaderCode });
const colorStates = [{
format: "bgra8unorm",
alphaBlend: {},
colorBlend: {},
writeMask: GPUColorWriteBits.GREEN | GPUColorWriteBits.ALPHA
}];
const pipeline = createBasicPipeline(shaderModule, device, colorStates);
const commandEncoder = device.createCommandEncoder();
const colorAttachment = {
attachment: swapChain.getCurrentTexture().createDefaultView(),
loadOp: "clear",
storeOp: "store",
clearColor: { r: 0, g: 0, b: 0, a: 0 }
};
const passEncoder = commandEncoder.beginRenderPass({ colorAttachments: [colorAttachment] });
encodeBasicCommands(passEncoder, pipeline);
const queue = device.getQueue();
queue.submit([commandEncoder.finish()]);
}
test().then(function() {
if (window.testRunner)
testRunner.notifyDone();
}, function() {
if (window.testRunner)
testRunner.notifyDone();
});
</script>