@@ -89,7 +89,22 @@ ResourceInitializer::initDepthStencilWithZero(
8989 RETAIN (allocation);
9090 ALLOC_CLEAR (info);
9191
92- info->render_target_array_length = 0 ;
92+ switch (texture->textureType ()) {
93+ case WMTTextureType1DArray:
94+ case WMTTextureType2DArray:
95+ case WMTTextureType2DMultisampleArray:
96+ case WMTTextureTypeCube:
97+ case WMTTextureTypeCubeArray:
98+ info->render_target_array_length = texture->arrayLength ();
99+ break ;
100+ case WMTTextureType3D:
101+ // should be unreachable since depth stencil texture cannot be 3d or cube
102+ info->render_target_array_length = std::max (1u , texture->depth () >> level);
103+ break ;
104+ default :
105+ info->render_target_array_length = 0 ;
106+ break ;
107+ }
93108 info->render_target_width = width_sub;
94109 info->render_target_height = height_sub;
95110 if (dsv_planar & 1 ) {
@@ -126,7 +141,21 @@ ResourceInitializer::initRenderTargetWithZero(
126141 RETAIN (allocation);
127142 ALLOC_CLEAR (info);
128143
129- info->render_target_array_length = texture->textureType () == WMTTextureType3D ? texture->depth () : 0 ;
144+ switch (texture->textureType ()) {
145+ case WMTTextureType1DArray:
146+ case WMTTextureType2DArray:
147+ case WMTTextureType2DMultisampleArray:
148+ case WMTTextureTypeCube:
149+ case WMTTextureTypeCubeArray:
150+ info->render_target_array_length = texture->arrayLength ();
151+ break ;
152+ case WMTTextureType3D:
153+ info->render_target_array_length = std::max (1u , texture->depth () >> level);
154+ break ;
155+ default :
156+ info->render_target_array_length = 0 ;
157+ break ;
158+ }
130159 info->render_target_width = width_sub;
131160 info->render_target_height = height_sub;
132161 info->colors [0 ].texture = allocation->texture ();
0 commit comments