@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
// SPDX-License-Identifier: GPL-2.0-or-later
@ -27,26 +30,42 @@ 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 ) } ,
: 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 ) } {
w_source { CastSwizzle ( config . w_source ) } {
range . base = SubresourceBase {
range . base = SubresourceBase {
. level = static_cast < s32 > ( config . res_min_mip_level ) ,
. level = static_cast < s32 > ( config . res_min_mip_level ) ,
. layer = base_layer ,
. layer = base_layer ,
} ;
} ;
range . extent . levels = config . res_max_mip_level - config . res_min_mip_level + 1 ;
range . extent . levels = config . res_max_mip_level - config . res_min_mip_level + 1 ;
switch ( config . texture_type ) {
TextureType tex_type = config . texture_type ;
//normalize 1D texture with many layers
if ( tex_type = = TextureType : : Texture1D & &
( config . Depth ( ) > 1 | | base_layer ! = 0 ) ) {
tex_type = TextureType : : Texture1DArray ;
}
switch ( tex_type ) {
case TextureType : : Texture1D :
case TextureType : : Texture1D :
ASSERT ( config . Height ( ) = = 1 ) ;
ASSERT ( config . Height ( ) = = 1 ) ;
ASSERT ( config . Depth ( ) = = 1 ) ;
ASSERT ( config . Depth ( ) = = 1 ) ;
type = ImageViewType : : e1D ;
type = ImageViewType : : e1D ;
break ;
break ;
case TextureType : : Texture1DArray :
ASSERT ( config . Height ( ) = = 1 ) ;
type = ImageViewType : : e1DArray ;
range . extent . layers = config . Depth ( ) ;
break ;
case TextureType : : Texture2D :
case TextureType : : Texture2D :
case TextureType : : Texture2DNoMipmap :
case TextureType : : Texture2DNoMipmap :
ASSERT ( config . Depth ( ) = = 1 ) ;
ASSERT ( config . Depth ( ) = = 1 ) ;
type = config . normalized_coords ? ImageViewType : : e2D : ImageViewType : : Rect ;
type = config . normalized_coords ? ImageViewType : : e2D : ImageViewType : : Rect ;
break ;
break ;
case TextureType : : Texture2DArray :
type = ImageViewType : : e2DArray ;
range . extent . layers = config . Depth ( ) ;
break ;
case TextureType : : Texture3D :
case TextureType : : Texture3D :
type = ImageViewType : : e3D ;
type = ImageViewType : : e3D ;
break ;
break ;
@ -55,21 +74,16 @@ ImageViewInfo::ImageViewInfo(const TICEntry& config, s32 base_layer) noexcept
type = ImageViewType : : Cube ;
type = ImageViewType : : Cube ;
range . extent . layers = 6 ;
range . extent . layers = 6 ;
break ;
break ;
case TextureType : : Texture1DArray :
type = ImageViewType : : e1DArray ;
range . extent . layers = config . Depth ( ) ;
break ;
case TextureType : : Texture2DArray :
type = ImageViewType : : e2DArray ;
range . extent . layers = config . Depth ( ) ;
break ;
case TextureType : : Texture1DBuffer :
type = ImageViewType : : Buffer ;
break ;
case TextureType : : TextureCubeArray :
case TextureType : : TextureCubeArray :
type = ImageViewType : : CubeArray ;
type = ImageViewType : : CubeArray ;
range . extent . layers = config . Depth ( ) * 6 ;
range . extent . layers = config . Depth ( ) * 6 ;
break ;
break ;
case TextureType : : Texture1DBuffer :
type = ImageViewType : : Buffer ;
break ;
default :
default :
ASSERT_MSG ( false , " Invalid texture_type={} " , static_cast < int > ( config . texture_type . Value ( ) ) ) ;
ASSERT_MSG ( false , " Invalid texture_type={} " , static_cast < int > ( config . texture_type . Value ( ) ) ) ;
break ;
break ;