diff --git a/src/dxvk/dxvk_image.cpp b/src/dxvk/dxvk_image.cpp index d5729351..7f21e813 100644 --- a/src/dxvk/dxvk_image.cpp +++ b/src/dxvk/dxvk_image.cpp @@ -63,12 +63,6 @@ namespace dxvk { const Rc& image, const DxvkImageViewCreateInfo& info) : m_vkd(vkd), m_image(image), m_info(info) { - VkComponentMapping componentMapping; - componentMapping.r = VK_COMPONENT_SWIZZLE_IDENTITY; - componentMapping.g = VK_COMPONENT_SWIZZLE_IDENTITY; - componentMapping.b = VK_COMPONENT_SWIZZLE_IDENTITY; - componentMapping.a = VK_COMPONENT_SWIZZLE_IDENTITY; - VkImageSubresourceRange subresourceRange; subresourceRange.aspectMask = info.aspect; subresourceRange.baseMipLevel = info.minLevel; @@ -83,7 +77,7 @@ namespace dxvk { viewInfo.image = image->handle(); viewInfo.viewType = info.type; viewInfo.format = info.format; - viewInfo.components = componentMapping; + viewInfo.components = info.swizzle; viewInfo.subresourceRange = subresourceRange; if (m_vkd->vkCreateImageView(m_vkd->device(), &viewInfo, nullptr, &m_view) != VK_SUCCESS) diff --git a/src/dxvk/dxvk_image.h b/src/dxvk/dxvk_image.h index 0dd8b83e..df1414ca 100644 --- a/src/dxvk/dxvk_image.h +++ b/src/dxvk/dxvk_image.h @@ -60,17 +60,26 @@ namespace dxvk { */ struct DxvkImageViewCreateInfo { /// Image view dimension - VkImageViewType type; + VkImageViewType type = VK_IMAGE_VIEW_TYPE_2D; /// Pixel format - VkFormat format; + VkFormat format = VK_FORMAT_UNDEFINED; /// Subresources to use in the view - VkImageAspectFlags aspect; - uint32_t minLevel; - uint32_t numLevels; - uint32_t minLayer; - uint32_t numLayers; + VkImageAspectFlags aspect = 0; + + uint32_t minLevel = 0; + uint32_t numLevels = 0; + uint32_t minLayer = 0; + uint32_t numLayers = 0; + + /// Component mapping. Defaults to identity. + VkComponentMapping swizzle = { + VK_COMPONENT_SWIZZLE_IDENTITY, + VK_COMPONENT_SWIZZLE_IDENTITY, + VK_COMPONENT_SWIZZLE_IDENTITY, + VK_COMPONENT_SWIZZLE_IDENTITY, + }; };