@@ -1132,6 +1132,10 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) {
1132
1132
copySize
1133
1133
) ;
1134
1134
1135
+ const use2DArray = this . isCompatibility && inputTexture . depthOrArrayLayers > 1 ;
1136
+ const [ textureType , layerCode ] = use2DArray
1137
+ ? [ 'texture_2d_array' , ', baseArrayLayer' ]
1138
+ : [ 'texture_2d' , '' ] ;
1135
1139
const renderPipeline = this . device . createRenderPipeline ( {
1136
1140
layout : 'auto' ,
1137
1141
vertex : {
@@ -1154,10 +1158,11 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) {
1154
1158
fragment : {
1155
1159
module : this . device . createShaderModule ( {
1156
1160
code : `
1157
- @group(0) @binding(0) var inputTexture: texture_2d<f32>;
1161
+ @group(0) @binding(0) var inputTexture: ${ textureType } <f32>;
1162
+ @group(0) @binding(1) var<uniform> baseArrayLayer: u32;
1158
1163
@fragment fn main(@builtin(position) fragcoord : vec4<f32>) ->
1159
1164
@builtin(frag_depth) f32 {
1160
- var depthValue : vec4<f32> = textureLoad(inputTexture, vec2<i32>(fragcoord.xy), 0);
1165
+ var depthValue : vec4<f32> = textureLoad(inputTexture, vec2<i32>(fragcoord.xy)${ layerCode } , 0);
1161
1166
return depthValue.x;
1162
1167
}` ,
1163
1168
} ) ,
@@ -1200,19 +1205,26 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) {
1200
1205
} ) ;
1201
1206
renderPass . setPipeline ( renderPipeline ) ;
1202
1207
1208
+ const uniformBufferEntry = use2DArray
1209
+ ? [ this . createUniformBufferAndBindGroupEntryForBaseArrayLayer ( z ) ]
1210
+ : [ ] ;
1211
+
1203
1212
const bindGroup = this . device . createBindGroup ( {
1204
1213
layout : renderPipeline . getBindGroupLayout ( 0 ) ,
1205
1214
entries : [
1206
1215
{
1207
1216
binding : 0 ,
1208
1217
resource : inputTexture . createView ( {
1209
- dimension : '2d' ,
1210
- baseArrayLayer : z ,
1211
- arrayLayerCount : 1 ,
1218
+ dimension : use2DArray ? '2d-array' : '2d' ,
1219
+ ...( use2DArray && {
1220
+ baseArrayLayer : z ,
1221
+ arrayLayerCount : 1 ,
1222
+ } ) ,
1212
1223
baseMipLevel : 0 ,
1213
1224
mipLevelCount : 1 ,
1214
1225
} ) ,
1215
1226
} ,
1227
+ ...uniformBufferEntry ,
1216
1228
] ,
1217
1229
} ) ;
1218
1230
renderPass . setBindGroup ( 0 , bindGroup ) ;
@@ -1223,6 +1235,23 @@ class ImageCopyTest extends TextureTestMixin(GPUTest) {
1223
1235
this . queue . submit ( [ encoder . finish ( ) ] ) ;
1224
1236
}
1225
1237
1238
+ createUniformBufferAndBindGroupEntryForBaseArrayLayer ( z : number ) {
1239
+ const buffer = this . device . createBuffer ( {
1240
+ usage : GPUBufferUsage . UNIFORM ,
1241
+ size : 4 ,
1242
+ mappedAtCreation : true ,
1243
+ } ) ;
1244
+ this . trackForCleanup ( buffer ) ;
1245
+ new Uint32Array ( buffer . getMappedRange ( ) ) . set ( [ z ] ) ;
1246
+ buffer . unmap ( ) ;
1247
+ return {
1248
+ binding : 1 ,
1249
+ resource : {
1250
+ buffer,
1251
+ } ,
1252
+ } ;
1253
+ }
1254
+
1226
1255
DoCopyTextureToBufferWithDepthAspectTest (
1227
1256
format : DepthStencilFormat ,
1228
1257
copySize : readonly [ number , number , number ] ,
0 commit comments