ReXGlue SDK
Loading...
Searching...
No Matches
fetch.h File Reference

Fetch constant layouts, texture sampling enums and limits. More...

#include <algorithm>
#include <rex/assert.h>
#include <rex/types.h>
#include <rex/xenos/format.h>
#include <rex/xenos/state.h>

Go to the source code of this file.

Classes

union  rex::xenos::LoopConstant
union  rex::xenos::VertexFetch
union  rex::xenos::TextureFetch
union  rex::xenos::FetchGroup
union  rex::xenos::MemExportStream

Namespaces

namespace  rex

Macros

#define REXGPU_SWIZZLE(x, y, z, w)

Enumerations

enum class  rex::xenos::DataDimension : u32 { k1D = 0 , k2DOrStacked = 1 , k3D = 2 , kCube = 3 }
enum class  rex::xenos::ClampMode : u32 {
  kRepeat = 0 , kMirroredRepeat = 1 , kClampToEdge = 2 , kMirrorClampToEdge = 3 ,
  kClampToHalfway = 4 , kMirrorClampToHalfway = 5 , kClampToBorder = 6 , kMirrorClampToBorder = 7
}
enum class  rex::xenos::TextureSign : u32 { kUnsigned = 0 , kSigned = 1 , kUnsignedBiased = 2 , kGamma = 3 }
enum class  rex::xenos::TextureFilter : u32 { kPoint = 0 , kLinear = 1 , kBaseMap = 2 , kUseFetchConst = 3 }
enum class  rex::xenos::AnisoFilter : u32 {
  kDisabled = 0 , kMax11 = 1 , kMax21 = 2 , kMax41 = 3 ,
  kMax81 = 4 , kMax161 = 5 , kUseFetchConst = 7
}
enum class  rex::xenos::BorderColor : u32 { k_ABGR_Black = 0 , k_ABGR_White = 1 , k_ACBYCR_Black = 2 , k_ACBCRY_Black = 3 }
enum class  rex::xenos::FetchOpDimension : u32 { k1D = 0 , k2D = 1 , k3DOrStacked = 2 , kCube = 3 }
enum  TextureSwizzle : u16 {
  REXGPU_SWIZZLE_X = 0 , REXGPU_SWIZZLE_R = 0 , REXGPU_SWIZZLE_Y = 1 , REXGPU_SWIZZLE_G = 1 ,
  REXGPU_SWIZZLE_Z = 2 , REXGPU_SWIZZLE_B = 2 , REXGPU_SWIZZLE_W = 3 , REXGPU_SWIZZLE_A = 3 ,
  REXGPU_SWIZZLE_0 = 4 , REXGPU_SWIZZLE_1 = 5 , REXGPU_SWIZZLE_RRRR = REXGPU_SWIZZLE(R, R, R, R) , REXGPU_SWIZZLE_RGGG = REXGPU_SWIZZLE(R, G, G, G) ,
  REXGPU_SWIZZLE_RGBB = REXGPU_SWIZZLE(R, G, B, B) , REXGPU_SWIZZLE_RGBA = REXGPU_SWIZZLE(R, G, B, A) , REXGPU_SWIZZLE_0000 = REXGPU_SWIZZLE(0, 0, 0, 0)
}
enum class  rex::xenos::FetchConstantType : u32 { kInvalidTexture , kInvalidVertex , kTexture , kVertex }

Functions

constexpr bool rex::xenos::ClampModeUsesBorder (ClampMode clamp_mode)
int rex::xenos::GetFetchOpDimensionComponentCount (FetchOpDimension dimension)
constexpr u32 rex::xenos::GetTextureTiledXBaseGranularityLog2 (bool is_3d, u32 bytes_per_block_log2)
constexpr u32 rex::xenos::GetTextureTiledYBaseGranularityLog2 (bool is_3d, u32 bytes_per_block_log2)

Variables

constexpr u32 rex::xenos::kTextureFetchConstantCount = 32
constexpr u32 rex::xenos::kVertexFetchConstantCount = 3 * kTextureFetchConstantCount
constexpr u32 rex::xenos::kTextureSubresourceAlignmentBytesLog2 = 12
constexpr u32 rex::xenos::kTextureSubresourceAlignmentBytes = 1 << kTextureSubresourceAlignmentBytesLog2
constexpr u32 rex::xenos::kTexture1DMaxWidthLog2 = 24
constexpr u32 rex::xenos::kTexture1DMaxWidth = 1 << kTexture1DMaxWidthLog2
constexpr u32 rex::xenos::kTexture2DCubeMaxWidthHeightLog2 = 13
constexpr u32 rex::xenos::kTexture2DCubeMaxWidthHeight = 1 << kTexture2DCubeMaxWidthHeightLog2
constexpr u32 rex::xenos::kTexture2DMaxStackDepthLog2 = 6
constexpr u32 rex::xenos::kTexture2DMaxStackDepth = 1 << kTexture2DMaxStackDepthLog2
constexpr u32 rex::xenos::kTexture3DMaxWidthHeightLog2 = 11
constexpr u32 rex::xenos::kTexture3DMaxWidthHeight = 1 << kTexture3DMaxWidthHeightLog2
constexpr u32 rex::xenos::kTexture3DMaxDepthLog2 = 10
constexpr u32 rex::xenos::kTexture3DMaxDepth = 1 << kTexture3DMaxDepthLog2
constexpr u32 rex::xenos::kTextureMaxMips
constexpr u32 rex::xenos::kTextureTileWidthHeightLog2 = 5
constexpr u32 rex::xenos::kTextureTileWidthHeight = 1 << kTextureTileWidthHeightLog2
constexpr u32 rex::xenos::kTextureTileDepthLog2 = 2
constexpr u32 rex::xenos::kTextureTileDepth = 1 << kTextureTileDepthLog2
constexpr u32 rex::xenos::kTextureTiledZBaseGranularityLog2 = 3
constexpr u32 rex::xenos::kTextureTiledZBaseGranularity = 1 << kTextureTiledZBaseGranularityLog2
constexpr u32 rex::xenos::kTextureLinearRowAlignmentBytesLog2 = 8
constexpr u32 rex::xenos::kTextureLinearRowAlignmentBytes = 1 << kTextureLinearRowAlignmentBytesLog2

Detailed Description

Fetch constant layouts, texture sampling enums and limits.

License
BSD 3-Clause License See LICENSE file in the project root for full license text.
Remarks
Derived from Xenia's xenia/gpu/xenos.h (Ben Vanik, 2020).

Macro Definition Documentation

◆ REXGPU_SWIZZLE

#define REXGPU_SWIZZLE ( x,
y,
z,
w )
Value:
(((::rex::xenos::REXGPU_SWIZZLE_##x) << 0) | ((::rex::xenos::REXGPU_SWIZZLE_##y) << 3) | \
((::rex::xenos::REXGPU_SWIZZLE_##z) << 6) | ((::rex::xenos::REXGPU_SWIZZLE_##w) << 9))

Packs four TextureSwizzle component selectors into a 12 bit swizzle.

Parameters
xSelector suffix for the first component.
ySelector suffix for the second component.
zSelector suffix for the third component.
wSelector suffix for the fourth component.
u32 swizzle = REXGPU_SWIZZLE(R, G, B, A);
#define REXGPU_SWIZZLE(x, y, z, w)
Definition fetch.h:127

Enumeration Type Documentation

◆ AnisoFilter

enum class rex::xenos::AnisoFilter : u32
strong
Enumerator
kUseFetchConst 

Use the ratio from the fetch constant.

◆ BorderColor

enum class rex::xenos::BorderColor : u32
strong
Enumerator
k_ACBYCR_Black 

Host border (0.5, 0, 0.5) in unsigned (Cr, Y, Cb).

k_ACBCRY_Black 

Host border (0, 0.5, 0.5) in unsigned (Y, Cr, Cb).

◆ ClampMode

enum class rex::xenos::ClampMode : u32
strong
Enumerator
kMirrorClampToEdge 

Mirror once, then clamp to the edge texel.

kClampToHalfway 

Clamp halfway between the edge texel and the border.

kMirrorClampToHalfway 

Mirror once, then clamp halfway.

kMirrorClampToBorder 

Mirror once, then clamp to the border color.

◆ DataDimension

enum class rex::xenos::DataDimension : u32
strong

Texture fetch constant dimension. Stacked textures are stored as 2D.

◆ FetchConstantType

enum class rex::xenos::FetchConstantType : u32
strong

Fetch constant type (SQ_TEX_VTX_INVALID/VALID_TEXTURE/BUFFER).

◆ FetchOpDimension

enum class rex::xenos::FetchOpDimension : u32
strong

Dimension of the tfetch instruction. Stacked textures are accessed with tfetch3D.

◆ TextureFilter

enum class rex::xenos::TextureFilter : u32
strong
Enumerator
kBaseMap 

Mip filter only, samples the base level without mip selection.

kUseFetchConst 

Use the filter from the fetch constant.

◆ TextureSign

enum class rex::xenos::TextureSign : u32
strong

Texture component signedness (TEX_FORMAT_COMP, GPUSIGN on Xenos).

Enumerator
kSigned 

Two's complement data.

kUnsignedBiased 

Unsigned data remapped as 2 * color - 1.

kGamma 

Linearized when sampled.

Function Documentation

◆ ClampModeUsesBorder()

bool rex::xenos::ClampModeUsesBorder ( ClampMode clamp_mode)
constexpr

Reports whether a clamp mode samples the border color.

Returns
True when the clamp mode is kClampToBorder or kMirrorClampToBorder.

◆ GetFetchOpDimensionComponentCount()

int rex::xenos::GetFetchOpDimensionComponentCount ( FetchOpDimension dimension)
inline

Returns the number of texture coordinate components a fetch dimension uses. It is 1, 2 or 3.

◆ GetTextureTiledXBaseGranularityLog2()

u32 rex::xenos::GetTextureTiledXBaseGranularityLog2 ( bool is_3d,
u32 bytes_per_block_log2 )
constexpr

Returns log2 of the X period of the tiled texture address function.

Periods are 128x128 for 2D 1bpb, 64x64 for 2D 2bpb, 32x32 for 2D 4bpb and above, 64x32x8 for 3D 1bpb and 32x32x8 for 3D 2bpb and above.

◆ GetTextureTiledYBaseGranularityLog2()

u32 rex::xenos::GetTextureTiledYBaseGranularityLog2 ( bool is_3d,
u32 bytes_per_block_log2 )
constexpr

Returns log2 of the Y period of the tiled texture address function.

Variable Documentation

◆ kTextureMaxMips

u32 rex::xenos::kTextureMaxMips
constexpr
Initial value:
=
std::max(kTexture2DCubeMaxWidthHeightLog2, kTexture3DMaxWidthHeightLog2) + 1

◆ kTextureSubresourceAlignmentBytesLog2

u32 rex::xenos::kTextureSubresourceAlignmentBytesLog2 = 12
constexpr

Log2 of the byte alignment of texture subresources, omitted from base and mip addresses.

◆ kTextureTileDepthLog2

u32 rex::xenos::kTextureTileDepthLog2 = 2
constexpr

Log2 of the 3D texture tile depth. Depths 0 to 3 and 4 to 7 use separate address ranges.

◆ kVertexFetchConstantCount

u32 rex::xenos::kVertexFetchConstantCount = 3 * kTextureFetchConstantCount
constexpr

Three per texture fetch constant slot.