Skip to content

Commit 8a6d878

Browse files
authored
Fix rg11b10ufloat filter_mode tests (#4293)
1 parent 7855377 commit 8a6d878

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

src/webgpu/api/operation/sampling/filter_mode.spec.ts

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { kAddressModes, kMipmapFilterModes } from '../../../capability_info.js';
1111
import {
1212
EncodableTextureFormat,
1313
getTextureFormatType,
14+
isTextureFormatColorRenderable,
1415
kPossibleColorRenderableTextureFormats,
1516
} from '../../../format_info.js';
1617
import { AllFeaturesMaxLimitsGPUTest, TextureTestMixin } from '../../../gpu_test.js';
@@ -46,6 +47,12 @@ class FilterModeTest extends TextureTestMixin(AllFeaturesMaxLimitsGPUTest) {
4647
vertexCount: number,
4748
instanceCount: number
4849
) {
50+
let renderTargetFormat = format;
51+
if (!isTextureFormatColorRenderable(this.device, format)) {
52+
// If the format is not renderable, we use rgba32float as the render target format
53+
// to verify the result, which is always renderable.
54+
renderTargetFormat = 'rgba32float';
55+
}
4956
const sampleTexture = this.createTextureFromTexelView(
5057
TexelView.fromTexelsAsColors(format, coord => {
5158
const id = coord.x + coord.y * kCheckerTextureSize;
@@ -57,7 +64,7 @@ class FilterModeTest extends TextureTestMixin(AllFeaturesMaxLimitsGPUTest) {
5764
}
5865
);
5966
const renderTexture = this.createTextureTracked({
60-
format,
67+
format: renderTargetFormat,
6168
size: renderSize,
6269
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
6370
});
@@ -70,7 +77,7 @@ class FilterModeTest extends TextureTestMixin(AllFeaturesMaxLimitsGPUTest) {
7077
fragment: {
7178
module,
7279
entryPoint: 'fs_main',
73-
targets: [{ format }],
80+
targets: [{ format: renderTargetFormat }],
7481
},
7582
});
7683
const bindgroup = this.device.createBindGroup({
@@ -96,7 +103,7 @@ class FilterModeTest extends TextureTestMixin(AllFeaturesMaxLimitsGPUTest) {
96103
renderPass.draw(vertexCount, instanceCount);
97104
renderPass.end();
98105
this.device.queue.submit([commandEncoder.finish()]);
99-
return renderTexture;
106+
return { texture: renderTexture, format: renderTargetFormat };
100107
}
101108
}
102109

@@ -548,8 +555,8 @@ g.test('magFilter,nearest')
548555
instanceCount
549556
);
550557
t.expectTexelViewComparisonIsOkInTexture(
551-
{ texture: render },
552-
expectedColors(format, 'nearest', addressModeU, addressModeV),
558+
{ texture: render.texture },
559+
expectedColors(render.format, 'nearest', addressModeU, addressModeV),
553560
kNearestRenderDim
554561
);
555562
});
@@ -663,8 +670,8 @@ g.test('magFilter,linear')
663670
instanceCount
664671
);
665672
t.expectTexelViewComparisonIsOkInTexture(
666-
{ texture: render },
667-
expectedColors(format, 'linear', addressModeU, addressModeV),
673+
{ texture: render.texture },
674+
expectedColors(render.format, 'linear', addressModeU, addressModeV),
668675
kLinearRenderDim
669676
);
670677
});
@@ -790,8 +797,8 @@ g.test('minFilter,nearest')
790797
instanceCount
791798
);
792799
t.expectTexelViewComparisonIsOkInTexture(
793-
{ texture: render },
794-
expectedColors(format, 'nearest', addressModeU, addressModeV),
800+
{ texture: render.texture },
801+
expectedColors(render.format, 'nearest', addressModeU, addressModeV),
795802
kNearestRenderDim
796803
);
797804
});
@@ -915,8 +922,8 @@ g.test('minFilter,linear')
915922
instanceCount
916923
);
917924
t.expectTexelViewComparisonIsOkInTexture(
918-
{ texture: render },
919-
expectedColors(format, 'linear', addressModeU, addressModeV),
925+
{ texture: render.texture },
926+
expectedColors(render.format, 'linear', addressModeU, addressModeV),
920927
kLinearRenderDim
921928
);
922929
});
@@ -939,6 +946,12 @@ g.test('mipmapFilter')
939946
const { format, filterMode } = t.params;
940947
t.skipIfTextureFormatNotSupported(format);
941948
t.skipIfTextureFormatNotFilterable(format);
949+
let renderTargetFormat = format;
950+
if (!isTextureFormatColorRenderable(t.device, format)) {
951+
// If the format is not renderable, we use rgba32float as the render target format
952+
// to verify the result, which is always renderable.
953+
renderTargetFormat = 'rgba32float';
954+
}
942955
// Takes a 8x8/4x4 mipmapped texture and renders it on multiple quads with different UVs such
943956
// that each instanced quad from left to right emulates moving the quad further and further from
944957
// the camera. Each quad is then rendered to a single pixel in a 1-dimensional texture. Since
@@ -966,7 +979,7 @@ g.test('mipmapFilter')
966979
}
967980
);
968981
const renderTexture = t.createTextureTracked({
969-
format,
982+
format: renderTargetFormat,
970983
size: [kRenderSize, 1],
971984
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
972985
});
@@ -1016,7 +1029,7 @@ g.test('mipmapFilter')
10161029
fragment: {
10171030
module,
10181031
entryPoint: 'fs_main',
1019-
targets: [{ format }],
1032+
targets: [{ format: renderTargetFormat }],
10201033
},
10211034
});
10221035
const bindgroup = t.device.createBindGroup({
@@ -1050,8 +1063,8 @@ g.test('mipmapFilter')
10501063
buffer,
10511064
actual => {
10521065
// Convert the buffer to texel view so we can do comparisons.
1053-
const layout = getTextureCopyLayout(format, '2d', [kRenderSize, 1, 1]);
1054-
const view = TexelView.fromTextureDataByReference(format, actual, {
1066+
const layout = getTextureCopyLayout(renderTargetFormat, '2d', [kRenderSize, 1, 1]);
1067+
const view = TexelView.fromTextureDataByReference(renderTargetFormat, actual, {
10551068
bytesPerRow: layout.bytesPerRow,
10561069
rowsPerImage: layout.rowsPerImage,
10571070
subrectOrigin: [0, 0, 0],

0 commit comments

Comments
 (0)