Skip to content

Commit c696ca9

Browse files
committed
fix(dxmt): populate correct render target array length for RT/DS zero-init
1 parent d068c86 commit c696ca9

1 file changed

Lines changed: 31 additions & 2 deletions

File tree

src/dxmt/dxmt_resource_initializer.cpp

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)