| 7059 | } |
| 7060 | |
| 7061 | VkResult TextureVK::createView(uint32_t _layer, uint32_t _numLayers, uint32_t _mip, uint32_t _numMips, VkImageViewType _type, VkImageAspectFlags _aspectMask, bool _renderTarget, ::VkImageView* _view) const |
| 7062 | { |
| 7063 | VkResult result = VK_SUCCESS; |
| 7064 | |
| 7065 | if (VK_IMAGE_VIEW_TYPE_3D == m_type) |
| 7066 | { |
| 7067 | BX_ASSERT(false |
| 7068 | || !_renderTarget |
| 7069 | || !(m_aspectFlags & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT) ) |
| 7070 | , "3D image can't be a depth attachment" |
| 7071 | ); |
| 7072 | } |
| 7073 | |
| 7074 | if (VK_IMAGE_VIEW_TYPE_CUBE == _type |
| 7075 | || VK_IMAGE_VIEW_TYPE_CUBE_ARRAY == _type) |
| 7076 | { |
| 7077 | BX_ASSERT(_numLayers % 6 == 0, ""); |
| 7078 | BX_ASSERT( |
| 7079 | VK_IMAGE_VIEW_TYPE_3D != m_type |
| 7080 | , "3D image can't be aliased as a cube texture" |
| 7081 | ); |
| 7082 | } |
| 7083 | |
| 7084 | VkImageViewCreateInfo viewInfo; |
| 7085 | viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; |
| 7086 | viewInfo.pNext = NULL; |
| 7087 | viewInfo.flags = 0; |
| 7088 | viewInfo.image = ( (VK_NULL_HANDLE != m_singleMsaaImage) && !_renderTarget) |
| 7089 | ? m_singleMsaaImage |
| 7090 | : m_textureImage |
| 7091 | ; |
| 7092 | viewInfo.viewType = _type; |
| 7093 | viewInfo.format = m_format; |
| 7094 | viewInfo.components = m_components; |
| 7095 | viewInfo.subresourceRange.aspectMask = m_aspectFlags & _aspectMask; |
| 7096 | viewInfo.subresourceRange.baseMipLevel = _mip; |
| 7097 | viewInfo.subresourceRange.levelCount = _numMips; |
| 7098 | viewInfo.subresourceRange.baseArrayLayer = _layer; |
| 7099 | viewInfo.subresourceRange.layerCount = 1; |
| 7100 | |
| 7101 | if (VK_IMAGE_VIEW_TYPE_2D != _type |
| 7102 | && VK_IMAGE_VIEW_TYPE_3D != _type) |
| 7103 | { |
| 7104 | viewInfo.subresourceRange.layerCount = VK_IMAGE_VIEW_TYPE_CUBE == _type |
| 7105 | ? 6 |
| 7106 | : _numLayers |
| 7107 | ; |
| 7108 | } |
| 7109 | |
| 7110 | VkImageView view = VK_NULL_HANDLE; |
| 7111 | |
| 7112 | result = vkCreateImageView( |
| 7113 | s_renderVK->m_device |
| 7114 | , &viewInfo |
| 7115 | , s_renderVK->m_allocatorCb |
| 7116 | , &view |
| 7117 | ); |
| 7118 |
no test coverage detected