/*---------------------------------------------------------------------------* Copyright (C) Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ // gx2Constant.h // // Declares misc function prototypes for gx2 library. #ifndef _CAFE_GX2_CONSTANT_H_ #define _CAFE_GX2_CONSTANT_H_ #ifdef __cplusplus extern "C" { #endif // __cplusplus /// @addtogroup GX2ConstGroup /// @{ //---------------------------------------------------------------------- // Alignments /// \brief All shader binaries (the executable code) must be /// aligned in memory by this value in bytes. /// #define GX2_SHADER_ALIGNMENT 0x100 /// \brief Describes the needed byte-alignment for scan buffers. /// #define GX2_SCAN_BUFFER_ALIGNMENT 0x1000 /// \brief All uniform blocks must be aligned by this many bytes. /// This only applies in \ref GX2_SHADER_MODE_UNIFORM_BLOCK /// #define GX2_UNIFORM_BLOCK_ALIGNMENT 0x100 /// \brief Context state buffers must be aligned by this many bytes. /// #define GX2_CONTEXT_STATE_ALIGNMENT 0x100 /// \brief Display list buffers must be aligned by this many bytes. /// #define GX2_DISPLAY_LIST_ALIGNMENT 0x20 /// \brief For optimal performance Vertex Buffers should be aligned by this many bytes /// #define GX2_VERTEX_BUFFER_ALIGNMENT 0x40 /// \brief For optimal performance Index Buffers should be aligned by this many bytes /// #define GX2_INDEX_BUFFER_ALIGNMENT 0x20 /// \brief \ref GX2DispatchParams should be aligned by this many bytes /// #define GX2_DISPATCH_PARAMS_ALIGNMENT 0x100 /// \brief This alignment should be used for general buffers such as conditional render, perf, top/bottom gpu counters /// #define GX2_DEFAULT_BUFFER_ALIGNMENT 0x40 /// \brief Stream out buffers must be aligned by this many bytes. /// #define GX2_STREAMOUT_BUFFER_ALIGNMENT 0x100 /// \brief Stream out context memory must be aligned by this many bytes. /// #define GX2_STREAMOUT_CONTEXT_ALIGNMENT 4 /// \brief Export buffer alignment /// #define GX2_EXPORT_BUFFER_ALIGNMENT 0x100 //---------------------------------------------------------------------- // Byte Sizes /// \brief Default size in bytes used to create command buffer FIFO. /// /// \note Not used yet. /// #define GX2_FIFO_PREFERRED_SIZE (16*1024*1024) /// \brief Size of fetch shader header in bytes. /// See \ref GX2CalcFetchShaderSize() /// #define GX2_FETCH_SHADER_CONTROL_FLOW_SIZE 64 /// \brief Size of fetch shader descriptor (one per attribute) in bytes. /// See \ref GX2CalcFetchShaderSize() /// #define GX2_FETCH_SHADER_INSTRUCTION_SIZE 16 /// \brief Size of fetch shader alu instruction in bytes. /// See \ref GX2CalcFetchShaderSize() /// #define GX2_FETCH_SHADER_ALU_INSTRUCTION_SIZE 8 /// \brief Max size of one uniform block in bytes. /// This applies to \ref GX2_SHADER_MODE_UNIFORM_BLOCK (includes \ref GX2_SHADER_MODE_GEOMETRY_SHADER) /// Each uniform block enables 4096 * vec4 = 65536 bytes /// #define GX2_MAX_UNIFORM_BLOCK_SIZE 65536 /// \brief The number of uniform block slot. /// This applies to \ref GX2_SHADER_MODE_UNIFORM_BLOCK (includes \ref GX2_SHADER_MODE_GEOMETRY_SHADER) /// #define GX2_MAX_UNIFORM_BLOCK_SLOT 16 /// \brief Stream out buffer context size in bytes. /// #define GX2_STREAMOUT_BUFFER_CONTEXT_SIZE 4 //---------------------------------------------------------------------- // Perf/Query Counter Invalid Values /// \brief Value used to initialize 64-bit counters before they are read /// (for \ref GX2PerfGroup, \ref GX2QueryGroup). /// #define GX2_INVALID_COUNTER_VALUE_U64 0xFFFFFFFFFFFFFFFF /// \brief Value used to initialize 32-bit counters before they are read /// (for \ref GX2PerfGroup, \ref GX2QueryGroup). /// #define GX2_INVALID_COUNTER_VALUE_U32 0xFFFFFFFF /// \brief Value used to initialize 8-bit counters before they are read /// (for \ref GX2PerfGroup, \ref GX2QueryGroup). /// #define GX2_INVALID_COUNTER_VALUE_U8 0xFF /// \brief 27MHz reference clock used with \ref GX2SampleTopGPUCycle and \ref GX2SampleBottomGPUCycle /// #define GX2_TOP_BOTTOM_CLOCK_CYCLES (27000000) /// \brief Default timeout for \ref GX2WaitTimeStamp and \ref GX2WaitForFlip in /// on seconds. This timeout value can be changed via \ref GX2SetGPUTimeout API. /// #define GX2_DEFAULT_GPU_TIMEOUT_IN_MILLISEC (10 * 1000) /// \brief Default interrupt count limit for each 1/60 second frame before a /// warning is issued (in DEBUG only). Change with \ref GX2SetInterruptCountLimit. /// #define GX2_DEFAULT_INTERRUPT_COUNT_LIMIT (10000) //---------------------------------------------------------------------- // Pixel/texel Sizes /// \brief Max viewport size. /// #define GX2_MAX_VIEWPORT_SIZE 8192 /// \brief Max guardband size. /// #define GX2_MAX_GUARDBAND_SIZE 8192 /// \brief Max texture width. /// #define GX2_MAX_TEXTURE_WIDTH 8192 /// \brief Max texture height. /// #define GX2_MAX_TEXTURE_HEIGHT 8192 /// \brief Max texture depth. /// #define GX2_MAX_TEXTURE_DEPTH 8192 /// \brief Log 2 of Max texture size. /// #define GX2_LOG2_MAX_TEXTURE_SIZE 13 /// \brief Max total texture buffer size in texels. /// #define GX2_MAX_TEXTURE_BUFFER_SIZE (1 << 28) /// \brief Total faces in a cubemap. /// #define GX2_CUBEMAP_FACE_COUNT 6 //---------------------------------------------------------------------- // Numbers of draw-related things /// \brief Max number of attribute buffers. /// #define GX2_MAX_ATTRIB_BUFFERS 16 /// \brief Max number of vertices per draw call (draw packet size). /// #define GX2_MAX_DRAW_VERTICES 0xFFFFFF /// \brief Max number of indices per draw immediate call for U32 indices. /// The value for U16 indices is double this (i.e., it's only the total byte /// size that matters). /// #define GX2_MAX_DRAW_IMMEDIATE_U32_INDICES 0x3FFE /// \brief Max number of pixel shader uniforms. /// This only applies in \ref GX2_SHADER_MODE_UNIFORM_REGISTER /// #define GX2_MAX_PS_UNIFORM_VARS 256 /// \brief Max number of vertex shader uniforms. /// This only applies in \ref GX2_SHADER_MODE_UNIFORM_REGISTER /// #define GX2_MAX_VS_UNIFORM_VARS 256 /// \brief Max number of uniform blocks (per shader). /// This only applies in \ref GX2_SHADER_MODE_UNIFORM_BLOCK /// #define GX2_MAX_UNIFORM_BLOCKS 16 /// \brief Max number of texture samplers (per shader). /// //#define GX2_MAX_SAMPLERS 16 #define GX2_MAX_SAMPLERS 18 /// \brief Max simultaneous Render Targets/Draw (color) buffers. /// This does not include the depth/stencil buffer. /// #define GX2_MAX_RENDER_TARGETS 8 /// \brief Max number of stream out buffers. /// #define GX2_MAX_STREAMOUT_BUFFERS 4 /// \brief The max number of rectangles accepted by GX2CopySurfaceEx() /// #define GX2_MAX_COPY_SURFACE_EX_RECTS 25 /// \brief Maximum number of work-items per work-group #define GX2_MAX_WORK_ITEMS_PER_WORK_GROUP 64 //---------------------------------------------------------------------- // Special values, shader-related /// \brief Return value for \ref GX2GetVertexUniformVarOffset, /// \ref GX2GetGeometryUniformVarOffset, /// and \ref GX2GetPixelUniformVarOffset when named uniform /// can not be found. /// #define GX2_UNIFORM_VAR_INVALID_OFFSET 0xFFFFFFFF /// \brief Used to mark uniform block indexes as invalid, meaning /// the associated uniform var is a register var, not a block var. /// #define GX2_UNIFORM_BLOCK_INDEX_INVALID 0xFFFFFFFF /// \brief Used to mark uniform block index for the 'global', /// (non-named) uniforms. /// /// Uniforms in the global block can have initial values. /// /// \note If the default block is empty, then another (non-default) /// block may have a block index of 0. /// #define GX2_UNIFORM_BLOCK_INDEX_DEFAULT_BLOCK 0 /// \brief Max number of pixels shader threads when the geometry shader is disabled /// #define GX2_MAX_PS_THREADS_GS_DISABLED 136 /// \brief Max number of pixels shader threads when the geometry shader is enabled /// #define GX2_MAX_PS_THREADS_GS_ENABLED 124 /// \brief Max number of vertex shader threads when the geometry shader is disabled /// #define GX2_MAX_VS_THREADS_GS_DISABLED 48 /// \brief Max number of vertex shader threads when the geometry shader is enabled /// #define GX2_MAX_VS_THREADS_GS_ENABLED 32 /// \brief Max number of geometry shader threads #define GX2_MAX_GS_THREADS 8 /// \brief Max number of GPRs available when the geometry shader is disabled /// #define GX2_TOTAL_GPRS_GS_DISABLED 248 /// \brief Max number of GPRs available when the geometry shader is disabled /// #define GX2_TOTAL_GPRS_GS_ENABLED 184 /// \brief Max number of stack entries /// #define GX2_TOTAL_STACK_ENTRIES 256 /// \brief Used to specify is an attribute stream is a system generated value and does not /// come from a buffer /// /// Set the buffer member of \ref GX2AttribStream to this define to identify the attribute /// is a system generated value /// #define GX2_SYSTEM_GENERATED_ATTRIBUTE GX2_MAX_ATTRIB_BUFFERS /// \brief Specifies the system generated value is the barycentric coordinate used for tessellation /// /// Set the offset member of \ref GX2AttribStream to this define to identify the system generated /// barycentric coordinate location in the vertex shader for tessellation /// #define GX2_SYSGEN_ATTRIB_TESSELLATION_BARYC 0 /// \brief Specifies the system generated value is the super primitive index used for tessellation /// /// Set the offset member of \ref GX2AttribStream to this define to identify the system generated /// super primitive index location in the vertex shader for tessellation /// #define GX2_SYSGEN_ATTRIB_TESSELLATION_INDEX 1 //---------------------------------------------------------------------- // Special values, texture related /// \brief Max texture anisotropy. /// #define GX2_MAX_TEXTURE_ANISOTROPY 16.f /// \brief Auxiliary buffers must be initialized to this value. (see \ref GX2AASurfaceSect) /// #define GX2_AUX_BUFFER_CLEAR_VALUE 0xCC //---------------------------------------------------------------------- // Numbers of counters /// \brief Number of available cp counters per sampling #define GX2_NUM_COUNTER_CP 0x01 /// \brief Number of available grbm counters per sampling #define GX2_NUM_COUNTER_GRBM 0x02 /// \brief Number of available pa_su counters per sampling #define GX2_NUM_COUNTER_PA_SU 0x04 /// \brief Number of available pa_sc counters per sampling #define GX2_NUM_COUNTER_PA_SC 0x04 /// \brief Number of available vgt counters per sampling #define GX2_NUM_COUNTER_VGT 0x04 /// \brief Number of available sq counters per sampling #define GX2_NUM_COUNTER_SQ 0x04 /// \brief Number of available spi counters per sampling #define GX2_NUM_COUNTER_SPI 0x04 /// \brief Number of available sx counters per sampling #define GX2_NUM_COUNTER_SX 0x04 /// \brief Number of available smx counters per sampling #define GX2_NUM_COUNTER_SMX 0x04 /// \brief Number of available td counters per sampling #define GX2_NUM_COUNTER_TD 0x01 /// \brief Number of available ta counters per sampling #define GX2_NUM_COUNTER_TA 0x02 /// \brief Number of available tcp counters per sampling #define GX2_NUM_COUNTER_TCP 0x04 /// \brief Number of available tcc counters per sampling #define GX2_NUM_COUNTER_TCC 0x04 /// \brief Number of available cb counters per sampling #define GX2_NUM_COUNTER_CB 0x04 /// \brief Number of available db counters per sampling #define GX2_NUM_COUNTER_DB 0x04 /// \brief Number of available pipeline counters per sampling. /// There is really one set of 8 pipeline counter values. #define GX2_NUM_COUNTER_PIPELINE 0x08 /// \brief Number of times a pixel shader was invoked. #define GX2_PIPELINE_COUNTERS_PSINVO_OFFSET 0 /// \brief Number of primitives that were rendered. This may be larger or smaller than CInvocations // because after a primitive is clipped sometimes it is either broken up into more than // one primitive or completely culled. #define GX2_PIPELINE_COUNTERS_CPRIM_OFFSET 1 /// \brief Number of primitives that were sent to the rasterizer. #define GX2_PIPELINE_COUNTERS_CINVO_OFFSET 2 /// \brief Number of times a vertex shader was invoked. Typically the number of vertices. #define GX2_PIPELINE_COUNTERS_VSINVO_OFFSET 3 /// \brief Number of times a geometry shader was invoked. #define GX2_PIPELINE_COUNTERS_GSINVO_OFFSET 4 /// \brief Number of primitives output by a geometry shader. #define GX2_PIPELINE_COUNTERS_GSPRIM_OFFSET 5 /// \brief Number of primitives read by the input assembler. This number can be different depending /// on the primitive topology used. #define GX2_PIPELINE_COUNTERS_IAPRIM_OFFSET 6 /// \brief Number of vertices read by input assembler. #define GX2_PIPELINE_COUNTERS_IAVERT_OFFSET 7 /// @} #ifdef __cplusplus } #endif // __cplusplus #endif // _CAFE_GX2_CONSTANT_H_