},
};
- if (aspect == VK_IMAGE_ASPECT_STENCIL_BIT) {
- iview_info.components.r = VK_COMPONENT_SWIZZLE_G;
- iview_info.components.g = VK_COMPONENT_SWIZZLE_G;
- iview_info.components.b = VK_COMPONENT_SWIZZLE_G;
- iview_info.components.a = VK_COMPONENT_SWIZZLE_G;
- } else if (aspect == VK_IMAGE_ASPECT_STENCIL_BIT) {
- iview_info.components.r = VK_COMPONENT_SWIZZLE_R;
- iview_info.components.g = VK_COMPONENT_SWIZZLE_R;
- iview_info.components.b = VK_COMPONENT_SWIZZLE_R;
- iview_info.components.a = VK_COMPONENT_SWIZZLE_R;
- }
-
switch (img->vk.image_type) {
case VK_IMAGE_TYPE_1D:
iview_info.viewType = img->vk.array_layers > 1 ?
for (uint32_t i = 0; i < ARRAY_SIZE(swz); i++)
swz[i] = bgra4_remap[swz[i]];
+ } else if (iview->vk.aspects & VK_IMAGE_ASPECT_STENCIL_BIT) {
+ /* D3D puts stencil in G, not R. Requests for R should be routed to G and vice versa. */
+ for (uint32_t i = 0; i < ARRAY_SIZE(swz); i++) {
+ if (swz[i] == D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0)
+ swz[i] = D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1;
+ else if (swz[i] == D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1)
+ swz[i] = D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0;
+ }
}
iview->srv_desc.Shader4ComponentMapping =