| 214 | } |
| 215 | |
| 216 | ImageViewId FrameGraph::mergeViews( ImageViewIdArray const & views |
| 217 | , bool mergeMipLevels |
| 218 | , bool mergeArrayLayers ) |
| 219 | { |
| 220 | ImageViewData data; |
| 221 | for ( auto & view : views ) |
| 222 | fgph::mergeViewData( view, mergeMipLevels, mergeArrayLayers, data ); |
| 223 | |
| 224 | if ( data.info.subresourceRange.layerCount > 1u ) |
| 225 | { |
| 226 | switch ( data.info.viewType ) |
| 227 | { |
| 228 | case ImageViewType::e1D: |
| 229 | data.info.viewType = ImageViewType::e1DArray; |
| 230 | break; |
| 231 | case ImageViewType::e2D: |
| 232 | if ( checkFlag( data.image.data->info.flags, ImageCreateFlags::eCubeCompatible ) |
| 233 | && ( data.info.subresourceRange.layerCount % 6u ) == 0u |
| 234 | && data.info.subresourceRange.baseArrayLayer == 0u ) |
| 235 | data.info.viewType = ( data.info.subresourceRange.layerCount > 6u ) |
| 236 | ? ImageViewType::eCubeArray |
| 237 | : ImageViewType::eCube; |
| 238 | else |
| 239 | data.info.viewType = ImageViewType::e2DArray; |
| 240 | break; |
| 241 | case ImageViewType::eCube: |
| 242 | if ( data.info.subresourceRange.layerCount > 6u ) |
| 243 | data.info.viewType = ImageViewType::eCubeArray; |
| 244 | break; |
| 245 | default: |
| 246 | break; |
| 247 | } |
| 248 | } |
| 249 | |
| 250 | return createView( data ); |
| 251 | } |
| 252 | |
| 253 | BufferViewId FrameGraph::mergeViews( BufferViewIdArray const & views ) |
| 254 | { |