| export const description = `Validation tests for discard`; |
| |
| import { makeTestGroup } from '../../../../common/framework/test_group.js'; |
| import { ShaderValidationTest } from '../shader_validation_test.js'; |
| |
| export const g = makeTestGroup(ShaderValidationTest); |
| |
| g.test('placement') |
| .desc('Test that discard usage is validated') |
| .params(u => |
| u.combine('place', ['compute', 'vertex', 'fragment', 'module', 'subfrag', 'subvert', 'subcomp']) |
| ) |
| .fn(t => { |
| const pos: { [key: string]: string } = { |
| module: '', |
| subvert: '', |
| subfrag: '', |
| subcomp: '', |
| vertex: '', |
| fragment: '', |
| compute: '', |
| }; |
| |
| pos[t.params.place] = 'discard;'; |
| |
| const code = ` |
| ${pos.module} |
| |
| fn subvert() { |
| ${pos.subvert} |
| } |
| |
| @vertex |
| fn vtx() -> @builtin(position) vec4f { |
| ${pos.vertex} |
| subvert(); |
| return vec4f(1); |
| } |
| |
| fn subfrag() { |
| ${pos.subfrag} |
| } |
| |
| @fragment |
| fn frag() -> @location(0) vec4f { |
| ${pos.fragment} |
| subfrag(); |
| return vec4f(1); |
| } |
| |
| fn subcomp() { |
| ${pos.subcomp} |
| } |
| |
| @compute |
| @workgroup_size(1) |
| fn comp() { |
| ${pos.compute} |
| subcomp(); |
| } |
| `; |
| |
| const pass = ['fragment', 'subfrag'].includes(t.params.place); |
| t.expectCompileResult(pass, code); |
| }); |