Shader Program Buffer/PlayStation 3

From Burnout Wiki

Structures

renderengine::ProgramBuffer

Offset Length Type Name Description Comments
0x0 0x4 void* m_programBuffer Set at runtime
0x4 0x4 uint32_t m_programSize Set at runtime
0x8 0x4 uint32_t m_programOffset Set at runtime
0xC 0x4 Type m_programType Shader type Pixel or vertex shader
0x10 0x4 uint32_t m_programFlags Flags See flags
0x14 0x4 CGprogram m_cgProgramBuffer Shader program
0x18 0x4 uint32_t m_cgProgramSize Shader program length
0x1C 0x4 uint32_t m_numParameters Number of parameters
0x20 0x4 ParameterOffsetTable* m_parameterOffsetTable Parameter offset table nullptr if vertex shader

Immediately followed by a set of ProgramVariableDescriptor entries of an amount defined by m_numParameters.

renderengine::ProgramBuffer::ProgramVariableDescriptor

Describes the parameters in the CG parameter array.

Offset Length Type Name Description Comments
0x0 0x2 uint16_t m_index Resource index of the parameter
0x2 0x2 uint16_t m_numConstants Number of parts in this constant, resulting in <constant>[n]
0x4 0x2 uint16_t m_dataType Data type of the parameter Only 1 (float) is used
rw::graphics::Shader::DataType?
0x6 0x2 uint16_t m_cgParamIndex Index of the parameter in the CG parameter array

CgBinaryProgram

Offset Length Type Name Description Comments
0x0 0x4 CGprofile profile Profile CG_PROFILE_VPRSX or CG_PROFILE_FPRSX
0x4 0x4 unsigned int binaryFormatRevision Version 6
0x8 0x4 unsigned int totalSize Size Same value as m_cgProgramSize in ProgramBuffer
0xC 0x4 unsigned int parameterCount Parameter count
0x10 0x4 CGparameter parameterArray Parameters Relative to CGprogram start
0x14 0x4 CgBinaryOffset program Attributes Typically follows directly after parameters
See Program attributes
0x18 0x4 unsigned int ucodeSize Microcode size
0x1C 0x4 CgBinaryOffset ucode Microcode Relative to CGprogram start
0x20 0x1 unsigned char[1] data Variable-length data

CgBinaryParameter

Offset Length Type Name Description Comments
0x0 0x4 CGtype type Type
0x4 0x4 CGresource res Resource
0x8 0x4 CGenum var Variability CG_VARYING or CG_UNIFORM in samples
0xC 0x4 int resIndex Resource index UINT_MAX in samples
0x10 0x4 CgBinaryStringOffset name Name Relative to CGprogram start
0x14 0x4 CgBinaryFloatOffset defaultValue Constant data Relative to CGprogram start
0x18 0x4 CgBinaryEmbeddedConstantOffset embeddedConst Patch list Relative to CGprogram start
0x1C 0x4 CgBinaryStringOffset semantic Semantic Relative to CGprogram start
0x20 0x4 CGenum direction Direction
0x24 0x4 int paramno Ordinal number
0x28 0x4 CGbool isReferenced Referenced
0x2C 0x4 CGbool isShared Shared

CgBinaryEmbeddedConstant

Offset Length Type Name Description Comments
0x0 0x4 unsigned int ucodeCount Microcode count
0x4 0x4 unsigned int[1] ucodeOffset Array of microcode offsets of length ucodeCount

Program attributes

Structure varies per profile, with CgBinaryVertexProgram being used with CG_PROFILE_VPRSX and CgBinaryFragmentProgram with CG_PROFILE_FPRSX.

CgBinaryVertexProgram

Offset Length Type Name Description Comments
0x0 0x4 unsigned int instructionCount Instruction count
0x4 0x4 unsigned int instructionSlot Instruction slot
0x8 0x4 unsigned int registerCount Register count
0xC 0x4 unsigned int attributeInputMask Input mask
0x10 0x4 unsigned int attributeOutputMask Output mask
0x14 0x4 unsigned int userClipMask User clip mask
0x18 0x8 Padding

CgBinaryFragmentProgram

Offset Length Type Name Description Comments
0x0 0x4 unsigned int instructionCount Instruction count
0x4 0x4 unsigned int attributeInputMask Output mask
0x8 0x4 unsigned int partialTexType See CgBinaryPartialTexType
0xC 0x2 unsigned short texCoordsInputMask Tex coord set
0xE 0x2 unsigned short texCoords2D Tex coord enable
0x10 0x1 unsigned short texCoordsCentroid
0x12 0x1 unsigned char registerCount Register count
0x13 0x1 unsigned char outputFromH0 Half colour
0x14 0x1 unsigned char depthReplace Depth out
0x15 0x1 unsigned char pixelKill Uses kill
0x16 0xA Padding

renderengine::shaderpatch::ParameterOffsetTable

Used to patch microcode.

Offset Length Type Name Description Comments
0x0 0x4 uint32_t m_numParameters Number of parameters
0x4 0x4 uint32_t m_size Length of the table, including this structure

This structure is immediately followed by an array of unknown structures of length parameterCount (from m_cgProgramBuffer):

Offset Length Type Name Description Comments
0x0 0x4 uint32_t ? Number of values
0x4 0x4 uint32_t ? 0 in samples
0x8 0x4 uint32_t* ? Values Relative to ParameterOffsetTable start

Typedefs

CGprogram

Name Type Length Comments
CGprogram _CGprogram* 0x4 See CgBinaryProgram

CgBinaryOffset

Name Type Length Comments
CgBinaryOffset unsigned int 0x4

CgBinaryEmbeddedConstantOffset

Name Type Length Comments
CgBinaryEmbeddedConstantOffset CgBinaryOffset 0x4 Pointer to a CgBinaryEmbeddedConstant

CgBinaryFloatOffset

Name Type Length Comments
CgBinaryFloatOffset CgBinaryOffset 0x4 Pointer to a floating point value.

CgBinaryStringOffset

Name Type Length Comments
CgBinaryStringOffset CgBinaryOffset 0x4 Pointer to a string.

CgBinaryParameterOffset

Name Type Length Comments
CgBinaryParameterOffset CgBinaryOffset 0x4 Pointer to a CgBinaryParameter

CGparameter

Name Type Length Comments
CGparameter _CGparameter* 0x4 Same as CgBinaryParameterOffset

CGbool

Name Type Length Comments
CGbool int 0x4

Enumerations

renderengine::ProgramBuffer::Type

Name Value Comments
TYPE_NA 0
TYPE_VERTEX 1
TYPE_PIXEL 2
TYPE_FORCEENUMSIZEINT 0x7FFFFFFF

Flags

Name Value Comments
FLAG_PS3PATCHABLE 0x1 Initialize the parameter offset table
Set on pixel shaders, unset on vertex shaders

CGprofile

Name Value Comments
CG_PROFILE_START 6144
CG_PROFILE_UNKNOWN 6145
CG_PROFILE_VP20 6146
CG_PROFILE_FP20 6147
CG_PROFILE_VP30 6148
CG_PROFILE_FP30 6149
CG_PROFILE_ARBVP1 6150
CG_PROFILE_FP40
CG_PROFILE_SCE_FP_TYPEB
6151
CG_PROFILE_VS_1_1 6153
CG_PROFILE_VS_2_0 6154
CG_PROFILE_VS_2_X 6155
CG_PROFILE_VS_2_SW 6156
CG_PROFILE_VS_3_0 6157
CG_PROFILE_PS_1_1 6159
CG_PROFILE_PS_1_2 6160
CG_PROFILE_PS_1_3 6161
CG_PROFILE_PS_2_0 6162
CG_PROFILE_PS_2_X 6163
CG_PROFILE_PS_2_SW 6164
CG_PROFILE_PS_3_0 6165
CG_PROFILE_HLSLF 6166
CG_PROFILE_ARBFP1 7000
CG_PROFILE_VP40
CG_PROFILE_SCE_VP_TYPEB
7001
CG_PROFILE_GENERIC 7002
CG_PROFILE_VPRSX
CG_PROFILE_SCE_VP_RSX
7003 RSX vertex shader
CG_PROFILE_FPRSX
CG_PROFILE_SCE_FP_RSX
7004 RSX fragment (pixel) shader
CG_PROFILE_SCE_VP_TYPEC 7005
CG_PROFILE_SCE_FP_TYPEC 7006
CG_PROFILE_GLSLV 7007
CG_PROFILE_GLSLF 7008
CG_PROFILE_GLSLC 7009
CG_PROFILE_MAX 7100

CGtype

Name Value Comments
CG_UNKNOWN_TYPE 0
CG_STRUCT 1
CG_STRUCT 2
CG_TYPE_START_ENUM 1024
CG_HALF 1025
CG_HALF2 1026
CG_HALF3 1027
CG_HALF4 1028
CG_HALF1x1 1029
CG_HALF1x2 1030
CG_HALF1x3 1031
CG_HALF1x4 1032
CG_HALF2x1 1033
CG_HALF2x2 1034
CG_HALF2x3 1035
CG_HALF2x4 1036
CG_HALF3x1 1037
CG_HALF3x2 1038
CG_HALF3x3 1039
CG_HALF3x4 1040
CG_HALF4x1 1041
CG_HALF4x2 1042
CG_HALF4x3 1043
CG_HALF4x4 1044
CG_FLOAT 1045
CG_FLOAT2 1046
CG_FLOAT3 1047
CG_FLOAT4 1048
CG_FLOAT1x1 1049
CG_FLOAT1x2 1050
CG_FLOAT1x3 1051
CG_FLOAT1x4 1052
CG_FLOAT2x1 1053
CG_FLOAT2x2 1054
CG_FLOAT2x3 1055
CG_FLOAT2x4 1056
CG_FLOAT3x1 1057
CG_FLOAT3x2 1058
CG_FLOAT3x3 1059
CG_FLOAT3x4 1060
CG_FLOAT4x1 1061
CG_FLOAT4x2 1062
CG_FLOAT4x3 1063
CG_FLOAT4x4 1064
CG_SAMPLER1D 1065
CG_SAMPLER2D 1066
CG_SAMPLER3D 1067
CG_SAMPLERRECT 1068
CG_SAMPLERCUBE 1069
CG_FIXED 1070
CG_FIXED2 1071
CG_FIXED3 1072
CG_FIXED4 1073
CG_FIXED1x1 1074
CG_FIXED1x2 1075
CG_FIXED1x3 1076
CG_FIXED1x4 1077
CG_FIXED2x1 1078
CG_FIXED2x2 1079
CG_FIXED2x3 1080
CG_FIXED2x4 1081
CG_FIXED3x1 1082
CG_FIXED3x2 1083
CG_FIXED3x3 1084
CG_FIXED3x4 1085
CG_FIXED4x1 1086
CG_FIXED4x2 1087
CG_FIXED4x3 1088
CG_FIXED4x4 1089
CG_HALF1 1090
CG_FLOAT1 1091
CG_FIXED1 1092
CG_INT 1093
CG_INT1 1094
CG_INT2 1095
CG_INT3 1096
CG_INT4 1097
CG_INT1x1 1098
CG_INT1x2 1099
CG_INT1x3 1100
CG_INT1x4 1101
CG_INT2x1 1102
CG_INT2x2 1103
CG_INT2x3 1104
CG_INT2x4 1105
CG_INT3x1 1106
CG_INT3x2 1107
CG_INT3x3 1108
CG_INT3x4 1109
CG_INT4x1 1110
CG_INT4x2 1111
CG_INT4x3 1112
CG_INT4x4 1113
CG_BOOL 1114
CG_BOOL1 1115
CG_BOOL2 1116
CG_BOOL3 1117
CG_BOOL4 1118
CG_BOOL1x1 1119
CG_BOOL1x2 1120
CG_BOOL1x3 1121
CG_BOOL1x4 1122
CG_BOOL2x1 1123
CG_BOOL2x2 1124
CG_BOOL2x3 1125
CG_BOOL2x4 1126
CG_BOOL3x1 1127
CG_BOOL3x2 1128
CG_BOOL3x3 1129
CG_BOOL3x4 1130
CG_BOOL4x1 1131
CG_BOOL4x2 1132
CG_BOOL4x3 1133
CG_BOOL4x4 1134
CG_STRING 1135
CG_PROGRAM_TYPE 1136
CG_TEXTURE 1137
CG_SAMPLER1DARRAY 1138
CG_SAMPLER2DARRAY 1139
CG_VERTEXSHADER_TYPE 1140
CG_PIXELSHADER_TYPE 1141
CG_SAMPLER 1142

CGresource

Name Value Comments
CG_TEXUNIT0 2048
CG_TEXUNIT1 2049
CG_TEXUNIT2 2050
CG_TEXUNIT3 2051
CG_TEXUNIT4 2052
CG_TEXUNIT5 2053
CG_TEXUNIT6 2054
CG_TEXUNIT7 2055
CG_TEXUNIT8 2056
CG_TEXUNIT9 2057
CG_TEXUNIT10 2058
CG_TEXUNIT11 2059
CG_TEXUNIT12 2060
CG_TEXUNIT13 2061
CG_TEXUNIT14 2062
CG_TEXUNIT15 2063
CG_BUFFER0 2064
CG_BUFFER1 2065
CG_BUFFER2 2066
CG_BUFFER3 2067
CG_BUFFER4 2068
CG_BUFFER5 2069
CG_BUFFER6 2070
CG_BUFFER7 2071
CG_BUFFER8 2072
CG_BUFFER9 2073
CG_BUFFER10 2074
CG_BUFFER11 2075
CG_ATTR0 2113
CG_ATTR1 2114
CG_ATTR2 2115
CG_ATTR3 2116
CG_ATTR4 2117
CG_ATTR5 2118
CG_ATTR6 2119
CG_ATTR7 2120
CG_ATTR8 2121
CG_ATTR9 2122
CG_ATTR10 2123
CG_ATTR11 2124
CG_ATTR12 2125
CG_ATTR13 2126
CG_ATTR14 2127
CG_ATTR15 2128
CG_B 2177
CG_C 2178
CG_TEX0 2179
CG_TEX1 2180
CG_TEX2 2181
CG_TEX3 2192
CG_TEX4 2193
CG_TEX5 2194
CG_TEX6 2195
CG_TEX7 2196
CG_TEX8 2197
CG_TEX9 2198
CG_SSA 2199
CG_HPOS 2243
CG_COL0 2245
CG_COL1 2246
CG_COL2 2247
CG_COL3 2248
CG_PSIZ 2309
CG_CLP0 2310
CG_CLP1 2311
CG_CLP2 2312
CG_CLP3 2313
CG_CLP4 2314
CG_CLP5 2315
CG_WPOS 2373
CG_POINTCOORD 2374
CG_POSITION0 2437
CG_POSITION1 2438
CG_POSITION2 2439
CG_POSITION3 2440
CG_POSITION4 2441
CG_POSITION5 2442
CG_POSITION6 2443
CG_POSITION7 2444
CG_POSITION8 2445
CG_POSITION9 2446
CG_POSITION10 2447
CG_POSITION11 2448
CG_POSITION12 2449
CG_POSITION13 2450
CG_POSITION14 2451
CG_POSITION15 2452
CG_DIFFUSE0 2501
CG_TANGENT0 2565
CG_TANGENT1 2566
CG_TANGENT2 2567
CG_TANGENT3 2568
CG_TANGENT4 2569
CG_TANGENT5 2570
CG_TANGENT6 2571
CG_TANGENT7 2572
CG_TANGENT8 2573
CG_TANGENT9 2574
CG_TANGENT10 2575
CG_TANGENT11 2576
CG_TANGENT12 2577
CG_TANGENT13 2578
CG_TANGENT14 2579
CG_TANGENT15 2580
CG_SPECULAR0 2629
CG_BLENDINDICES0 2693
CG_BLENDINDICES1 2694
CG_BLENDINDICES2 2695
CG_BLENDINDICES3 2696
CG_BLENDINDICES4 2697
CG_BLENDINDICES5 2698
CG_BLENDINDICES6 2699
CG_BLENDINDICES7 2700
CG_BLENDINDICES8 2701
CG_BLENDINDICES9 2702
CG_BLENDINDICES10 2703
CG_BLENDINDICES11 2704
CG_BLENDINDICES12 2705
CG_BLENDINDICES13 2706
CG_BLENDINDICES14 2707
CG_BLENDINDICES15 2708
CG_COLOR0 2757
CG_COLOR1 2758
CG_COLOR2 2759
CG_COLOR3 2760
CG_COLOR4 2761
CG_COLOR5 2762
CG_COLOR6 2763
CG_COLOR7 2764
CG_COLOR8 2765
CG_COLOR9 2766
CG_COLOR10 2767
CG_COLOR11 2768
CG_COLOR12 2769
CG_COLOR13 2770
CG_COLOR14 2771
CG_COLOR15 2772
CG_PSIZE0 2821
CG_PSIZE1 2822
CG_PSIZE2 2823
CG_PSIZE3 2824
CG_PSIZE4 2825
CG_PSIZE5 2826
CG_PSIZE6 2827
CG_PSIZE7 2828
CG_PSIZE8 2829
CG_PSIZE9 2830
CG_PSIZE10 2831
CG_PSIZE11 2832
CG_PSIZE12 2833
CG_PSIZE13 2834
CG_PSIZE14 2835
CG_PSIZE15 2836
CG_BINORMAL0 2885
CG_BINORMAL1 2886
CG_BINORMAL2 2887
CG_BINORMAL3 2888
CG_BINORMAL4 2889
CG_BINORMAL5 2890
CG_BINORMAL6 2891
CG_BINORMAL7 2892
CG_BINORMAL8 2893
CG_BINORMAL9 2894
CG_BINORMAL10 2895
CG_BINORMAL11 2896
CG_BINORMAL12 2897
CG_BINORMAL13 2898
CG_BINORMAL14 2899
CG_BINORMAL15 2900
CG_FOG0 2917
CG_FOG1 2918
CG_FOG2 2919
CG_FOG3 2920
CG_FOG4 2921
CG_FOG5 2922
CG_FOG6 2923
CG_FOG7 2924
CG_FOG8 2925
CG_FOG9 2926
CG_FOG10 2927
CG_FOG11 2928
CG_FOG12 2929
CG_FOG13 2930
CG_FOG14 2931
CG_FOG15 2932
CG_DEPTH0 2933
CG_DEPTH1 2934
CG_DEPTH2 2935
CG_DEPTH3 2936
CG_DEPTH4 2937
CG_DEPTH5 2938
CG_DEPTH6 2939
CG_DEPTH7 2940
CG_DEPTH8 2941
CG_DEPTH9 2942
CG_DEPTH10 2943
CG_DEPTH11 2944
CG_DEPTH12 2945
CG_DEPTH13 2946
CG_DEPTH14 2947
CG_DEPTH15 2948
CG_SAMPLE0 2949
CG_SAMPLE1 2950
CG_SAMPLE2 2951
CG_SAMPLE3 2952
CG_SAMPLE4 2953
CG_SAMPLE5 2954
CG_SAMPLE6 2955
CG_SAMPLE7 2956
CG_SAMPLE8 2957
CG_SAMPLE9 2958
CG_SAMPLE10 2959
CG_SAMPLE11 2960
CG_SAMPLE12 2961
CG_SAMPLE13 2962
CG_SAMPLE14 2963
CG_SAMPLE15 2964
CG_BLENDWEIGHT0 3028
CG_BLENDWEIGHT1 3029
CG_BLENDWEIGHT2 3030
CG_BLENDWEIGHT3 3031
CG_BLENDWEIGHT4 3032
CG_BLENDWEIGHT5 3033
CG_BLENDWEIGHT6 3034
CG_BLENDWEIGHT7 3035
CG_BLENDWEIGHT8 3036
CG_BLENDWEIGHT9 3037
CG_BLENDWEIGHT10 3038
CG_BLENDWEIGHT11 3039
CG_BLENDWEIGHT12 3040
CG_BLENDWEIGHT13 3041
CG_BLENDWEIGHT14 3042
CG_BLENDWEIGHT15 3043
CG_NORMAL0 3092
CG_NORMAL1 3093
CG_NORMAL2 3094
CG_NORMAL3 3095
CG_NORMAL4 3096
CG_NORMAL5 3097
CG_NORMAL6 3098
CG_NORMAL7 3099
CG_NORMAL8 3100
CG_NORMAL9 3101
CG_NORMAL10 3102
CG_NORMAL11 3103
CG_NORMAL12 3104
CG_NORMAL13 3105
CG_NORMAL14 3106
CG_NORMAL15 3107
CG_FOGCOORD 3156
CG_TEXCOORD0 3220
CG_TEXCOORD1 3221
CG_TEXCOORD2 3222
CG_TEXCOORD3 3223
CG_TEXCOORD4 3224
CG_TEXCOORD5 3225
CG_TEXCOORD6 3226
CG_TEXCOORD7 3227
CG_TEXCOORD8 3228
CG_TEXCOORD9 3229
CG_TEXCOORD10 3230
CG_TEXCOORD11 3231
CG_TEXCOORD12 3232
CG_TEXCOORD13 3233
CG_TEXCOORD14 3234
CG_TEXCOORD15 3235
CG_TESSFACTOR 3255
CG_UNDEFINED 3256
CG_COMBINER_CONST0 3284
CG_COMBINER_CONST1 3285
CG_COMBINER_STAGE_CONST0 3286
CG_COMBINER_STAGE_CONST1 3287
CG_OFFSET_TEXTURE_MATRIX 3288
CG_OFFSET_TEXTURE_SCALE 3289
CG_OFFSET_TEXTURE_BIAS 3290
CG_CONST_EYE 3291
CG_COVERAGE 3292
CG_GLSL_UNIFORM 3300
CG_GLSL_ATTRIB 3301
CG_ENV 3302
CG_ENV0 – CG_ENV255 3303 – 3558
CG_HLSL_UNIFORM 3559
CG_HLSL_VARYING 3560
CG_SAMPLER_RES 3561
CG_LASTCOL0 4400
CG_LASTCOL1 4401
CG_LASTCOL2 4402
CG_LASTCOL3 4403
CG_LASTCOL4 4404
CG_LASTCOL5 4405
CG_LASTCOL6 4406
CG_LASTCOL7 4407

CGenum

Name Value Comments
CG_UNKNOWN 4096
CG_IN 4097
CG_OUT 4098
CG_INOUT 4099
CG_MIXED 4100
CG_VARYING 4101
CG_UNIFORM 4102
CG_CONSTANT 4103
CG_PROGRAM_SOURCE 4104
CG_PROGRAM_ENTRY 4105
CG_COMPILED_PROGRAM 4106
CG_PROGRAM_PROFILE 4107
CG_GLOBAL 4108
CG_PROGRAM 4109
CG_DEFAULT 4110
CG_ERROR 4111
CG_SOURCE 4112
CG_OBJECT 4113
CG_COMPILE_MANUAL 4114
CG_COMPILE_IMMEDIATE 4115
CG_COMPILE_LAZY 4116
CG_CURRENT 4117
CG_LITERAL 4118
CG_VERSION 4119
CG_ROW_MAJOR 4120
CG_COLUMN_MAJOR 4121
CG_BINARY
CG_FRAGMENT
4122
CG_PROGRAM_FILENAME
CG_VERTEX
4123
CG_POINT 4124
CG_LINE 4125
CG_LINE_ADJ 4126
CG_TRIANGLE 4127
CG_TRIANGLE_ADJ 4128
CG_POINT_OUT 4129
CG_LINE_OUT 4130
CG_TRIANGLE_OUT 4131
CG_IMMEDIATE_PARAMETER_SETTING 4132
CG_DEFERRED_PARAMETER_SETTING 4133
CG_NO_LOCKS_POLICY 4134
CG_THREAD_SAFE_POLICY 4135
CG_FORCE_UPPER_CASE_POLICY 4136
CG_UNCHANGED_CASE_POLICY 4137

CgBinaryPartialTexType

Name Value Comments
CgBinaryPTTNone 0
CgBinaryPTT2x16 1
CgBinaryPTT1x32 2