@ -30,59 +30,73 @@ constexpr u8 RENDER_TARGET_SWIZZLE = (std::numeric_limits<u8>::max)();
} // Anonymous namespace
} // Anonymous namespace
ImageViewInfo : : ImageViewInfo ( const TICEntry & config , s32 base_layer ) noexcept
ImageViewInfo : : ImageViewInfo ( const TICEntry & config , s32 base_layer ) noexcept
: format { PixelFormatFromTIC ( config ) } ,
x_source { CastSwizzle ( config . x_source ) } ,
y_source { CastSwizzle ( config . y_source ) } ,
z_source { CastSwizzle ( config . z_source ) } ,
w_source { CastSwizzle ( config . w_source ) } {
range . base = SubresourceBase {
. level = static_cast < s32 > ( config . res_min_mip_level ) ,
. layer = base_layer ,
} ;
range . extent . levels = config . res_max_mip_level - config . res_min_mip_level + 1 ;
TextureType tex_type = config . texture_type ;
if ( tex_type = = TextureType : : Texture1D & & ( config . Depth ( ) > 1 | | base_layer ! = 0 ) ) {
tex_type = TextureType : : Texture1DArray ;
}
switch ( tex_type ) {
case TextureType : : Texture1D :
ASSERT ( config . Height ( ) = = 1 ) ;
ASSERT ( config . Depth ( ) = = 1 ) ;
type = ImageViewType : : e1D ;
break ;
case TextureType : : Texture1DArray :
ASSERT ( config . Height ( ) = = 1 ) ;
type = ImageViewType : : e1DArray ;
range . extent . layers = config . Depth ( ) ;
break ;
case TextureType : : Texture2D :
case TextureType : : Texture2DNoMipmap :
ASSERT ( config . Depth ( ) = = 1 ) ;
type = config . normalized_coords ? ImageViewType : : e2D : ImageViewType : : Rect ;
break ;
case TextureType : : Texture2DArray :
type = ImageViewType : : e2DArray ;
range . extent . layers = config . Depth ( ) ;
break ;
case TextureType : : Texture3D :
type = ImageViewType : : e3D ;
break ;
case TextureType : : TextureCubemap :
ASSERT ( config . Depth ( ) = = 1 ) ;
type = ImageViewType : : Cube ;
range . extent . layers = 6 ;
break ;
case TextureType : : TextureCubeArray :
type = ImageViewType : : CubeArray ;
range . extent . layers = config . Depth ( ) * 6 ;
break ;
case TextureType : : Texture1DBuffer :
type = ImageViewType : : Buffer ;
break ;
default :
ASSERT_MSG ( false , " Invalid texture_type={} " , static_cast < int > ( tex_type ) ) ;
break ;
}
: format { PixelFormatFromTIC ( config ) } ,
x_source { CastSwizzle ( config . x_source ) } ,
y_source { CastSwizzle ( config . y_source ) } ,
z_source { CastSwizzle ( config . z_source ) } ,
w_source { CastSwizzle ( config . w_source ) } {
range . base = SubresourceBase {
. level = static_cast < s32 > ( config . res_min_mip_level ) ,
. layer = base_layer ,
} ;
range . extent . levels = config . res_max_mip_level - config . res_min_mip_level + 1 ;
TextureType tex_type = config . texture_type ;
if ( tex_type = = TextureType : : Texture1D & & ( config . Depth ( ) > 1 | | base_layer ! = 0 ) ) {
tex_type = TextureType : : Texture1DArray ;
} else if ( tex_type = = TextureType : : Texture2D & & ( config . Depth ( ) > 1 | | base_layer ! = 0 ) ) {
tex_type = TextureType : : Texture2DArray ;
}
switch ( tex_type ) {
case TextureType : : Texture1D :
ASSERT ( config . Height ( ) = = 1 ) ;
ASSERT ( config . Depth ( ) = = 1 ) ;
ASSERT ( base_layer = = 0 ) ;
type = ImageViewType : : e1D ;
range . extent . layers = 1 ;
break ;
case TextureType : : Texture1DArray :
ASSERT ( config . Depth ( ) > 0 ) ;
ASSERT ( static_cast < u32 > ( base_layer ) < config . Depth ( ) ) ;
type = ImageViewType : : e1DArray ;
range . extent . layers = config . Depth ( ) - base_layer ;
break ;
case TextureType : : Texture2D :
case TextureType : : Texture2DNoMipmap :
ASSERT ( config . Depth ( ) = = 1 ) ;
ASSERT ( base_layer = = 0 ) ;
type = config . normalized_coords ? ImageViewType : : e2D : ImageViewType : : Rect ;
range . extent . layers = 1 ;
break ;
case TextureType : : Texture2DArray :
ASSERT ( config . Depth ( ) > 0 ) ;
ASSERT ( static_cast < u32 > ( base_layer ) < config . Depth ( ) ) ;
type = ImageViewType : : e2DArray ;
range . extent . layers = config . Depth ( ) - base_layer ;
break ;
case TextureType : : TextureCubemap :
ASSERT ( config . Depth ( ) = = 1 ) ;
type = ImageViewType : : Cube ;
range . extent . layers = 6 ;
break ;
case TextureType : : TextureCubeArray :
ASSERT ( config . Depth ( ) > 0 ) ;
ASSERT ( static_cast < u32 > ( base_layer ) < config . Depth ( ) ) ;
type = ImageViewType : : CubeArray ;
range . extent . layers = ( config . Depth ( ) - base_layer ) * 6 ;
break ;
case TextureType : : Texture3D :
ASSERT ( base_layer = = 0 ) ;
type = ImageViewType : : e3D ;
range . extent . layers = 1 ;
break ;
case TextureType : : Texture1DBuffer :
type = ImageViewType : : Buffer ;
range . extent . layers = 1 ;
break ;
default :
ASSERT_MSG ( false , " Invalid texture_type={} " , static_cast < int > ( tex_type ) ) ;
break ;
}
}
}
ImageViewInfo : : ImageViewInfo ( ImageViewType type_ , PixelFormat format_ ,
ImageViewInfo : : ImageViewInfo ( ImageViewType type_ , PixelFormat format_ ,