|
8 | 8 | kTextureUsages, |
9 | 9 | isValidTextureUsageCombination, |
10 | 10 | kValidCombinationsOfOneOrTwoTextureUsages, |
| 11 | + kAllTextureUsages, |
11 | 12 | } from '../../capability_info.js'; |
12 | 13 | import { GPUConst } from '../../constants.js'; |
13 | 14 | import { |
@@ -1098,6 +1099,40 @@ g.test('depthOrArrayLayers_and_mipLevelCount_for_transient_attachments') |
1098 | 1099 | }, !success); |
1099 | 1100 | }); |
1100 | 1101 |
|
| 1102 | +const kInvalidUsage = 0x8000; |
| 1103 | +assert((kInvalidUsage & kAllTextureUsages) === 0); |
| 1104 | +g.test('usage') |
| 1105 | + .desc('Test combinations of zero to two usage flags are validated to be valid.') |
| 1106 | + .params(u => |
| 1107 | + u |
| 1108 | + .combine('usage1', [0, ...kTextureUsages, kInvalidUsage]) |
| 1109 | + .combine('usage2', [0, ...kTextureUsages, kInvalidUsage]) |
| 1110 | + .filter(p => p.usage1 <= p.usage2) |
| 1111 | + ) |
| 1112 | + .fn(t => { |
| 1113 | + const { usage1, usage2 } = t.params; |
| 1114 | + const usage = usage1 | usage2; |
| 1115 | + |
| 1116 | + // MAINTENANCE_TODO(#4509): Remove this after all implementations have TRANSIENT_ATTACHMENT. |
| 1117 | + if ((usage & GPUConst.TextureUsage.TRANSIENT_ATTACHMENT) !== 0) { |
| 1118 | + t.skipIfTransientAttachmentNotSupported(); |
| 1119 | + } |
| 1120 | + |
| 1121 | + const isValid = |
| 1122 | + usage !== 0 && |
| 1123 | + (usage & ~kAllTextureUsages) === 0 && |
| 1124 | + ((usage & GPUTextureUsage.TRANSIENT_ATTACHMENT) === 0 || |
| 1125 | + usage === (GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT)); |
| 1126 | + |
| 1127 | + t.expectGPUError( |
| 1128 | + 'validation', |
| 1129 | + () => { |
| 1130 | + t.createTextureTracked({ format: 'rgba8unorm', size: [1, 1], usage }); |
| 1131 | + }, |
| 1132 | + !isValid |
| 1133 | + ); |
| 1134 | + }); |
| 1135 | + |
1101 | 1136 | g.test('viewFormats') |
1102 | 1137 | .desc( |
1103 | 1138 | `Test creating a texture with viewFormats list for all {texture format}x{view format}. Only compatible view formats should be valid.` |
|
0 commit comments