export const description = ` Tests for capabilities added by rg11b10ufloat-renderable flag. `; import { makeTestGroup } from '../../../../common/framework/test_group.js'; import { GPUConst } from '../../../constants.js'; import { AllFeaturesMaxLimitsGPUTest } from '../../../gpu_test.js'; import * as vtu from '../validation_test_utils.js'; export const g = makeTestGroup(AllFeaturesMaxLimitsGPUTest); g.test('create_texture') .desc( ` Test that it is valid to create rg11b10ufloat texture with RENDER_ATTACHMENT usage and/or sampleCount > 1, iff rg11b10ufloat-renderable feature is enabled. Note, the createTexture tests cover these validation cases where this feature is not enabled. ` ) .params(u => u.combine('sampleCount', [1, 4])) .fn(t => { t.skipIfDeviceDoesNotHaveFeature('rg11b10ufloat-renderable'); const { sampleCount } = t.params; const descriptor = { size: [1, 1, 1], format: 'rg11b10ufloat' as const, sampleCount, usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, }; t.createTextureTracked(descriptor); }); g.test('begin_render_pass_single_sampled') .desc( ` Test that it is valid to begin render pass with rg11b10ufloat texture format iff rg11b10ufloat-renderable feature is enabled. Single sampled case. ` ) .fn(t => { t.skipIfDeviceDoesNotHaveFeature('rg11b10ufloat-renderable'); const texture = t.createTextureTracked({ size: [1, 1, 1], format: 'rg11b10ufloat', sampleCount: 1, usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, }); const encoder = t.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ { view: texture.createView(), clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, loadOp: 'clear', storeOp: 'store', }, ], }); pass.end(); encoder.finish(); }); g.test('begin_render_pass_msaa_and_resolve') .desc( ` Test that it is valid to begin render pass with rg11b10ufloat texture format iff rg11b10ufloat-renderable feature is enabled. MSAA and resolve case. ` ) .fn(t => { t.skipIfDeviceDoesNotHaveFeature('rg11b10ufloat-renderable'); const renderTexture = t.createTextureTracked({ size: [1, 1, 1], format: 'rg11b10ufloat', sampleCount: 4, usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, }); const resolveTexture = t.createTextureTracked({ size: [1, 1, 1], format: 'rg11b10ufloat', sampleCount: 1, usage: GPUConst.TextureUsage.RENDER_ATTACHMENT, }); const encoder = t.device.createCommandEncoder(); const pass = encoder.beginRenderPass({ colorAttachments: [ { view: renderTexture.createView(), resolveTarget: resolveTexture.createView(), clearValue: { r: 1.0, g: 0.0, b: 0.0, a: 1.0 }, loadOp: 'clear', storeOp: 'store', }, ], }); pass.end(); encoder.finish(); }); g.test('begin_render_bundle_encoder') .desc( ` Test that it is valid to begin render bundle encoder with rg11b10ufloat texture format iff rg11b10ufloat-renderable feature is enabled. ` ) .fn(t => { t.skipIfDeviceDoesNotHaveFeature('rg11b10ufloat-renderable'); t.device.createRenderBundleEncoder({ colorFormats: ['rg11b10ufloat'], }); }); g.test('create_render_pipeline') .desc( ` Test that it is valid to create render pipeline with rg11b10ufloat texture format in descriptor.fragment.targets iff rg11b10ufloat-renderable feature is enabled. ` ) .fn(t => { t.skipIfDeviceDoesNotHaveFeature('rg11b10ufloat-renderable'); t.device.createRenderPipeline({ layout: 'auto', vertex: { module: t.device.createShaderModule({ code: vtu.getNoOpShaderCode('VERTEX'), }), entryPoint: 'main', }, fragment: { module: t.device.createShaderModule({ code: vtu.getNoOpShaderCode('FRAGMENT'), }), entryPoint: 'main', targets: [{ format: 'rg11b10ufloat', writeMask: 0 }], }, primitive: { topology: 'triangle-list' }, }); });