blob: 5fd60b8d5b6d6ec6c94ab3780b20cdfb533c24be [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="blend-color-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 = `
vertex float4 vertex_main(uint vid : SV_VertexID) : SV_Position {
float4 result;
switch (vid) {
case 0:
result = float4(-1, 1, 0, 1);
break;
case 1:
result = float4(-1, -1, 0, 1);
break;
case 2:
result = float4(1, 1, 0, 1);
break;
default:
result = float4(1, -1, 0, 1);
break;
}
return result;
}
fragment float4 fragment_main() : SV_Target 0 {
return float4(0, 1, 1, 1);
}
`;
const canvas = document.querySelector("canvas");
async function start(device) {
const swapChain = createBasicSwapChain(canvas, device);
// FIXME: Replace with non-MSL shaders.
const shaderModule = device.createShaderModule({ code: shaderCode });
const colorStates = [{
format: "bgra8unorm",
alphaBlend: {
srcFactor: "blend-color",
dstFactor: "blend-color",
operation: "add"
},
colorBlend: {
srcFactor: "blend-color",
dstFactor: "blend-color",
operation: "add"
},
writeMask: GPUColorWrite.ALL
}];
const pipeline = createBasicPipeline(shaderModule, device, colorStates);
const commandEncoder = device.createCommandEncoder();
const passEncoder = beginBasicRenderPass(swapChain, commandEncoder);
passEncoder.setBlendColor({ r: 0, g: 1, b: 0, a: 1 });
encodeBasicCommands(passEncoder, pipeline);
const queue = device.getQueue();
queue.submit([commandEncoder.finish()]);
}
getBasicDevice().then(function(device) {
start(device).then(function() {
if (window.testRunner)
testRunner.notifyDone();
}, function() {
if (window.testRunner)
testRunner.notifyDone();
});
}, function() {
drawGreenSquareInSoftware(canvas);
if (window.testRunner)
testRunner.notifyDone();
});
</script>