Difference between revisions of "Nintendo OpenGL"

From 3dbrew
Jump to navigation Jump to search
 
(26 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
This page's goal is to describe parts of Nintendo's OpenGL implementation for the 3DS as we reverse engineer it to better understand how to use the PICA200.
 
This page's goal is to describe parts of Nintendo's OpenGL implementation for the 3DS as we reverse engineer it to better understand how to use the PICA200.
 +
Some of the information on this page is specific to Steeldiver : Sub Wars. The reason for this is that it's a fairly graphics-heavy game that's available on the eShop for '''free''', so it seems like a good target for a community REing effort.
  
 
== Description ==
 
== Description ==
  
The PICA200 is an opengl ES 1.1 compliant GPU manufactured by DMP. It comes loaded with a number of extensions that make it similar to an openGL ES 2.0 compliant GPU (ability to run programmable vertex/geometry shaders, for instance). Because of this, Nintendo wrapped GPU access into an openGL ES 2.0 implementation with some limitations. As the fragment stage of the pipeline is non-programmable, Nintendo instead gives developers the ability to configure a number of fragment-related values through glGetUniformLocation and glUniformXX. See below for the full list.
+
The PICA200 is an OpenGL ES 1.1 compliant GPU manufactured by DMP. It comes loaded with a number of extensions that make it similar to an OpenGL ES 2.0 compliant GPU (ability to run programmable vertex/geometry shaders, for instance). Because of this, Nintendo wrapped GPU access into an OpenGL ES 2.0 implementation with some limitations. As the fragment stage of the pipeline is non-programmable, Nintendo instead gives developers the ability to configure a number of fragment-related values through glGetUniformLocation and glUniformXX. See below for the full list.
  
 
== Shader program structure ==
 
== Shader program structure ==
Line 38: Line 39:
 
| 0x04
 
| 0x04
 
| Number of program-specific uniforms
 
| Number of program-specific uniforms
 +
|-
 +
| 0x414
 +
| 0x04
 +
| Pointer to vertex shader struct
 
|-
 
|-
 
| 0x64C
 
| 0x64C
Line 101: Line 106:
 
| 0x04
 
| 0x04
 
| dmp_FragmentLightSource[k].distanceAttenuationScale (float)
 
| dmp_FragmentLightSource[k].distanceAttenuationScale (float)
 +
|}
 +
 +
vertex/geometry shader struct:
 +
{| class="wikitable" border="1"
 +
! Offset
 +
!  Size
 +
!  Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Pointer to shader code data
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Size of shader code (in words)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Pointer to shader opdesc data
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Size of shader opdescs (in words)
 
|}
 
|}
  
Line 109: Line 137:
 
2. Take note of its ID and type !
 
2. Take note of its ID and type !
  
3. Depending on whether its a float or not, go through the gigantic switches in shm_uniformfv or shm_uniformiv (non-float) based on the ID of your uniform
+
3. Depending on whether its a float or not, go through the gigantic switches in shm_uniformfv or shm_uniformiv (non-float) based on the ID of your uniform (in the case of '''steeldiver: sub wars''' you can now just go directly to the handler as it's listed in the table below)
  
 
4. Once you find the piece of code specific to your uniform, take note of how the values passed to shm_uniformfv/shm_uniformiv are written to the shader object
 
4. Once you find the piece of code specific to your uniform, take note of how the values passed to shm_uniformfv/shm_uniformiv are written to the shader object
Line 123: Line 151:
 
!  Type
 
!  Type
 
!  Name
 
!  Name
!  Handler address in Steeldiver : Sub Wars
+
!  Handler address (Steeldiver : Sub Wars)
 +
!  Shader Program struct offset
 +
!  GPU Register
 
|-  
 
|-  
 
| 0x0
 
| 0x0
Line 129: Line 159:
 
| dmp_Texture[0].perspectiveShadow
 
| dmp_Texture[0].perspectiveShadow
 
| 0x0012A504
 
| 0x0012A504
 +
| ?
 +
| 0x008B bit0 (0 = enable??)
 
|-  
 
|-  
 
| 0x1
 
| 0x1
Line 134: Line 166:
 
| dmp_Texture[0].shadowZBias
 
| dmp_Texture[0].shadowZBias
 
| 0x00155584
 
| 0x00155584
 +
| 0xE44
 +
| ?
 
|-  
 
|-  
 
| 0x2
 
| 0x2
Line 139: Line 173:
 
| dmp_Texture[0].shadowZScale
 
| dmp_Texture[0].shadowZScale
 
| 0x001556A0
 
| 0x001556A0
 +
| 0xE48
 +
| ?
 
|-  
 
|-  
 
| 0x3
 
| 0x3
Line 144: Line 180:
 
| dmp_Texture[0].samplerType
 
| dmp_Texture[0].samplerType
 
| 0x0012A5D0
 
| 0x0012A5D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x4
 
| 0x4
Line 149: Line 187:
 
| dmp_Texture[1].samplerType
 
| dmp_Texture[1].samplerType
 
| 0x0012A6F8
 
| 0x0012A6F8
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x5
 
| 0x5
Line 154: Line 194:
 
| dmp_Texture[2].samplerType
 
| dmp_Texture[2].samplerType
 
| 0x0012A774
 
| 0x0012A774
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x6
 
| 0x6
Line 159: Line 201:
 
| dmp_Texture[3].samplerType
 
| dmp_Texture[3].samplerType
 
| 0x0012A7F0
 
| 0x0012A7F0
 +
| ?
 +
| 0x0080 bit10 (?)
 
|-  
 
|-  
 
| 0x7
 
| 0x7
Line 164: Line 208:
 
| dmp_Texture[2].texcoord
 
| dmp_Texture[2].texcoord
 
| 0x0012A8B4
 
| 0x0012A8B4
 +
| ?
 +
| 0x0080 bit13 (1 = use texcoords from texture unit 1)
 
|-  
 
|-  
 
| 0x8
 
| 0x8
Line 169: Line 215:
 
| dmp_Texture[3].texcoord
 
| dmp_Texture[3].texcoord
 
| 0x0012A97C
 
| 0x0012A97C
 +
| ?
 +
| 0x0080 bit8-9 (0-2 = use texcoords from texture unit 0-2 resp., 3 = forbidden?)
 
|-  
 
|-  
 
| 0x9
 
| 0x9
Line 174: Line 222:
 
| dmp_Texture[3].ptRgbMap
 
| dmp_Texture[3].ptRgbMap
 
| 0x0012AA54
 
| 0x0012AA54
 +
| ?
 +
| 0x00A8 bit6-9
 
|-  
 
|-  
 
| 0xA
 
| 0xA
Line 179: Line 229:
 
| dmp_Texture[3].ptAlphaMap
 
| dmp_Texture[3].ptAlphaMap
 
| 0x0012AB94
 
| 0x0012AB94
 +
| ?
 +
| 0x00A8 bit10-13
 
|-  
 
|-  
 
| 0xB
 
| 0xB
Line 184: Line 236:
 
| dmp_Texture[3].ptAlphaSeparate
 
| dmp_Texture[3].ptAlphaSeparate
 
| 0x0012ACD4
 
| 0x0012ACD4
 +
| ?
 +
| 0x00A8 bit14
 
|-  
 
|-  
 
| 0xC
 
| 0xC
Line 189: Line 243:
 
| dmp_Texture[3].ptClampU
 
| dmp_Texture[3].ptClampU
 
| 0x0012ADB8
 
| 0x0012ADB8
 +
| ?
 +
| 0x00A8 bit0-2
 
|-  
 
|-  
 
| 0xD
 
| 0xD
Line 194: Line 250:
 
| dmp_Texture[3].ptClampV
 
| dmp_Texture[3].ptClampV
 
| 0x0012AEC0
 
| 0x0012AEC0
 +
| ?
 +
| 0x00A8 bit3-5
 
|-  
 
|-  
 
| 0xE
 
| 0xE
Line 199: Line 257:
 
| dmp_Texture[3].ptShiftU
 
| dmp_Texture[3].ptShiftU
 
| 0x0012AFD0
 
| 0x0012AFD0
 +
| ?
 +
| 0x00A8 bit16-17
 
|-  
 
|-  
 
| 0xF
 
| 0xF
Line 204: Line 264:
 
| dmp_Texture[3].ptShiftV
 
| dmp_Texture[3].ptShiftV
 
| 0x0012B0A0
 
| 0x0012B0A0
 +
| ?
 +
| 0x00A8 bit18-19
 
|-  
 
|-  
 
| 0x10
 
| 0x10
Line 209: Line 271:
 
| dmp_Texture[3].ptMinFilter
 
| dmp_Texture[3].ptMinFilter
 
| 0x0012B168
 
| 0x0012B168
 +
| ?
 +
| 0x00AC bit0-2
 
|-  
 
|-  
 
| 0x11
 
| 0x11
Line 214: Line 278:
 
| dmp_Texture[3].ptTexWidth
 
| dmp_Texture[3].ptTexWidth
 
| 0x0012B270
 
| 0x0012B270
 +
| ?
 +
| 0x00AC bit11-18
 
|-  
 
|-  
 
| 0x12
 
| 0x12
Line 219: Line 285:
 
| dmp_Texture[3].ptTexOffset
 
| dmp_Texture[3].ptTexOffset
 
| 0x0012B334
 
| 0x0012B334
 +
| ?
 +
| 0x00AD bit0-7
 
|-  
 
|-  
 
| 0x13
 
| 0x13
Line 224: Line 292:
 
| dmp_Texture[3].ptTexBias
 
| dmp_Texture[3].ptTexBias
 
| 0x001556B4
 
| 0x001556B4
 +
| 0xE10
 +
| 0x00A8 bit20-27
 
|-  
 
|-  
 
| 0x14
 
| 0x14
Line 229: Line 299:
 
| dmp_Texture[3].ptNoiseEnable
 
| dmp_Texture[3].ptNoiseEnable
 
| 0x0012B3E0
 
| 0x0012B3E0
 +
| ?
 +
| 0x00A8 bit15
 
|-  
 
|-  
 
| 0x15
 
| 0x15
Line 234: Line 306:
 
| dmp_Texture[3].ptNoiseU
 
| dmp_Texture[3].ptNoiseU
 
| 0x00155878
 
| 0x00155878
 +
| 0xE14
 +
| 0x00A9, 0x00AB
 
|-  
 
|-  
 
| 0x16
 
| 0x16
Line 239: Line 313:
 
| dmp_Texture[3].ptNoiseV
 
| dmp_Texture[3].ptNoiseV
 
| 0x00155A7C
 
| 0x00155A7C
 +
| 0xE20
 +
| 0x00AA, 0x00AB
 
|-  
 
|-  
 
| 0x17
 
| 0x17
Line 244: Line 320:
 
| dmp_Texture[3].ptSamplerRgbMap
 
| dmp_Texture[3].ptSamplerRgbMap
 
| 0x0012B4B0
 
| 0x0012B4B0
 +
| 0xDF0
 +
| ?
 
|-  
 
|-  
 
| 0x18
 
| 0x18
Line 249: Line 327:
 
| dmp_Texture[3].ptSamplerAlphaMap
 
| dmp_Texture[3].ptSamplerAlphaMap
 
| 0x0012B4F4
 
| 0x0012B4F4
 +
| 0xDF4
 +
| ?
 
|-  
 
|-  
 
| 0x19
 
| 0x19
Line 254: Line 334:
 
| dmp_Texture[3].ptSamplerNoiseMap
 
| dmp_Texture[3].ptSamplerNoiseMap
 
| 0x0012B540
 
| 0x0012B540
 +
| 0xDF8
 +
| ?
 
|-  
 
|-  
 
| 0x1A
 
| 0x1A
Line 259: Line 341:
 
| dmp_Texture[3].ptSamplerR
 
| dmp_Texture[3].ptSamplerR
 
| 0x0012B58C
 
| 0x0012B58C
 +
| 0xDFC
 +
| ?
 
|-  
 
|-  
 
| 0x1B
 
| 0x1B
Line 264: Line 348:
 
| dmp_Texture[3].ptSamplerG
 
| dmp_Texture[3].ptSamplerG
 
| 0x0012B5D8
 
| 0x0012B5D8
 +
| 0xE00
 +
| ?
 
|-  
 
|-  
 
| 0x1C
 
| 0x1C
Line 269: Line 355:
 
| dmp_Texture[3].ptSamplerB
 
| dmp_Texture[3].ptSamplerB
 
| 0x0012B624
 
| 0x0012B624
 +
| 0xE04
 +
| ?
 
|-  
 
|-  
 
| 0x1D
 
| 0x1D
Line 274: Line 362:
 
| dmp_Texture[3].ptSamplerA
 
| dmp_Texture[3].ptSamplerA
 
| 0x0012B670
 
| 0x0012B670
 +
| 0xE08
 +
| ?
 
|-  
 
|-  
 
| 0x1E
 
| 0x1E
Line 279: Line 369:
 
| dmp_FragOperation.mode
 
| dmp_FragOperation.mode
 
| 0x0012B6BC
 
| 0x0012B6BC
 +
| 0xE38
 +
| ?
 
|-  
 
|-  
 
| 0x1F
 
| 0x1F
Line 284: Line 376:
 
| dmp_FragOperation.penumbraScale
 
| dmp_FragOperation.penumbraScale
 
| 0x00155C98
 
| 0x00155C98
 +
| 0xE40
 +
| ?
 
|-  
 
|-  
 
| 0x20
 
| 0x20
Line 289: Line 383:
 
| dmp_FragOperation.penumbraBias
 
| dmp_FragOperation.penumbraBias
 
| 0x00155D8C
 
| 0x00155D8C
 +
| 0xE3C
 +
| ?
 
|-  
 
|-  
 
| 0x21
 
| 0x21
Line 294: Line 390:
 
| dmp_FragOperation.wScale
 
| dmp_FragOperation.wScale
 
| 0x00155E9C
 
| 0x00155E9C
 +
| 0xE4C
 +
| ?
 
|-  
 
|-  
 
| 0x22
 
| 0x22
Line 299: Line 397:
 
| dmp_FragOperation.enableClippingPlane
 
| dmp_FragOperation.enableClippingPlane
 
| 0x0012EAEC
 
| 0x0012EAEC
 +
| 0x568
 +
| 0x0047 bit0
 
|-  
 
|-  
 
| 0x23
 
| 0x23
Line 304: Line 404:
 
| dmp_FragOperation.clippingPlane
 
| dmp_FragOperation.clippingPlane
 
| 0x00159474
 
| 0x00159474
 +
| 0xE50
 +
| ?
 
|-  
 
|-  
 
| 0x24
 
| 0x24
Line 309: Line 411:
 
| dmp_FragOperation.enableAlphaTest
 
| dmp_FragOperation.enableAlphaTest
 
| 0x0012EBAC
 
| 0x0012EBAC
 +
| 0x64C
 +
| ?
 
|-  
 
|-  
 
| 0x25
 
| 0x25
Line 314: Line 418:
 
| dmp_FragOperation.alphaTestFunc
 
| dmp_FragOperation.alphaTestFunc
 
| 0x0012EC64
 
| 0x0012EC64
 +
| 0x64C
 +
| ?
 
|-  
 
|-  
 
| 0x26
 
| 0x26
Line 319: Line 425:
 
| dmp_FragOperation.alphaRefValue
 
| dmp_FragOperation.alphaRefValue
 
| 0x0015971C
 
| 0x0015971C
 +
| 0x64C ?
 +
| ?
 
|-  
 
|-  
 
| 0x27
 
| 0x27
Line 324: Line 432:
 
| dmp_Gas.lightXY
 
| dmp_Gas.lightXY
 
| 0x001560EC
 
| 0x001560EC
 +
| 0xE84
 +
| 0x0120 (vec[0] -> bit0-7, vec[1] -> bit8-15, vec[2] -> bit16-23)
 
|-  
 
|-  
 
| 0x28
 
| 0x28
Line 329: Line 439:
 
| dmp_Gas.lightZ
 
| dmp_Gas.lightZ
 
| 0x00156268
 
| 0x00156268
 +
| 0xE90
 +
| 0x0121 (vec[0] -> bit0-7, vec[1] -> bit8-15, vec[2] -> bit16-23), 0x0122 (vec[3] -> bit 0-7)
 
|-  
 
|-  
 
| 0x29
 
| 0x29
Line 334: Line 446:
 
| dmp_Gas.deltaZ
 
| dmp_Gas.deltaZ
 
| 0x001564D4
 
| 0x001564D4
 +
| 0xEA0
 +
| 0x0126 bit0-23
 
|-  
 
|-  
 
| 0x2A
 
| 0x2A
Line 339: Line 453:
 
| dmp_Gas.accMax
 
| dmp_Gas.accMax
 
| 0x001565C0
 
| 0x001565C0
 +
| 0xEA4
 +
| 0x00E5
 
|-  
 
|-  
 
| 0x2B
 
| 0x2B
Line 344: Line 460:
 
| dmp_Gas.autoAcc
 
| dmp_Gas.autoAcc
 
| 0x0012B790
 
| 0x0012B790
 +
| 0xE74
 +
| ?
 
|-  
 
|-  
 
| 0x2C
 
| 0x2C
Line 349: Line 467:
 
| dmp_Gas.attenuation
 
| dmp_Gas.attenuation
 
| 0x00156684
 
| 0x00156684
 +
| 0xEA8
 +
| 0x00E4
 
|-  
 
|-  
 
| 0x2D
 
| 0x2D
Line 354: Line 474:
 
| dmp_Gas.colorLutInput
 
| dmp_Gas.colorLutInput
 
| 0x0012B7A4
 
| 0x0012B7A4
 +
| 0x640
 +
| 0x0122 bit8 (0x6060/0x6061 -> 0/1)
 
|-  
 
|-  
 
| 0x2E
 
| 0x2E
Line 359: Line 481:
 
| dmp_Gas.shadingDensitySrc
 
| dmp_Gas.shadingDensitySrc
 
| 0x0012B854
 
| 0x0012B854
 +
| 0x624
 +
| 0x00E0 bit3 (0x605E/0x605F -> 0/1)
 
|-  
 
|-  
 
| 0x2F
 
| 0x2F
Line 364: Line 488:
 
| dmp_Gas.samplerTR
 
| dmp_Gas.samplerTR
 
| 0x0012B910
 
| 0x0012B910
 +
| 0xE78
 +
| ?
 
|-  
 
|-  
 
| 0x30
 
| 0x30
Line 369: Line 495:
 
| dmp_Gas.samplerTG
 
| dmp_Gas.samplerTG
 
| 0x0012B95C
 
| 0x0012B95C
 +
| 0xE7C
 +
| ?
 
|-  
 
|-  
 
| 0x31
 
| 0x31
Line 374: Line 502:
 
| dmp_Gas.samplerTB
 
| dmp_Gas.samplerTB
 
| 0x0012B9A8
 
| 0x0012B9A8
 +
| 0xE80
 +
| ?
 
|-  
 
|-  
 
| 0x32
 
| 0x32
Line 379: Line 509:
 
| dmp_FragmentLighting.enabled
 
| dmp_FragmentLighting.enabled
 
| 0x0012B9F4
 
| 0x0012B9F4
 +
| 0x590
 +
| 0x00A8 bit0, 0x01C6 (0 = enabled)
 
|-  
 
|-  
 
| 0x33
 
| 0x33
Line 384: Line 516:
 
| dmp_FragmentLighting.ambient
 
| dmp_FragmentLighting.ambient
 
| 0x00156744
 
| 0x00156744
 +
| 0xA10
 +
| 0x01C0?
 
|-  
 
|-  
 
| 0x34
 
| 0x34
Line 389: Line 523:
 
| dmp_FragmentMaterial.emission
 
| dmp_FragmentMaterial.emission
 
| 0x00156E1C
 
| 0x00156E1C
 +
| 0xDE0
 +
| 0x01C0?
 
|-  
 
|-  
 
| 0x35
 
| 0x35
Line 394: Line 530:
 
| dmp_FragmentMaterial.ambient
 
| dmp_FragmentMaterial.ambient
 
| 0x0015696C
 
| 0x0015696C
 +
| 0xDA0
 +
| 0x01C0
 
|-  
 
|-  
 
| 0x36
 
| 0x36
Line 399: Line 537:
 
| dmp_FragmentMaterial.diffuse
 
| dmp_FragmentMaterial.diffuse
 
| 0x00157048
 
| 0x00157048
 +
| 0xDB0
 +
| ?
 
|-  
 
|-  
 
| 0x37
 
| 0x37
Line 404: Line 544:
 
| dmp_FragmentMaterial.specular0
 
| dmp_FragmentMaterial.specular0
 
| 0x001572E0
 
| 0x001572E0
 +
| 0xDC0
 +
| ?
 
|-  
 
|-  
 
| 0x38
 
| 0x38
Line 409: Line 551:
 
| dmp_FragmentMaterial.specular1
 
| dmp_FragmentMaterial.specular1
 
| 0x0015756C
 
| 0x0015756C
 +
| 0xDD0
 +
| ?
 
|-  
 
|-  
 
| 0x39
 
| 0x39
Line 414: Line 558:
 
| dmp_FragmentLightSource[0].enabled
 
| dmp_FragmentLightSource[0].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+0*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x3A
 
| 0x3A
Line 419: Line 565:
 
| dmp_FragmentLightSource[1].enabled
 
| dmp_FragmentLightSource[1].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+1*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x3B
 
| 0x3B
Line 424: Line 572:
 
| dmp_FragmentLightSource[2].enabled
 
| dmp_FragmentLightSource[2].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+2*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x3C
 
| 0x3C
Line 429: Line 579:
 
| dmp_FragmentLightSource[3].enabled
 
| dmp_FragmentLightSource[3].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+3*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x3D
 
| 0x3D
Line 434: Line 586:
 
| dmp_FragmentLightSource[4].enabled
 
| dmp_FragmentLightSource[4].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+4*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x3E
 
| 0x3E
Line 439: Line 593:
 
| dmp_FragmentLightSource[5].enabled
 
| dmp_FragmentLightSource[5].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+5*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x3F
 
| 0x3F
Line 444: Line 600:
 
| dmp_FragmentLightSource[6].enabled
 
| dmp_FragmentLightSource[6].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+6*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x40
 
| 0x40
Line 449: Line 607:
 
| dmp_FragmentLightSource[7].enabled
 
| dmp_FragmentLightSource[7].enabled
 
| 0x0012BD24
 
| 0x0012BD24
 +
| 0xA20+7*0x70+0x00
 +
| 0x01C5
 
|-  
 
|-  
 
| 0x41
 
| 0x41
Line 454: Line 614:
 
| dmp_FragmentLightSource[0].ambient
 
| dmp_FragmentLightSource[0].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+0*0x70+0x04
 +
| 0x0143
 
|-  
 
|-  
 
| 0x42
 
| 0x42
Line 459: Line 621:
 
| dmp_FragmentLightSource[1].ambient
 
| dmp_FragmentLightSource[1].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+1*0x70+0x04
 +
| 0x0153
 
|-  
 
|-  
 
| 0x43
 
| 0x43
Line 464: Line 628:
 
| dmp_FragmentLightSource[2].ambient
 
| dmp_FragmentLightSource[2].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+2*0x70+0x04
 +
| 0x0163
 
|-  
 
|-  
 
| 0x44
 
| 0x44
Line 469: Line 635:
 
| dmp_FragmentLightSource[3].ambient
 
| dmp_FragmentLightSource[3].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+3*0x70+0x04
 +
| 0x0173
 
|-  
 
|-  
 
| 0x45
 
| 0x45
Line 474: Line 642:
 
| dmp_FragmentLightSource[4].ambient
 
| dmp_FragmentLightSource[4].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+4*0x70+0x04
 +
| 0x0183
 
|-  
 
|-  
 
| 0x46
 
| 0x46
Line 479: Line 649:
 
| dmp_FragmentLightSource[5].ambient
 
| dmp_FragmentLightSource[5].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+5*0x70+0x04
 +
| 0x0193
 
|-  
 
|-  
 
| 0x47
 
| 0x47
Line 484: Line 656:
 
| dmp_FragmentLightSource[6].ambient
 
| dmp_FragmentLightSource[6].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+6*0x70+0x04
 +
| 0x01A3
 
|-  
 
|-  
 
| 0x48
 
| 0x48
Line 489: Line 663:
 
| dmp_FragmentLightSource[7].ambient
 
| dmp_FragmentLightSource[7].ambient
 
| 0x001579CC
 
| 0x001579CC
 +
| 0xA20+7*0x70+0x04
 +
| 0x01B3
 
|-  
 
|-  
 
| 0x49
 
| 0x49
Line 494: Line 670:
 
| dmp_FragmentLightSource[0].diffuse
 
| dmp_FragmentLightSource[0].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+0*0x70+0x14
 +
| 0x0142
 
|-  
 
|-  
 
| 0x4A
 
| 0x4A
Line 499: Line 677:
 
| dmp_FragmentLightSource[1].diffuse
 
| dmp_FragmentLightSource[1].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+1*0x70+0x14
 +
| 0x0152
 
|-  
 
|-  
 
| 0x4B
 
| 0x4B
Line 504: Line 684:
 
| dmp_FragmentLightSource[2].diffuse
 
| dmp_FragmentLightSource[2].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+2*0x70+0x14
 +
| 0x0162
 
|-  
 
|-  
 
| 0x4C
 
| 0x4C
Line 509: Line 691:
 
| dmp_FragmentLightSource[3].diffuse
 
| dmp_FragmentLightSource[3].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+3*0x70+0x14
 +
| 0x0172
 
|-  
 
|-  
 
| 0x4D
 
| 0x4D
Line 514: Line 698:
 
| dmp_FragmentLightSource[4].diffuse
 
| dmp_FragmentLightSource[4].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+4*0x70+0x14
 +
| 0x0182
 
|-  
 
|-  
 
| 0x4E
 
| 0x4E
Line 519: Line 705:
 
| dmp_FragmentLightSource[5].diffuse
 
| dmp_FragmentLightSource[5].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+5*0x70+0x14
 +
| 0x0192
 
|-  
 
|-  
 
| 0x4F
 
| 0x4F
Line 524: Line 712:
 
| dmp_FragmentLightSource[6].diffuse
 
| dmp_FragmentLightSource[6].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+6*0x70+0x14
 +
| 0x01A2
 
|-  
 
|-  
 
| 0x50
 
| 0x50
Line 529: Line 719:
 
| dmp_FragmentLightSource[7].diffuse
 
| dmp_FragmentLightSource[7].diffuse
 
| 0x00157C10
 
| 0x00157C10
 +
| 0xA20+7*0x70+0x14
 +
| 0x01B2
 
|-  
 
|-  
 
| 0x51
 
| 0x51
Line 534: Line 726:
 
| dmp_FragmentLightSource[0].specular0
 
| dmp_FragmentLightSource[0].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+0*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x52
 
| 0x52
Line 539: Line 733:
 
| dmp_FragmentLightSource[1].specular0
 
| dmp_FragmentLightSource[1].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+1*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x53
 
| 0x53
Line 544: Line 740:
 
| dmp_FragmentLightSource[2].specular0
 
| dmp_FragmentLightSource[2].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+2*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x54
 
| 0x54
Line 549: Line 747:
 
| dmp_FragmentLightSource[3].specular0
 
| dmp_FragmentLightSource[3].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+3*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x55
 
| 0x55
Line 554: Line 754:
 
| dmp_FragmentLightSource[4].specular0
 
| dmp_FragmentLightSource[4].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+4*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x56
 
| 0x56
Line 559: Line 761:
 
| dmp_FragmentLightSource[5].specular0
 
| dmp_FragmentLightSource[5].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+5*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x57
 
| 0x57
Line 564: Line 768:
 
| dmp_FragmentLightSource[6].specular0
 
| dmp_FragmentLightSource[6].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+6*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x58
 
| 0x58
Line 569: Line 775:
 
| dmp_FragmentLightSource[7].specular0
 
| dmp_FragmentLightSource[7].specular0
 
| 0x00157E5C
 
| 0x00157E5C
 +
| 0xA20+7*0x70+0x24
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x59
 
| 0x59
Line 574: Line 782:
 
| dmp_FragmentLightSource[0].specular1
 
| dmp_FragmentLightSource[0].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+0*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x5A
 
| 0x5A
Line 579: Line 789:
 
| dmp_FragmentLightSource[1].specular1
 
| dmp_FragmentLightSource[1].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+1*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x5B
 
| 0x5B
Line 584: Line 796:
 
| dmp_FragmentLightSource[2].specular1
 
| dmp_FragmentLightSource[2].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+2*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x5C
 
| 0x5C
Line 589: Line 803:
 
| dmp_FragmentLightSource[3].specular1
 
| dmp_FragmentLightSource[3].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+3*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x5D
 
| 0x5D
Line 594: Line 810:
 
| dmp_FragmentLightSource[4].specular1
 
| dmp_FragmentLightSource[4].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+4*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x5E
 
| 0x5E
Line 599: Line 817:
 
| dmp_FragmentLightSource[5].specular1
 
| dmp_FragmentLightSource[5].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+5*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x5F
 
| 0x5F
Line 604: Line 824:
 
| dmp_FragmentLightSource[6].specular1
 
| dmp_FragmentLightSource[6].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+6*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x60
 
| 0x60
Line 609: Line 831:
 
| dmp_FragmentLightSource[7].specular1
 
| dmp_FragmentLightSource[7].specular1
 
| 0x001580B4
 
| 0x001580B4
 +
| 0xA20+7*0x70+0x34
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x61
 
| 0x61
Line 614: Line 838:
 
| dmp_FragmentLightSource[0].position
 
| dmp_FragmentLightSource[0].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+0*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x62
 
| 0x62
Line 619: Line 845:
 
| dmp_FragmentLightSource[1].position
 
| dmp_FragmentLightSource[1].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+1*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x63
 
| 0x63
Line 624: Line 852:
 
| dmp_FragmentLightSource[2].position
 
| dmp_FragmentLightSource[2].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+2*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x64
 
| 0x64
Line 629: Line 859:
 
| dmp_FragmentLightSource[3].position
 
| dmp_FragmentLightSource[3].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+3*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x65
 
| 0x65
Line 634: Line 866:
 
| dmp_FragmentLightSource[4].position
 
| dmp_FragmentLightSource[4].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+4*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x66
 
| 0x66
Line 639: Line 873:
 
| dmp_FragmentLightSource[5].position
 
| dmp_FragmentLightSource[5].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+5*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x67
 
| 0x67
Line 644: Line 880:
 
| dmp_FragmentLightSource[6].position
 
| dmp_FragmentLightSource[6].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+6*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x68
 
| 0x68
Line 649: Line 887:
 
| dmp_FragmentLightSource[7].position
 
| dmp_FragmentLightSource[7].position
 
| 0x001584B0
 
| 0x001584B0
 +
| 0xA20+7*0x70+0x44
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x69
 
| 0x69
Line 654: Line 894:
 
| dmp_FragmentLightSource[0].spotDirection
 
| dmp_FragmentLightSource[0].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+0*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x6A
 
| 0x6A
Line 659: Line 901:
 
| dmp_FragmentLightSource[1].spotDirection
 
| dmp_FragmentLightSource[1].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+1*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x6B
 
| 0x6B
Line 664: Line 908:
 
| dmp_FragmentLightSource[2].spotDirection
 
| dmp_FragmentLightSource[2].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+2*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x6C
 
| 0x6C
Line 669: Line 915:
 
| dmp_FragmentLightSource[3].spotDirection
 
| dmp_FragmentLightSource[3].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+3*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x6D
 
| 0x6D
Line 674: Line 922:
 
| dmp_FragmentLightSource[4].spotDirection
 
| dmp_FragmentLightSource[4].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+4*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x6E
 
| 0x6E
Line 679: Line 929:
 
| dmp_FragmentLightSource[5].spotDirection
 
| dmp_FragmentLightSource[5].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+5*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x6F
 
| 0x6F
Line 684: Line 936:
 
| dmp_FragmentLightSource[6].spotDirection
 
| dmp_FragmentLightSource[6].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+6*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x70
 
| 0x70
Line 689: Line 943:
 
| dmp_FragmentLightSource[7].spotDirection
 
| dmp_FragmentLightSource[7].spotDirection
 
| 0x001587E4
 
| 0x001587E4
 +
| 0xA20+7*0x70+0x54
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x71
 
| 0x71
Line 694: Line 950:
 
| dmp_FragmentLightSource[0].shadowed
 
| dmp_FragmentLightSource[0].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x72
 
| 0x72
Line 699: Line 957:
 
| dmp_FragmentLightSource[1].shadowed
 
| dmp_FragmentLightSource[1].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x73
 
| 0x73
Line 704: Line 964:
 
| dmp_FragmentLightSource[2].shadowed
 
| dmp_FragmentLightSource[2].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x74
 
| 0x74
Line 709: Line 971:
 
| dmp_FragmentLightSource[3].shadowed
 
| dmp_FragmentLightSource[3].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x75
 
| 0x75
Line 714: Line 978:
 
| dmp_FragmentLightSource[4].shadowed
 
| dmp_FragmentLightSource[4].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x76
 
| 0x76
Line 719: Line 985:
 
| dmp_FragmentLightSource[5].shadowed
 
| dmp_FragmentLightSource[5].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x77
 
| 0x77
Line 724: Line 992:
 
| dmp_FragmentLightSource[6].shadowed
 
| dmp_FragmentLightSource[6].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x78
 
| 0x78
Line 729: Line 999:
 
| dmp_FragmentLightSource[7].shadowed
 
| dmp_FragmentLightSource[7].shadowed
 
| 0x0012C20C
 
| 0x0012C20C
 +
| 0x7C0
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x79
 
| 0x79
Line 734: Line 1,006:
 
| dmp_FragmentLightSource[0].geomFactor0
 
| dmp_FragmentLightSource[0].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x0149 bit2
 
|-  
 
|-  
 
| 0x7A
 
| 0x7A
Line 739: Line 1,013:
 
| dmp_FragmentLightSource[1].geomFactor0
 
| dmp_FragmentLightSource[1].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x0159 bit2
 
|-  
 
|-  
 
| 0x7B
 
| 0x7B
Line 744: Line 1,020:
 
| dmp_FragmentLightSource[2].geomFactor0
 
| dmp_FragmentLightSource[2].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x0169 bit2
 
|-  
 
|-  
 
| 0x7C
 
| 0x7C
Line 749: Line 1,027:
 
| dmp_FragmentLightSource[3].geomFactor0
 
| dmp_FragmentLightSource[3].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x0179 bit2
 
|-  
 
|-  
 
| 0x7D
 
| 0x7D
Line 754: Line 1,034:
 
| dmp_FragmentLightSource[4].geomFactor0
 
| dmp_FragmentLightSource[4].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x0189 bit2
 
|-  
 
|-  
 
| 0x7E
 
| 0x7E
Line 759: Line 1,041:
 
| dmp_FragmentLightSource[5].geomFactor0
 
| dmp_FragmentLightSource[5].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x0199 bit2
 
|-  
 
|-  
 
| 0x7F
 
| 0x7F
Line 764: Line 1,048:
 
| dmp_FragmentLightSource[6].geomFactor0
 
| dmp_FragmentLightSource[6].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x01A9 bit2
 
|-  
 
|-  
 
| 0x80
 
| 0x80
Line 769: Line 1,055:
 
| dmp_FragmentLightSource[7].geomFactor0
 
| dmp_FragmentLightSource[7].geomFactor0
 
| 0x0012C018
 
| 0x0012C018
 +
| 0x7D8
 +
| 0x01B9 bit2
 
|-  
 
|-  
 
| 0x81
 
| 0x81
Line 774: Line 1,062:
 
| dmp_FragmentLightSource[0].geomFactor1
 
| dmp_FragmentLightSource[0].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x0149 bit3
 
|-  
 
|-  
 
| 0x82
 
| 0x82
Line 779: Line 1,069:
 
| dmp_FragmentLightSource[1].geomFactor1
 
| dmp_FragmentLightSource[1].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x0159 bit3
 
|-  
 
|-  
 
| 0x83
 
| 0x83
Line 784: Line 1,076:
 
| dmp_FragmentLightSource[2].geomFactor1
 
| dmp_FragmentLightSource[2].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x0169 bit3
 
|-  
 
|-  
 
| 0x84
 
| 0x84
Line 789: Line 1,083:
 
| dmp_FragmentLightSource[3].geomFactor1
 
| dmp_FragmentLightSource[3].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x0179 bit3
 
|-  
 
|-  
 
| 0x85
 
| 0x85
Line 794: Line 1,090:
 
| dmp_FragmentLightSource[4].geomFactor1
 
| dmp_FragmentLightSource[4].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x0189 bit3
 
|-  
 
|-  
 
| 0x86
 
| 0x86
Line 799: Line 1,097:
 
| dmp_FragmentLightSource[5].geomFactor1
 
| dmp_FragmentLightSource[5].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x0199 bit3
 
|-  
 
|-  
 
| 0x87
 
| 0x87
Line 804: Line 1,104:
 
| dmp_FragmentLightSource[6].geomFactor1
 
| dmp_FragmentLightSource[6].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x01A9 bit3
 
|-  
 
|-  
 
| 0x88
 
| 0x88
Line 809: Line 1,111:
 
| dmp_FragmentLightSource[7].geomFactor1
 
| dmp_FragmentLightSource[7].geomFactor1
 
| 0x0012C114
 
| 0x0012C114
 +
| 0x7D8
 +
| 0x01B9 bit3
 
|-  
 
|-  
 
| 0x89
 
| 0x89
Line 814: Line 1,118:
 
| dmp_FragmentLightSource[0].twoSideDiffuse
 
| dmp_FragmentLightSource[0].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x0149 bit1
 
|-  
 
|-  
 
| 0x8A
 
| 0x8A
Line 819: Line 1,125:
 
| dmp_FragmentLightSource[1].twoSideDiffuse
 
| dmp_FragmentLightSource[1].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x0159 bit1
 
|-  
 
|-  
 
| 0x8B
 
| 0x8B
Line 824: Line 1,132:
 
| dmp_FragmentLightSource[2].twoSideDiffuse
 
| dmp_FragmentLightSource[2].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x0169 bit1
 
|-  
 
|-  
 
| 0x8C
 
| 0x8C
Line 829: Line 1,139:
 
| dmp_FragmentLightSource[3].twoSideDiffuse
 
| dmp_FragmentLightSource[3].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x0179 bit1
 
|-  
 
|-  
 
| 0x8D
 
| 0x8D
Line 834: Line 1,146:
 
| dmp_FragmentLightSource[4].twoSideDiffuse
 
| dmp_FragmentLightSource[4].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x0189 bit1
 
|-  
 
|-  
 
| 0x8E
 
| 0x8E
Line 839: Line 1,153:
 
| dmp_FragmentLightSource[5].twoSideDiffuse
 
| dmp_FragmentLightSource[5].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x0199 bit1
 
|-  
 
|-  
 
| 0x8F
 
| 0x8F
Line 844: Line 1,160:
 
| dmp_FragmentLightSource[6].twoSideDiffuse
 
| dmp_FragmentLightSource[6].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x01A9 bit1
 
|-  
 
|-  
 
| 0x90
 
| 0x90
Line 849: Line 1,167:
 
| dmp_FragmentLightSource[7].twoSideDiffuse
 
| dmp_FragmentLightSource[7].twoSideDiffuse
 
| 0x0012BF10
 
| 0x0012BF10
 +
| 0x7D8
 +
| 0x01B9 bit1
 
|-  
 
|-  
 
| 0x91
 
| 0x91
Line 854: Line 1,174:
 
| dmp_FragmentLightSource[0].samplerSP
 
| dmp_FragmentLightSource[0].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+0*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x92
 
| 0x92
Line 859: Line 1,181:
 
| dmp_FragmentLightSource[1].samplerSP
 
| dmp_FragmentLightSource[1].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+1*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x93
 
| 0x93
Line 864: Line 1,188:
 
| dmp_FragmentLightSource[2].samplerSP
 
| dmp_FragmentLightSource[2].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+2*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x94
 
| 0x94
Line 869: Line 1,195:
 
| dmp_FragmentLightSource[3].samplerSP
 
| dmp_FragmentLightSource[3].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+3*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x95
 
| 0x95
Line 874: Line 1,202:
 
| dmp_FragmentLightSource[4].samplerSP
 
| dmp_FragmentLightSource[4].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+4*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x96
 
| 0x96
Line 879: Line 1,209:
 
| dmp_FragmentLightSource[5].samplerSP
 
| dmp_FragmentLightSource[5].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+5*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x97
 
| 0x97
Line 884: Line 1,216:
 
| dmp_FragmentLightSource[6].samplerSP
 
| dmp_FragmentLightSource[6].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+6*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x98
 
| 0x98
Line 889: Line 1,223:
 
| dmp_FragmentLightSource[7].samplerSP
 
| dmp_FragmentLightSource[7].samplerSP
 
| 0x0012C31C
 
| 0x0012C31C
 +
| 0xA20+7*0x70+0x60
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0x99
 
| 0x99
Line 894: Line 1,230:
 
| dmp_FragmentLightSource[0].spotEnabled
 
| dmp_FragmentLightSource[0].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit3 (1 = disable?)
 
|-  
 
|-  
 
| 0x9A
 
| 0x9A
Line 899: Line 1,237:
 
| dmp_FragmentLightSource[1].spotEnabled
 
| dmp_FragmentLightSource[1].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit4 (1 = disable?)
 
|-  
 
|-  
 
| 0x9B
 
| 0x9B
Line 904: Line 1,244:
 
| dmp_FragmentLightSource[2].spotEnabled
 
| dmp_FragmentLightSource[2].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit5 (1 = disable?)
 
|-  
 
|-  
 
| 0x9C
 
| 0x9C
Line 909: Line 1,251:
 
| dmp_FragmentLightSource[3].spotEnabled
 
| dmp_FragmentLightSource[3].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit6 (1 = disable?)
 
|-  
 
|-  
 
| 0x9D
 
| 0x9D
Line 914: Line 1,258:
 
| dmp_FragmentLightSource[4].spotEnabled
 
| dmp_FragmentLightSource[4].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit7 (1 = disable?)
 
|-  
 
|-  
 
| 0x9E
 
| 0x9E
Line 919: Line 1,265:
 
| dmp_FragmentLightSource[5].spotEnabled
 
| dmp_FragmentLightSource[5].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit8 (1 = disable?)
 
|-  
 
|-  
 
| 0x9F
 
| 0x9F
Line 924: Line 1,272:
 
| dmp_FragmentLightSource[6].spotEnabled
 
| dmp_FragmentLightSource[6].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit9 (1 = disable?)
 
|-  
 
|-  
 
| 0xA0
 
| 0xA0
Line 929: Line 1,279:
 
| dmp_FragmentLightSource[7].spotEnabled
 
| dmp_FragmentLightSource[7].spotEnabled
 
| 0x0012C380
 
| 0x0012C380
 +
| ?
 +
| 0x01C4 bit10 (1 = disable?)
 
|-  
 
|-  
 
| 0xA1
 
| 0xA1
Line 934: Line 1,286:
 
| dmp_FragmentLightSource[0].distanceAttenuationBias
 
| dmp_FragmentLightSource[0].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+0*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA2
 
| 0xA2
Line 939: Line 1,293:
 
| dmp_FragmentLightSource[1].distanceAttenuationBias
 
| dmp_FragmentLightSource[1].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+1*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA3
 
| 0xA3
Line 944: Line 1,300:
 
| dmp_FragmentLightSource[2].distanceAttenuationBias
 
| dmp_FragmentLightSource[2].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+2*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA4
 
| 0xA4
Line 949: Line 1,307:
 
| dmp_FragmentLightSource[3].distanceAttenuationBias
 
| dmp_FragmentLightSource[3].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+3*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA5
 
| 0xA5
Line 954: Line 1,314:
 
| dmp_FragmentLightSource[4].distanceAttenuationBias
 
| dmp_FragmentLightSource[4].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+4*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA6
 
| 0xA6
Line 959: Line 1,321:
 
| dmp_FragmentLightSource[5].distanceAttenuationBias
 
| dmp_FragmentLightSource[5].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+5*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA7
 
| 0xA7
Line 964: Line 1,328:
 
| dmp_FragmentLightSource[6].distanceAttenuationBias
 
| dmp_FragmentLightSource[6].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+6*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA8
 
| 0xA8
Line 969: Line 1,335:
 
| dmp_FragmentLightSource[7].distanceAttenuationBias
 
| dmp_FragmentLightSource[7].distanceAttenuationBias
 
| 0x00158AE8
 
| 0x00158AE8
 +
| 0xA20+7*0x70+0x64
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xA9
 
| 0xA9
Line 974: Line 1,342:
 
| dmp_FragmentLightSource[0].distanceAttenuationScale
 
| dmp_FragmentLightSource[0].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+0*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xAA
 
| 0xAA
Line 979: Line 1,349:
 
| dmp_FragmentLightSource[1].distanceAttenuationScale
 
| dmp_FragmentLightSource[1].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+1*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xAB
 
| 0xAB
Line 984: Line 1,356:
 
| dmp_FragmentLightSource[2].distanceAttenuationScale
 
| dmp_FragmentLightSource[2].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+2*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xAC
 
| 0xAC
Line 989: Line 1,363:
 
| dmp_FragmentLightSource[3].distanceAttenuationScale
 
| dmp_FragmentLightSource[3].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+3*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xAD
 
| 0xAD
Line 994: Line 1,370:
 
| dmp_FragmentLightSource[4].distanceAttenuationScale
 
| dmp_FragmentLightSource[4].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+4*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xAE
 
| 0xAE
Line 999: Line 1,377:
 
| dmp_FragmentLightSource[5].distanceAttenuationScale
 
| dmp_FragmentLightSource[5].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+5*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xAF
 
| 0xAF
Line 1,004: Line 1,384:
 
| dmp_FragmentLightSource[6].distanceAttenuationScale
 
| dmp_FragmentLightSource[6].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+6*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB0
 
| 0xB0
Line 1,009: Line 1,391:
 
| dmp_FragmentLightSource[7].distanceAttenuationScale
 
| dmp_FragmentLightSource[7].distanceAttenuationScale
 
| 0x00158C44
 
| 0x00158C44
 +
| 0xA20+7*0x70+0x68
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB1
 
| 0xB1
Line 1,014: Line 1,398:
 
| dmp_FragmentLightSource[0].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[0].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB2
 
| 0xB2
Line 1,019: Line 1,405:
 
| dmp_FragmentLightSource[1].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[1].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB3
 
| 0xB3
Line 1,024: Line 1,412:
 
| dmp_FragmentLightSource[2].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[2].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB4
 
| 0xB4
Line 1,029: Line 1,419:
 
| dmp_FragmentLightSource[3].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[3].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB5
 
| 0xB5
Line 1,034: Line 1,426:
 
| dmp_FragmentLightSource[4].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[4].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB6
 
| 0xB6
Line 1,039: Line 1,433:
 
| dmp_FragmentLightSource[5].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[5].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB7
 
| 0xB7
Line 1,044: Line 1,440:
 
| dmp_FragmentLightSource[6].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[6].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB8
 
| 0xB8
Line 1,049: Line 1,447:
 
| dmp_FragmentLightSource[7].distanceAttenuationEnabled
 
| dmp_FragmentLightSource[7].distanceAttenuationEnabled
 
| 0x0012C4A0
 
| 0x0012C4A0
 +
| ?
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xB9
 
| 0xB9
Line 1,054: Line 1,454:
 
| dmp_FragmentLightSource[0].samplerDA
 
| dmp_FragmentLightSource[0].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+0*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xBA
 
| 0xBA
Line 1,059: Line 1,461:
 
| dmp_FragmentLightSource[1].samplerDA
 
| dmp_FragmentLightSource[1].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+1*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xBB
 
| 0xBB
Line 1,064: Line 1,468:
 
| dmp_FragmentLightSource[2].samplerDA
 
| dmp_FragmentLightSource[2].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+2*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xBC
 
| 0xBC
Line 1,069: Line 1,475:
 
| dmp_FragmentLightSource[3].samplerDA
 
| dmp_FragmentLightSource[3].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+3*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xBD
 
| 0xBD
Line 1,074: Line 1,482:
 
| dmp_FragmentLightSource[4].samplerDA
 
| dmp_FragmentLightSource[4].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+4*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xBE
 
| 0xBE
Line 1,079: Line 1,489:
 
| dmp_FragmentLightSource[5].samplerDA
 
| dmp_FragmentLightSource[5].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+5*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xBF
 
| 0xBF
Line 1,084: Line 1,496:
 
| dmp_FragmentLightSource[6].samplerDA
 
| dmp_FragmentLightSource[6].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+6*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xC0
 
| 0xC0
Line 1,089: Line 1,503:
 
| dmp_FragmentLightSource[7].samplerDA
 
| dmp_FragmentLightSource[7].samplerDA
 
| 0x0012C578
 
| 0x0012C578
 +
| 0xA20+7*0x70+0x6C
 +
| 0x01C8 ?
 
|-  
 
|-  
 
| 0xC1
 
| 0xC1
Line 1,094: Line 1,510:
 
| dmp_LightEnv.absLutInputD0
 
| dmp_LightEnv.absLutInputD0
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit12 (1 = disable?)
 
|-  
 
|-  
 
| 0xC2
 
| 0xC2
Line 1,099: Line 1,517:
 
| dmp_LightEnv.absLutInputD1
 
| dmp_LightEnv.absLutInputD1
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit13 (1 = disable?)
 
|-  
 
|-  
 
| 0xC3
 
| 0xC3
Line 1,104: Line 1,524:
 
| dmp_LightEnv.absLutInputSP
 
| dmp_LightEnv.absLutInputSP
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit14 (1 = disable?)
 
|-  
 
|-  
 
| 0xC4
 
| 0xC4
Line 1,109: Line 1,531:
 
| dmp_LightEnv.absLutInputFR
 
| dmp_LightEnv.absLutInputFR
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit15 (1 = disable?)
 
|-  
 
|-  
 
| 0xC5
 
| 0xC5
Line 1,114: Line 1,538:
 
| dmp_LightEnv.absLutInputRB
 
| dmp_LightEnv.absLutInputRB
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit16 (1 = disable?)
 
|-  
 
|-  
 
| 0xC6
 
| 0xC6
Line 1,119: Line 1,545:
 
| dmp_LightEnv.absLutInputRG
 
| dmp_LightEnv.absLutInputRG
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit17 (1 = disable?)
 
|-  
 
|-  
 
| 0xC7
 
| 0xC7
Line 1,124: Line 1,552:
 
| dmp_LightEnv.absLutInputRR
 
| dmp_LightEnv.absLutInputRR
 
| 0x0012C5D8
 
| 0x0012C5D8
 +
| ?
 +
| 0x01D0 bit18 (1 = disable?)
 
|-  
 
|-  
 
| 0xC8
 
| 0xC8
Line 1,129: Line 1,559:
 
| dmp_LightEnv.lutInputD0
 
| dmp_LightEnv.lutInputD0
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit0-2
 
|-  
 
|-  
 
| 0xC9
 
| 0xC9
Line 1,134: Line 1,566:
 
| dmp_LightEnv.lutInputD1
 
| dmp_LightEnv.lutInputD1
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit4-6
 
|-  
 
|-  
 
| 0xCA
 
| 0xCA
Line 1,139: Line 1,573:
 
| dmp_LightEnv.lutInputSP
 
| dmp_LightEnv.lutInputSP
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit8-10
 
|-  
 
|-  
 
| 0xCB
 
| 0xCB
Line 1,144: Line 1,580:
 
| dmp_LightEnv.lutInputFR
 
| dmp_LightEnv.lutInputFR
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit12-14
 
|-  
 
|-  
 
| 0xCC
 
| 0xCC
Line 1,149: Line 1,587:
 
| dmp_LightEnv.lutInputRB
 
| dmp_LightEnv.lutInputRB
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit16-18
 
|-  
 
|-  
 
| 0xCD
 
| 0xCD
Line 1,154: Line 1,594:
 
| dmp_LightEnv.lutInputRG
 
| dmp_LightEnv.lutInputRG
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit20-22
 
|-  
 
|-  
 
| 0xCE
 
| 0xCE
Line 1,159: Line 1,601:
 
| dmp_LightEnv.lutInputRR
 
| dmp_LightEnv.lutInputRR
 
| 0x0012C6E8
 
| 0x0012C6E8
 +
| ?
 +
| 0x01D1 bit24-26
 
|-  
 
|-  
 
| 0xCF
 
| 0xCF
Line 1,164: Line 1,608:
 
| dmp_LightEnv.lutScaleD0
 
| dmp_LightEnv.lutScaleD0
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
| 0x01D2 bit0-3
 
|-  
 
|-  
 
| 0xD0
 
| 0xD0
Line 1,169: Line 1,615:
 
| dmp_LightEnv.lutScaleD1
 
| dmp_LightEnv.lutScaleD1
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
| 0x01D2 bit4-7
 
|-  
 
|-  
 
| 0xD1
 
| 0xD1
Line 1,174: Line 1,622:
 
| dmp_LightEnv.lutScaleSP
 
| dmp_LightEnv.lutScaleSP
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
| 0x01D2 bit8-11
 
|-  
 
|-  
 
| 0xD2
 
| 0xD2
Line 1,179: Line 1,629:
 
| dmp_LightEnv.lutScaleFR
 
| dmp_LightEnv.lutScaleFR
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
| 0x01D2 bit12-15
 
|-  
 
|-  
 
| 0xD3
 
| 0xD3
Line 1,184: Line 1,636:
 
| dmp_LightEnv.lutScaleRB
 
| dmp_LightEnv.lutScaleRB
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
|0x01D2 bit16-19
 
|-  
 
|-  
 
| 0xD4
 
| 0xD4
Line 1,189: Line 1,643:
 
| dmp_LightEnv.lutScaleRG
 
| dmp_LightEnv.lutScaleRG
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
| 0x01D2 bit20-23
 
|-  
 
|-  
 
| 0xD5
 
| 0xD5
Line 1,194: Line 1,650:
 
| dmp_LightEnv.lutScaleRR
 
| dmp_LightEnv.lutScaleRR
 
| 0x00155404
 
| 0x00155404
 +
| ?
 +
| 0x01D2 bit24-27
 
|-  
 
|-  
 
| 0xD6
 
| 0xD6
Line 1,199: Line 1,657:
 
| dmp_FragmentMaterial.samplerD0
 
| dmp_FragmentMaterial.samplerD0
 
| 0x0012C7D0
 
| 0x0012C7D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xD7
 
| 0xD7
Line 1,204: Line 1,664:
 
| dmp_FragmentMaterial.samplerD1
 
| dmp_FragmentMaterial.samplerD1
 
| 0x0012C7D0
 
| 0x0012C7D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xD8
 
| 0xD8
Line 1,209: Line 1,671:
 
| dmp_FragmentMaterial.samplerFR
 
| dmp_FragmentMaterial.samplerFR
 
| 0x0012C7D0
 
| 0x0012C7D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xD9
 
| 0xD9
Line 1,214: Line 1,678:
 
| dmp_FragmentMaterial.samplerRB
 
| dmp_FragmentMaterial.samplerRB
 
| 0x0012C7D0
 
| 0x0012C7D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xDA
 
| 0xDA
Line 1,219: Line 1,685:
 
| dmp_FragmentMaterial.samplerRG
 
| dmp_FragmentMaterial.samplerRG
 
| 0x0012C7D0
 
| 0x0012C7D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xDB
 
| 0xDB
Line 1,224: Line 1,692:
 
| dmp_FragmentMaterial.samplerRR
 
| dmp_FragmentMaterial.samplerRR
 
| 0x0012C7D0
 
| 0x0012C7D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xDC
 
| 0xDC
Line 1,229: Line 1,699:
 
| dmp_LightEnv.shadowSelector
 
| dmp_LightEnv.shadowSelector
 
| 0x0012CE44
 
| 0x0012CE44
 +
| ?
 +
| 0x01C3 bit24-25
 
|-  
 
|-  
 
| 0xDD
 
| 0xDD
Line 1,234: Line 1,706:
 
| dmp_LightEnv.bumpSelector
 
| dmp_LightEnv.bumpSelector
 
| 0x0012CD88
 
| 0x0012CD88
 +
| ?
 +
| 0x01C3 bit22-23
 
|-  
 
|-  
 
| 0xDE
 
| 0xDE
Line 1,239: Line 1,713:
 
| dmp_LightEnv.bumpMode
 
| dmp_LightEnv.bumpMode
 
| 0x0012D4B4
 
| 0x0012D4B4
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xDF
 
| 0xDF
Line 1,244: Line 1,720:
 
| dmp_LightEnv.bumpRenorm
 
| dmp_LightEnv.bumpRenorm
 
| 0x0012D8A0
 
| 0x0012D8A0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE0
 
| 0xE0
Line 1,249: Line 1,727:
 
| dmp_LightEnv.config
 
| dmp_LightEnv.config
 
| 0x0012D5E4
 
| 0x0012D5E4
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE1
 
| 0xE1
Line 1,254: Line 1,734:
 
| dmp_LightEnv.invertShadow
 
| dmp_LightEnv.invertShadow
 
| 0x0012CF04
 
| 0x0012CF04
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE2
 
| 0xE2
Line 1,259: Line 1,741:
 
| dmp_LightEnv.shadowPrimary
 
| dmp_LightEnv.shadowPrimary
 
| 0x0012CFD4
 
| 0x0012CFD4
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE3
 
| 0xE3
Line 1,264: Line 1,748:
 
| dmp_LightEnv.shadowSecondary
 
| dmp_LightEnv.shadowSecondary
 
| 0x0012D1B8
 
| 0x0012D1B8
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE4
 
| 0xE4
Line 1,269: Line 1,755:
 
| dmp_LightEnv.shadowAlpha
 
| dmp_LightEnv.shadowAlpha
 
| 0x0012D350
 
| 0x0012D350
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE5
 
| 0xE5
Line 1,274: Line 1,762:
 
| dmp_LightEnv.fresnelSelector
 
| dmp_LightEnv.fresnelSelector
 
| 0x0012D720
 
| 0x0012D720
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE6
 
| 0xE6
Line 1,279: Line 1,769:
 
| dmp_LightEnv.clampHighlights
 
| dmp_LightEnv.clampHighlights
 
| 0x0012D9B0
 
| 0x0012D9B0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE7
 
| 0xE7
Line 1,284: Line 1,776:
 
| dmp_LightEnv.lutEnabledD0
 
| dmp_LightEnv.lutEnabledD0
 
| 0x0012DA80
 
| 0x0012DA80
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE8
 
| 0xE8
Line 1,289: Line 1,783:
 
| dmp_LightEnv.lutEnabledD1
 
| dmp_LightEnv.lutEnabledD1
 
| 0x0012DB58
 
| 0x0012DB58
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xE9
 
| 0xE9
Line 1,294: Line 1,790:
 
| dmp_LightEnv.lutEnabledRefl
 
| dmp_LightEnv.lutEnabledRefl
 
| 0x0012C83C
 
| 0x0012C83C
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0xEA
 
| 0xEA
Line 1,299: Line 1,797:
 
| dmp_TexEnv[0].combineRgb
 
| dmp_TexEnv[0].combineRgb
 
| 0x0012DC2C
 
| 0x0012DC2C
 +
| ?
 +
| 0xC2
 
|-  
 
|-  
 
| 0xEB
 
| 0xEB
Line 1,304: Line 1,804:
 
| dmp_TexEnv[1].combineRgb
 
| dmp_TexEnv[1].combineRgb
 
| 0x0012DC2C
 
| 0x0012DC2C
 +
| ?
 +
| 0xCA
 
|-  
 
|-  
 
| 0xEC
 
| 0xEC
Line 1,309: Line 1,811:
 
| dmp_TexEnv[2].combineRgb
 
| dmp_TexEnv[2].combineRgb
 
| 0x0012DC2C
 
| 0x0012DC2C
 +
| ?
 +
| 0xD2
 
|-  
 
|-  
 
| 0xED
 
| 0xED
Line 1,314: Line 1,818:
 
| dmp_TexEnv[3].combineRgb
 
| dmp_TexEnv[3].combineRgb
 
| 0x0012DC2C
 
| 0x0012DC2C
 +
| ?
 +
| 0xDA
 
|-  
 
|-  
 
| 0xEE
 
| 0xEE
Line 1,319: Line 1,825:
 
| dmp_TexEnv[4].combineRgb
 
| dmp_TexEnv[4].combineRgb
 
| 0x0012DC2C
 
| 0x0012DC2C
 +
| ?
 +
| 0xF2
 
|-  
 
|-  
 
| 0xEF
 
| 0xEF
Line 1,324: Line 1,832:
 
| dmp_TexEnv[5].combineRgb
 
| dmp_TexEnv[5].combineRgb
 
| 0x0012DC2C
 
| 0x0012DC2C
 +
| ?
 +
| 0xFA
 
|-  
 
|-  
 
| 0xF0
 
| 0xF0
Line 1,329: Line 1,839:
 
| dmp_TexEnv[0].combineAlpha
 
| dmp_TexEnv[0].combineAlpha
 
| 0x0012DD9C
 
| 0x0012DD9C
 +
| ?
 +
| 0xC2
 
|-  
 
|-  
 
| 0xF1
 
| 0xF1
Line 1,334: Line 1,846:
 
| dmp_TexEnv[1].combineAlpha
 
| dmp_TexEnv[1].combineAlpha
 
| 0x0012DD9C
 
| 0x0012DD9C
 +
| ?
 +
| 0xCA
 
|-  
 
|-  
 
| 0xF2
 
| 0xF2
Line 1,339: Line 1,853:
 
| dmp_TexEnv[2].combineAlpha
 
| dmp_TexEnv[2].combineAlpha
 
| 0x0012DD9C
 
| 0x0012DD9C
 +
| ?
 +
| 0xD2
 
|-  
 
|-  
 
| 0xF3
 
| 0xF3
Line 1,344: Line 1,860:
 
| dmp_TexEnv[3].combineAlpha
 
| dmp_TexEnv[3].combineAlpha
 
| 0x0012DD9C
 
| 0x0012DD9C
 +
| ?
 +
| 0xDA
 
|-  
 
|-  
 
| 0xF4
 
| 0xF4
Line 1,349: Line 1,867:
 
| dmp_TexEnv[4].combineAlpha
 
| dmp_TexEnv[4].combineAlpha
 
| 0x0012DD9C
 
| 0x0012DD9C
 +
| ?
 +
| 0xF2
 
|-  
 
|-  
 
| 0xF5
 
| 0xF5
Line 1,354: Line 1,874:
 
| dmp_TexEnv[5].combineAlpha
 
| dmp_TexEnv[5].combineAlpha
 
| 0x0012DD9C
 
| 0x0012DD9C
 +
| ?
 +
| 0xFA
 
|-  
 
|-  
 
| 0xF6
 
| 0xF6
Line 1,359: Line 1,881:
 
| dmp_TexEnv[0].srcRgb
 
| dmp_TexEnv[0].srcRgb
 
| 0x0012DF08
 
| 0x0012DF08
 +
| ?
 +
| 0xC0
 
|-  
 
|-  
 
| 0xF7
 
| 0xF7
Line 1,364: Line 1,888:
 
| dmp_TexEnv[1].srcRgb
 
| dmp_TexEnv[1].srcRgb
 
| 0x0012DF08
 
| 0x0012DF08
 +
| ?
 +
| 0xC8
 
|-  
 
|-  
 
| 0xF8
 
| 0xF8
Line 1,369: Line 1,895:
 
| dmp_TexEnv[2].srcRgb
 
| dmp_TexEnv[2].srcRgb
 
| 0x0012DF08
 
| 0x0012DF08
 +
| ?
 +
| 0xD0
 
|-  
 
|-  
 
| 0xF9
 
| 0xF9
Line 1,374: Line 1,902:
 
| dmp_TexEnv[3].srcRgb
 
| dmp_TexEnv[3].srcRgb
 
| 0x0012DF08
 
| 0x0012DF08
 +
| ?
 +
| 0xD8
 
|-  
 
|-  
 
| 0xFA
 
| 0xFA
Line 1,379: Line 1,909:
 
| dmp_TexEnv[4].srcRgb
 
| dmp_TexEnv[4].srcRgb
 
| 0x0012DF08
 
| 0x0012DF08
 +
| ?
 +
| 0xF0
 
|-  
 
|-  
 
| 0xFB
 
| 0xFB
Line 1,384: Line 1,916:
 
| dmp_TexEnv[5].srcRgb
 
| dmp_TexEnv[5].srcRgb
 
| 0x0012DF08
 
| 0x0012DF08
 +
| ?
 +
| 0xF8
 
|-  
 
|-  
 
| 0xFC
 
| 0xFC
Line 1,389: Line 1,923:
 
| dmp_TexEnv[0].srcAlpha
 
| dmp_TexEnv[0].srcAlpha
 
| 0x0012E0FC
 
| 0x0012E0FC
 +
| ?
 +
| 0xC0
 
|-  
 
|-  
 
| 0xFD
 
| 0xFD
Line 1,394: Line 1,930:
 
| dmp_TexEnv[1].srcAlpha
 
| dmp_TexEnv[1].srcAlpha
 
| 0x0012E0FC
 
| 0x0012E0FC
 +
| ?
 +
| 0xC8
 
|-  
 
|-  
 
| 0xFE
 
| 0xFE
Line 1,399: Line 1,937:
 
| dmp_TexEnv[2].srcAlpha
 
| dmp_TexEnv[2].srcAlpha
 
| 0x0012E0FC
 
| 0x0012E0FC
 +
| ?
 +
| 0xD0
 
|-  
 
|-  
 
| 0xFF
 
| 0xFF
Line 1,404: Line 1,944:
 
| dmp_TexEnv[3].srcAlpha
 
| dmp_TexEnv[3].srcAlpha
 
| 0x0012E0FC
 
| 0x0012E0FC
 +
| ?
 +
| 0xD8
 
|-  
 
|-  
 
| 0x100
 
| 0x100
Line 1,409: Line 1,951:
 
| dmp_TexEnv[4].srcAlpha
 
| dmp_TexEnv[4].srcAlpha
 
| 0x0012E0FC
 
| 0x0012E0FC
 +
| ?
 +
| 0xF0
 
|-  
 
|-  
 
| 0x101
 
| 0x101
Line 1,414: Line 1,958:
 
| dmp_TexEnv[5].srcAlpha
 
| dmp_TexEnv[5].srcAlpha
 
| 0x0012E0FC
 
| 0x0012E0FC
 +
| ?
 +
| 0xF8
 
|-  
 
|-  
 
| 0x102
 
| 0x102
Line 1,419: Line 1,965:
 
| dmp_TexEnv[0].operandRgb
 
| dmp_TexEnv[0].operandRgb
 
| 0x0012E2F0
 
| 0x0012E2F0
 +
| ?
 +
| 0xC1
 
|-  
 
|-  
 
| 0x103
 
| 0x103
Line 1,424: Line 1,972:
 
| dmp_TexEnv[1].operandRgb
 
| dmp_TexEnv[1].operandRgb
 
| 0x0012E2F0
 
| 0x0012E2F0
 +
| ?
 +
| 0xC9
 
|-  
 
|-  
 
| 0x104
 
| 0x104
Line 1,429: Line 1,979:
 
| dmp_TexEnv[2].operandRgb
 
| dmp_TexEnv[2].operandRgb
 
| 0x0012E2F0
 
| 0x0012E2F0
 +
| ?
 +
| 0xD1
 
|-  
 
|-  
 
| 0x105
 
| 0x105
Line 1,434: Line 1,986:
 
| dmp_TexEnv[3].operandRgb
 
| dmp_TexEnv[3].operandRgb
 
| 0x0012E2F0
 
| 0x0012E2F0
 +
| ?
 +
| 0xD9
 
|-  
 
|-  
 
| 0x106
 
| 0x106
Line 1,439: Line 1,993:
 
| dmp_TexEnv[4].operandRgb
 
| dmp_TexEnv[4].operandRgb
 
| 0x0012E2F0
 
| 0x0012E2F0
 +
| ?
 +
| 0xF1
 
|-  
 
|-  
 
| 0x107
 
| 0x107
Line 1,444: Line 2,000:
 
| dmp_TexEnv[5].operandRgb
 
| dmp_TexEnv[5].operandRgb
 
| 0x0012E2F0
 
| 0x0012E2F0
 +
| ?
 +
| 0xF9
 
|-  
 
|-  
 
| 0x108
 
| 0x108
Line 1,449: Line 2,007:
 
| dmp_TexEnv[0].operandAlpha
 
| dmp_TexEnv[0].operandAlpha
 
| 0x0012E51C
 
| 0x0012E51C
 +
| ?
 +
| 0xC1
 
|-  
 
|-  
 
| 0x109
 
| 0x109
Line 1,454: Line 2,014:
 
| dmp_TexEnv[1].operandAlpha
 
| dmp_TexEnv[1].operandAlpha
 
| 0x0012E51C
 
| 0x0012E51C
 +
| ?
 +
| 0xC9
 
|-  
 
|-  
 
| 0x10A
 
| 0x10A
Line 1,459: Line 2,021:
 
| dmp_TexEnv[2].operandAlpha
 
| dmp_TexEnv[2].operandAlpha
 
| 0x0012E51C
 
| 0x0012E51C
 +
| ?
 +
| 0xD1
 
|-  
 
|-  
 
| 0x10B
 
| 0x10B
Line 1,464: Line 2,028:
 
| dmp_TexEnv[3].operandAlpha
 
| dmp_TexEnv[3].operandAlpha
 
| 0x0012E51C
 
| 0x0012E51C
 +
| ?
 +
| 0xD9
 
|-  
 
|-  
 
| 0x10C
 
| 0x10C
Line 1,469: Line 2,035:
 
| dmp_TexEnv[4].operandAlpha
 
| dmp_TexEnv[4].operandAlpha
 
| 0x0012E51C
 
| 0x0012E51C
 +
| ?
 +
| 0xF1
 
|-  
 
|-  
 
| 0x10D
 
| 0x10D
Line 1,474: Line 2,042:
 
| dmp_TexEnv[5].operandAlpha
 
| dmp_TexEnv[5].operandAlpha
 
| 0x0012E51C
 
| 0x0012E51C
 +
| ?
 +
| 0xF9
 
|-  
 
|-  
 
| 0x10E
 
| 0x10E
Line 1,479: Line 2,049:
 
| dmp_TexEnv[0].scaleRgb
 
| dmp_TexEnv[0].scaleRgb
 
| 0x00155464
 
| 0x00155464
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x10F
 
| 0x10F
Line 1,484: Line 2,056:
 
| dmp_TexEnv[1].scaleRgb
 
| dmp_TexEnv[1].scaleRgb
 
| 0x00155464
 
| 0x00155464
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x110
 
| 0x110
Line 1,489: Line 2,063:
 
| dmp_TexEnv[2].scaleRgb
 
| dmp_TexEnv[2].scaleRgb
 
| 0x00155464
 
| 0x00155464
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x111
 
| 0x111
Line 1,494: Line 2,070:
 
| dmp_TexEnv[3].scaleRgb
 
| dmp_TexEnv[3].scaleRgb
 
| 0x00155464
 
| 0x00155464
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x112
 
| 0x112
Line 1,499: Line 2,077:
 
| dmp_TexEnv[4].scaleRgb
 
| dmp_TexEnv[4].scaleRgb
 
| 0x00155464
 
| 0x00155464
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x113
 
| 0x113
Line 1,504: Line 2,084:
 
| dmp_TexEnv[5].scaleRgb
 
| dmp_TexEnv[5].scaleRgb
 
| 0x00155464
 
| 0x00155464
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x114
 
| 0x114
Line 1,509: Line 2,091:
 
| dmp_TexEnv[0].scaleAlpha
 
| dmp_TexEnv[0].scaleAlpha
 
| 0x00158EDC
 
| 0x00158EDC
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x115
 
| 0x115
Line 1,514: Line 2,098:
 
| dmp_TexEnv[1].scaleAlpha
 
| dmp_TexEnv[1].scaleAlpha
 
| 0x00158EDC
 
| 0x00158EDC
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x116
 
| 0x116
Line 1,519: Line 2,105:
 
| dmp_TexEnv[2].scaleAlpha
 
| dmp_TexEnv[2].scaleAlpha
 
| 0x00158EDC
 
| 0x00158EDC
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x117
 
| 0x117
Line 1,524: Line 2,112:
 
| dmp_TexEnv[3].scaleAlpha
 
| dmp_TexEnv[3].scaleAlpha
 
| 0x00158EDC
 
| 0x00158EDC
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x118
 
| 0x118
Line 1,529: Line 2,119:
 
| dmp_TexEnv[4].scaleAlpha
 
| dmp_TexEnv[4].scaleAlpha
 
| 0x00158EDC
 
| 0x00158EDC
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x119
 
| 0x119
Line 1,534: Line 2,126:
 
| dmp_TexEnv[5].scaleAlpha
 
| dmp_TexEnv[5].scaleAlpha
 
| 0x00158EDC
 
| 0x00158EDC
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x11A
 
| 0x11A
Line 1,539: Line 2,133:
 
| dmp_TexEnv[0].constRgba
 
| dmp_TexEnv[0].constRgba
 
| 0x00158FF4
 
| 0x00158FF4
 +
| ?
 +
| 0xC3
 
|-  
 
|-  
 
| 0x11B
 
| 0x11B
Line 1,544: Line 2,140:
 
| dmp_TexEnv[1].constRgba
 
| dmp_TexEnv[1].constRgba
 
| 0x00158FF4
 
| 0x00158FF4
 +
| ?
 +
| 0xCB
 
|-  
 
|-  
 
| 0x11C
 
| 0x11C
Line 1,549: Line 2,147:
 
| dmp_TexEnv[2].constRgba
 
| dmp_TexEnv[2].constRgba
 
| 0x00158FF4
 
| 0x00158FF4
 +
| ?
 +
| 0xD3
 
|-  
 
|-  
 
| 0x11D
 
| 0x11D
Line 1,554: Line 2,154:
 
| dmp_TexEnv[3].constRgba
 
| dmp_TexEnv[3].constRgba
 
| 0x00158FF4
 
| 0x00158FF4
 +
| ?
 +
| 0xDB
 
|-  
 
|-  
 
| 0x11E
 
| 0x11E
Line 1,559: Line 2,161:
 
| dmp_TexEnv[4].constRgba
 
| dmp_TexEnv[4].constRgba
 
| 0x00158FF4
 
| 0x00158FF4
 +
| ?
 +
| 0xF3
 
|-  
 
|-  
 
| 0x11F
 
| 0x11F
Line 1,564: Line 2,168:
 
| dmp_TexEnv[5].constRgba
 
| dmp_TexEnv[5].constRgba
 
| 0x00158FF4
 
| 0x00158FF4
 +
| ?
 +
| 0xFB
 
|-  
 
|-  
 
| 0x120
 
| 0x120
Line 1,569: Line 2,175:
 
| dmp_TexEnv[0].bufferColor
 
| dmp_TexEnv[0].bufferColor
 
| 0x001591C0
 
| 0x001591C0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x121
 
| 0x121
Line 1,574: Line 2,182:
 
| dmp_TexEnv[1].bufferInput
 
| dmp_TexEnv[1].bufferInput
 
| 0x0012E6D0
 
| 0x0012E6D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x122
 
| 0x122
Line 1,579: Line 2,189:
 
| dmp_TexEnv[2].bufferInput
 
| dmp_TexEnv[2].bufferInput
 
| 0x0012E6D0
 
| 0x0012E6D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x123
 
| 0x123
Line 1,584: Line 2,196:
 
| dmp_TexEnv[3].bufferInput
 
| dmp_TexEnv[3].bufferInput
 
| 0x0012E6D0
 
| 0x0012E6D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x124
 
| 0x124
Line 1,589: Line 2,203:
 
| dmp_TexEnv[4].bufferInput
 
| dmp_TexEnv[4].bufferInput
 
| 0x0012E6D0
 
| 0x0012E6D0
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x125
 
| 0x125
Line 1,594: Line 2,210:
 
| dmp_Fog.mode
 
| dmp_Fog.mode
 
| 0x0012E7F8
 
| 0x0012E7F8
 +
| ?
 +
| 0x00E0 bit0-2 (5 -> fog (0x0B60), 7 -> gas (0x6050))
 
|-  
 
|-  
 
| 0x126
 
| 0x126
Line 1,599: Line 2,217:
 
| dmp_Fog.color
 
| dmp_Fog.color
 
| 0x00159338
 
| 0x00159338
 +
| ?
 +
| ?
 
|-  
 
|-  
 
| 0x127
 
| 0x127
Line 1,604: Line 2,224:
 
| dmp_Fog.zFlip
 
| dmp_Fog.zFlip
 
| 0x0012E9DC
 
| 0x0012E9DC
 +
| ?
 +
| 0x00E0 bit16
 
|-  
 
|-  
 
| 0x128
 
| 0x128
Line 1,609: Line 2,231:
 
| dmp_Fog.sampler
 
| dmp_Fog.sampler
 
| 0x0012EAA4
 
| 0x0012EAA4
 +
| ?
 +
| ?
 +
|}
 +
 +
On steeldiver's uniform handlers : R1 is a pointer to the current shader program object, R12 is a pointer to the data the uniform is being set to.
 +
 +
== Other Symbols ==
 +
 +
The list above is not exhaustive. A number of other strings specific to Nintendo's rendering framework have been found. Below is a table listing those strings including the location they were found in.
 +
 +
{| class="wikitable" border="1"
 +
! Name
 +
!  Context
 +
!  Occurrence
 +
|-
 +
| dmp_Point.viewport.xy
 +
| Name of a shader uniform
 +
| CTRAging's romfs:/gpu/GasCessna/shader.shbin
 +
|-
 +
| dmp_Point.distanceAttenuation
 +
| Name of a shader uniform
 +
| CTRAging's romfs:/gpu/GasCessna/shader.shbin
 +
|-
 +
| dmp_Point.Position
 +
| Name of a shader uniform
 +
| CTRAging's romfs:/gpu/GasCessna/shader.shbin
 +
|-
 +
| dmp_Point.PointSize
 +
| Name of a shader uniform
 +
| CTRAging's romfs:/gpu/GasCessna/shader.shbin
 
|}
 
|}

Latest revision as of 19:38, 25 August 2015

This page's goal is to describe parts of Nintendo's OpenGL implementation for the 3DS as we reverse engineer it to better understand how to use the PICA200. Some of the information on this page is specific to Steeldiver : Sub Wars. The reason for this is that it's a fairly graphics-heavy game that's available on the eShop for free, so it seems like a good target for a community REing effort.

Description[edit]

The PICA200 is an OpenGL ES 1.1 compliant GPU manufactured by DMP. It comes loaded with a number of extensions that make it similar to an OpenGL ES 2.0 compliant GPU (ability to run programmable vertex/geometry shaders, for instance). Because of this, Nintendo wrapped GPU access into an OpenGL ES 2.0 implementation with some limitations. As the fragment stage of the pipeline is non-programmable, Nintendo instead gives developers the ability to configure a number of fragment-related values through glGetUniformLocation and glUniformXX. See below for the full list.

Shader program structure[edit]

When uniform values are set (in shm_uniformfv/shm_uniformiv), they are attached to the current shader program and stored into the corresponding shader program structure. They are later written to the GPU command buffer in __shv_validateShaderValidator or equivalent.

Shader program struct :

Offset Size Description
0x000 0x04 Value 0x0 ?
0x004 0x04 Program ID
0x008 0x04 Value -1 ?
0x01C 0x04 Pointer to program-specific uniform table
0x020 0x04 Total number of uniforms for program
0x028 0x04 Number of program-specific uniforms
0x414 0x04 Pointer to vertex shader struct
0x64C 0x04 Value for GPU register 0x0104
0x7C0 0x04 Bitfield containing dmp_FragmentLightSource[n].shadowed values
0x7D8 0x04 Bitfield containing dmp_FragmentLightSource[n].geomFactor0 / dmp_FragmentLightSource[n].geomFactor1 / dmp_FragmentLightSource[n].twoSideDiffuse values
0xA20 0x70*8 Table of structs for 8 dmp_FragmentLightSource

dmp_FragmentLightSource struct:

Offset Size Description
0x00 0x01 dmp_FragmentLightSource[k].enabled
0x04 0x10 dmp_FragmentLightSource[k].ambient (float[4])
0x14 0x10 dmp_FragmentLightSource[k].diffuse (float[4])
0x24 0x10 dmp_FragmentLightSource[k].specular0 (float[4])
0x34 0x10 dmp_FragmentLightSource[k].specular1 (float[4])
0x44 0x10 dmp_FragmentLightSource[k].position (float[4])
0x54 0x10 dmp_FragmentLightSource[k].spotDirection (float[3])
0x60 0x04 dmp_FragmentLightSource[k].samplerSP (u32)
0x64 0x04 dmp_FragmentLightSource[k].distanceAttenuationBias (float)
0x68 0x04 dmp_FragmentLightSource[k].distanceAttenuationScale (float)

vertex/geometry shader struct:

Offset Size Description
0x0 0x4 Pointer to shader code data
0x4 0x4 Size of shader code (in words)
0x8 0x4 Pointer to shader opdesc data
0xC 0x4 Size of shader opdescs (in words)

Proposed REing methodology[edit]

1. Choose a "uniform" you want to RE below

2. Take note of its ID and type !

3. Depending on whether its a float or not, go through the gigantic switches in shm_uniformfv or shm_uniformiv (non-float) based on the ID of your uniform (in the case of steeldiver: sub wars you can now just go directly to the handler as it's listed in the table below)

4. Once you find the piece of code specific to your uniform, take note of how the values passed to shm_uniformfv/shm_uniformiv are written to the shader object

5. Go through __shv_validateShaderValidator looking for where those fields written to in shm_uniformfv/shm_uniformiv are used and written to the GPU command buffer either directly or through __cb_writeRegs, __cb_multiWriteReg or __cb_fillRegs.

6. Document findings on 3Dbrew ! (that's the most important step)

Fragment "uniform" list[edit]

Uniform ID Type Name Handler address (Steeldiver : Sub Wars) Shader Program struct offset GPU Register
0x0 GL_BOOL dmp_Texture[0].perspectiveShadow 0x0012A504 ? 0x008B bit0 (0 = enable??)
0x1 GL_FLOAT dmp_Texture[0].shadowZBias 0x00155584 0xE44 ?
0x2 GL_FLOAT dmp_Texture[0].shadowZScale 0x001556A0 0xE48 ?
0x3 GL_INT dmp_Texture[0].samplerType 0x0012A5D0 ? ?
0x4 GL_INT dmp_Texture[1].samplerType 0x0012A6F8 ? ?
0x5 GL_INT dmp_Texture[2].samplerType 0x0012A774 ? ?
0x6 GL_INT dmp_Texture[3].samplerType 0x0012A7F0 ? 0x0080 bit10 (?)
0x7 GL_INT dmp_Texture[2].texcoord 0x0012A8B4 ? 0x0080 bit13 (1 = use texcoords from texture unit 1)
0x8 GL_INT dmp_Texture[3].texcoord 0x0012A97C ? 0x0080 bit8-9 (0-2 = use texcoords from texture unit 0-2 resp., 3 = forbidden?)
0x9 GL_INT dmp_Texture[3].ptRgbMap 0x0012AA54 ? 0x00A8 bit6-9
0xA GL_INT dmp_Texture[3].ptAlphaMap 0x0012AB94 ? 0x00A8 bit10-13
0xB GL_BOOL dmp_Texture[3].ptAlphaSeparate 0x0012ACD4 ? 0x00A8 bit14
0xC GL_INT dmp_Texture[3].ptClampU 0x0012ADB8 ? 0x00A8 bit0-2
0xD GL_INT dmp_Texture[3].ptClampV 0x0012AEC0 ? 0x00A8 bit3-5
0xE GL_INT dmp_Texture[3].ptShiftU 0x0012AFD0 ? 0x00A8 bit16-17
0xF GL_INT dmp_Texture[3].ptShiftV 0x0012B0A0 ? 0x00A8 bit18-19
0x10 GL_INT dmp_Texture[3].ptMinFilter 0x0012B168 ? 0x00AC bit0-2
0x11 GL_INT dmp_Texture[3].ptTexWidth 0x0012B270 ? 0x00AC bit11-18
0x12 GL_INT dmp_Texture[3].ptTexOffset 0x0012B334 ? 0x00AD bit0-7
0x13 GL_FLOAT dmp_Texture[3].ptTexBias 0x001556B4 0xE10 0x00A8 bit20-27
0x14 GL_BOOL dmp_Texture[3].ptNoiseEnable 0x0012B3E0 ? 0x00A8 bit15
0x15 GL_FLOAT_VEC3 dmp_Texture[3].ptNoiseU 0x00155878 0xE14 0x00A9, 0x00AB
0x16 GL_FLOAT_VEC3 dmp_Texture[3].ptNoiseV 0x00155A7C 0xE20 0x00AA, 0x00AB
0x17 GL_SAMPLER_1D dmp_Texture[3].ptSamplerRgbMap 0x0012B4B0 0xDF0 ?
0x18 GL_SAMPLER_1D dmp_Texture[3].ptSamplerAlphaMap 0x0012B4F4 0xDF4 ?
0x19 GL_SAMPLER_1D dmp_Texture[3].ptSamplerNoiseMap 0x0012B540 0xDF8 ?
0x1A GL_SAMPLER_1D dmp_Texture[3].ptSamplerR 0x0012B58C 0xDFC ?
0x1B GL_SAMPLER_1D dmp_Texture[3].ptSamplerG 0x0012B5D8 0xE00 ?
0x1C GL_SAMPLER_1D dmp_Texture[3].ptSamplerB 0x0012B624 0xE04 ?
0x1D GL_SAMPLER_1D dmp_Texture[3].ptSamplerA 0x0012B670 0xE08 ?
0x1E GL_INT dmp_FragOperation.mode 0x0012B6BC 0xE38 ?
0x1F GL_FLOAT dmp_FragOperation.penumbraScale 0x00155C98 0xE40 ?
0x20 GL_FLOAT dmp_FragOperation.penumbraBias 0x00155D8C 0xE3C ?
0x21 GL_FLOAT dmp_FragOperation.wScale 0x00155E9C 0xE4C ?
0x22 GL_BOOL dmp_FragOperation.enableClippingPlane 0x0012EAEC 0x568 0x0047 bit0
0x23 GL_FLOAT_VEC4 dmp_FragOperation.clippingPlane 0x00159474 0xE50 ?
0x24 GL_BOOL dmp_FragOperation.enableAlphaTest 0x0012EBAC 0x64C ?
0x25 GL_INT dmp_FragOperation.alphaTestFunc 0x0012EC64 0x64C ?
0x26 GL_FLOAT dmp_FragOperation.alphaRefValue 0x0015971C 0x64C ? ?
0x27 GL_FLOAT_VEC3 dmp_Gas.lightXY 0x001560EC 0xE84 0x0120 (vec[0] -> bit0-7, vec[1] -> bit8-15, vec[2] -> bit16-23)
0x28 GL_FLOAT_VEC4 dmp_Gas.lightZ 0x00156268 0xE90 0x0121 (vec[0] -> bit0-7, vec[1] -> bit8-15, vec[2] -> bit16-23), 0x0122 (vec[3] -> bit 0-7)
0x29 GL_FLOAT dmp_Gas.deltaZ 0x001564D4 0xEA0 0x0126 bit0-23
0x2A GL_FLOAT dmp_Gas.accMax 0x001565C0 0xEA4 0x00E5
0x2B GL_BOOL dmp_Gas.autoAcc 0x0012B790 0xE74 ?
0x2C GL_FLOAT dmp_Gas.attenuation 0x00156684 0xEA8 0x00E4
0x2D GL_INT dmp_Gas.colorLutInput 0x0012B7A4 0x640 0x0122 bit8 (0x6060/0x6061 -> 0/1)
0x2E GL_INT dmp_Gas.shadingDensitySrc 0x0012B854 0x624 0x00E0 bit3 (0x605E/0x605F -> 0/1)
0x2F GL_SAMPLER_1D dmp_Gas.samplerTR 0x0012B910 0xE78 ?
0x30 GL_SAMPLER_1D dmp_Gas.samplerTG 0x0012B95C 0xE7C ?
0x31 GL_SAMPLER_1D dmp_Gas.samplerTB 0x0012B9A8 0xE80 ?
0x32 GL_BOOL dmp_FragmentLighting.enabled 0x0012B9F4 0x590 0x00A8 bit0, 0x01C6 (0 = enabled)
0x33 GL_FLOAT_VEC4 dmp_FragmentLighting.ambient 0x00156744 0xA10 0x01C0?
0x34 GL_FLOAT_VEC4 dmp_FragmentMaterial.emission 0x00156E1C 0xDE0 0x01C0?
0x35 GL_FLOAT_VEC4 dmp_FragmentMaterial.ambient 0x0015696C 0xDA0 0x01C0
0x36 GL_FLOAT_VEC4 dmp_FragmentMaterial.diffuse 0x00157048 0xDB0 ?
0x37 GL_FLOAT_VEC4 dmp_FragmentMaterial.specular0 0x001572E0 0xDC0 ?
0x38 GL_FLOAT_VEC4 dmp_FragmentMaterial.specular1 0x0015756C 0xDD0 ?
0x39 GL_BOOL dmp_FragmentLightSource[0].enabled 0x0012BD24 0xA20+0*0x70+0x00 0x01C5
0x3A GL_BOOL dmp_FragmentLightSource[1].enabled 0x0012BD24 0xA20+1*0x70+0x00 0x01C5
0x3B GL_BOOL dmp_FragmentLightSource[2].enabled 0x0012BD24 0xA20+2*0x70+0x00 0x01C5
0x3C GL_BOOL dmp_FragmentLightSource[3].enabled 0x0012BD24 0xA20+3*0x70+0x00 0x01C5
0x3D GL_BOOL dmp_FragmentLightSource[4].enabled 0x0012BD24 0xA20+4*0x70+0x00 0x01C5
0x3E GL_BOOL dmp_FragmentLightSource[5].enabled 0x0012BD24 0xA20+5*0x70+0x00 0x01C5
0x3F GL_BOOL dmp_FragmentLightSource[6].enabled 0x0012BD24 0xA20+6*0x70+0x00 0x01C5
0x40 GL_BOOL dmp_FragmentLightSource[7].enabled 0x0012BD24 0xA20+7*0x70+0x00 0x01C5
0x41 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].ambient 0x001579CC 0xA20+0*0x70+0x04 0x0143
0x42 GL_FLOAT_VEC4 dmp_FragmentLightSource[1].ambient 0x001579CC 0xA20+1*0x70+0x04 0x0153
0x43 GL_FLOAT_VEC4 dmp_FragmentLightSource[2].ambient 0x001579CC 0xA20+2*0x70+0x04 0x0163
0x44 GL_FLOAT_VEC4 dmp_FragmentLightSource[3].ambient 0x001579CC 0xA20+3*0x70+0x04 0x0173
0x45 GL_FLOAT_VEC4 dmp_FragmentLightSource[4].ambient 0x001579CC 0xA20+4*0x70+0x04 0x0183
0x46 GL_FLOAT_VEC4 dmp_FragmentLightSource[5].ambient 0x001579CC 0xA20+5*0x70+0x04 0x0193
0x47 GL_FLOAT_VEC4 dmp_FragmentLightSource[6].ambient 0x001579CC 0xA20+6*0x70+0x04 0x01A3
0x48 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].ambient 0x001579CC 0xA20+7*0x70+0x04 0x01B3
0x49 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].diffuse 0x00157C10 0xA20+0*0x70+0x14 0x0142
0x4A GL_FLOAT_VEC4 dmp_FragmentLightSource[1].diffuse 0x00157C10 0xA20+1*0x70+0x14 0x0152
0x4B GL_FLOAT_VEC4 dmp_FragmentLightSource[2].diffuse 0x00157C10 0xA20+2*0x70+0x14 0x0162
0x4C GL_FLOAT_VEC4 dmp_FragmentLightSource[3].diffuse 0x00157C10 0xA20+3*0x70+0x14 0x0172
0x4D GL_FLOAT_VEC4 dmp_FragmentLightSource[4].diffuse 0x00157C10 0xA20+4*0x70+0x14 0x0182
0x4E GL_FLOAT_VEC4 dmp_FragmentLightSource[5].diffuse 0x00157C10 0xA20+5*0x70+0x14 0x0192
0x4F GL_FLOAT_VEC4 dmp_FragmentLightSource[6].diffuse 0x00157C10 0xA20+6*0x70+0x14 0x01A2
0x50 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].diffuse 0x00157C10 0xA20+7*0x70+0x14 0x01B2
0x51 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].specular0 0x00157E5C 0xA20+0*0x70+0x24 0x01C8 ?
0x52 GL_FLOAT_VEC4 dmp_FragmentLightSource[1].specular0 0x00157E5C 0xA20+1*0x70+0x24 0x01C8 ?
0x53 GL_FLOAT_VEC4 dmp_FragmentLightSource[2].specular0 0x00157E5C 0xA20+2*0x70+0x24 0x01C8 ?
0x54 GL_FLOAT_VEC4 dmp_FragmentLightSource[3].specular0 0x00157E5C 0xA20+3*0x70+0x24 0x01C8 ?
0x55 GL_FLOAT_VEC4 dmp_FragmentLightSource[4].specular0 0x00157E5C 0xA20+4*0x70+0x24 0x01C8 ?
0x56 GL_FLOAT_VEC4 dmp_FragmentLightSource[5].specular0 0x00157E5C 0xA20+5*0x70+0x24 0x01C8 ?
0x57 GL_FLOAT_VEC4 dmp_FragmentLightSource[6].specular0 0x00157E5C 0xA20+6*0x70+0x24 0x01C8 ?
0x58 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].specular0 0x00157E5C 0xA20+7*0x70+0x24 0x01C8 ?
0x59 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].specular1 0x001580B4 0xA20+0*0x70+0x34 0x01C8 ?
0x5A GL_FLOAT_VEC4 dmp_FragmentLightSource[1].specular1 0x001580B4 0xA20+1*0x70+0x34 0x01C8 ?
0x5B GL_FLOAT_VEC4 dmp_FragmentLightSource[2].specular1 0x001580B4 0xA20+2*0x70+0x34 0x01C8 ?
0x5C GL_FLOAT_VEC4 dmp_FragmentLightSource[3].specular1 0x001580B4 0xA20+3*0x70+0x34 0x01C8 ?
0x5D GL_FLOAT_VEC4 dmp_FragmentLightSource[4].specular1 0x001580B4 0xA20+4*0x70+0x34 0x01C8 ?
0x5E GL_FLOAT_VEC4 dmp_FragmentLightSource[5].specular1 0x001580B4 0xA20+5*0x70+0x34 0x01C8 ?
0x5F GL_FLOAT_VEC4 dmp_FragmentLightSource[6].specular1 0x001580B4 0xA20+6*0x70+0x34 0x01C8 ?
0x60 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].specular1 0x001580B4 0xA20+7*0x70+0x34 0x01C8 ?
0x61 GL_FLOAT_VEC4 dmp_FragmentLightSource[0].position 0x001584B0 0xA20+0*0x70+0x44 0x01C8 ?
0x62 GL_FLOAT_VEC4 dmp_FragmentLightSource[1].position 0x001584B0 0xA20+1*0x70+0x44 0x01C8 ?
0x63 GL_FLOAT_VEC4 dmp_FragmentLightSource[2].position 0x001584B0 0xA20+2*0x70+0x44 0x01C8 ?
0x64 GL_FLOAT_VEC4 dmp_FragmentLightSource[3].position 0x001584B0 0xA20+3*0x70+0x44 0x01C8 ?
0x65 GL_FLOAT_VEC4 dmp_FragmentLightSource[4].position 0x001584B0 0xA20+4*0x70+0x44 0x01C8 ?
0x66 GL_FLOAT_VEC4 dmp_FragmentLightSource[5].position 0x001584B0 0xA20+5*0x70+0x44 0x01C8 ?
0x67 GL_FLOAT_VEC4 dmp_FragmentLightSource[6].position 0x001584B0 0xA20+6*0x70+0x44 0x01C8 ?
0x68 GL_FLOAT_VEC4 dmp_FragmentLightSource[7].position 0x001584B0 0xA20+7*0x70+0x44 0x01C8 ?
0x69 GL_FLOAT_VEC3 dmp_FragmentLightSource[0].spotDirection 0x001587E4 0xA20+0*0x70+0x54 0x01C8 ?
0x6A GL_FLOAT_VEC3 dmp_FragmentLightSource[1].spotDirection 0x001587E4 0xA20+1*0x70+0x54 0x01C8 ?
0x6B GL_FLOAT_VEC3 dmp_FragmentLightSource[2].spotDirection 0x001587E4 0xA20+2*0x70+0x54 0x01C8 ?
0x6C GL_FLOAT_VEC3 dmp_FragmentLightSource[3].spotDirection 0x001587E4 0xA20+3*0x70+0x54 0x01C8 ?
0x6D GL_FLOAT_VEC3 dmp_FragmentLightSource[4].spotDirection 0x001587E4 0xA20+4*0x70+0x54 0x01C8 ?
0x6E GL_FLOAT_VEC3 dmp_FragmentLightSource[5].spotDirection 0x001587E4 0xA20+5*0x70+0x54 0x01C8 ?
0x6F GL_FLOAT_VEC3 dmp_FragmentLightSource[6].spotDirection 0x001587E4 0xA20+6*0x70+0x54 0x01C8 ?
0x70 GL_FLOAT_VEC3 dmp_FragmentLightSource[7].spotDirection 0x001587E4 0xA20+7*0x70+0x54 0x01C8 ?
0x71 GL_BOOL dmp_FragmentLightSource[0].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x72 GL_BOOL dmp_FragmentLightSource[1].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x73 GL_BOOL dmp_FragmentLightSource[2].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x74 GL_BOOL dmp_FragmentLightSource[3].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x75 GL_BOOL dmp_FragmentLightSource[4].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x76 GL_BOOL dmp_FragmentLightSource[5].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x77 GL_BOOL dmp_FragmentLightSource[6].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x78 GL_BOOL dmp_FragmentLightSource[7].shadowed 0x0012C20C 0x7C0 0x01C8 ?
0x79 GL_BOOL dmp_FragmentLightSource[0].geomFactor0 0x0012C018 0x7D8 0x0149 bit2
0x7A GL_BOOL dmp_FragmentLightSource[1].geomFactor0 0x0012C018 0x7D8 0x0159 bit2
0x7B GL_BOOL dmp_FragmentLightSource[2].geomFactor0 0x0012C018 0x7D8 0x0169 bit2
0x7C GL_BOOL dmp_FragmentLightSource[3].geomFactor0 0x0012C018 0x7D8 0x0179 bit2
0x7D GL_BOOL dmp_FragmentLightSource[4].geomFactor0 0x0012C018 0x7D8 0x0189 bit2
0x7E GL_BOOL dmp_FragmentLightSource[5].geomFactor0 0x0012C018 0x7D8 0x0199 bit2
0x7F GL_BOOL dmp_FragmentLightSource[6].geomFactor0 0x0012C018 0x7D8 0x01A9 bit2
0x80 GL_BOOL dmp_FragmentLightSource[7].geomFactor0 0x0012C018 0x7D8 0x01B9 bit2
0x81 GL_BOOL dmp_FragmentLightSource[0].geomFactor1 0x0012C114 0x7D8 0x0149 bit3
0x82 GL_BOOL dmp_FragmentLightSource[1].geomFactor1 0x0012C114 0x7D8 0x0159 bit3
0x83 GL_BOOL dmp_FragmentLightSource[2].geomFactor1 0x0012C114 0x7D8 0x0169 bit3
0x84 GL_BOOL dmp_FragmentLightSource[3].geomFactor1 0x0012C114 0x7D8 0x0179 bit3
0x85 GL_BOOL dmp_FragmentLightSource[4].geomFactor1 0x0012C114 0x7D8 0x0189 bit3
0x86 GL_BOOL dmp_FragmentLightSource[5].geomFactor1 0x0012C114 0x7D8 0x0199 bit3
0x87 GL_BOOL dmp_FragmentLightSource[6].geomFactor1 0x0012C114 0x7D8 0x01A9 bit3
0x88 GL_BOOL dmp_FragmentLightSource[7].geomFactor1 0x0012C114 0x7D8 0x01B9 bit3
0x89 GL_BOOL dmp_FragmentLightSource[0].twoSideDiffuse 0x0012BF10 0x7D8 0x0149 bit1
0x8A GL_BOOL dmp_FragmentLightSource[1].twoSideDiffuse 0x0012BF10 0x7D8 0x0159 bit1
0x8B GL_BOOL dmp_FragmentLightSource[2].twoSideDiffuse 0x0012BF10 0x7D8 0x0169 bit1
0x8C GL_BOOL dmp_FragmentLightSource[3].twoSideDiffuse 0x0012BF10 0x7D8 0x0179 bit1
0x8D GL_BOOL dmp_FragmentLightSource[4].twoSideDiffuse 0x0012BF10 0x7D8 0x0189 bit1
0x8E GL_BOOL dmp_FragmentLightSource[5].twoSideDiffuse 0x0012BF10 0x7D8 0x0199 bit1
0x8F GL_BOOL dmp_FragmentLightSource[6].twoSideDiffuse 0x0012BF10 0x7D8 0x01A9 bit1
0x90 GL_BOOL dmp_FragmentLightSource[7].twoSideDiffuse 0x0012BF10 0x7D8 0x01B9 bit1
0x91 GL_SAMPLER_1D dmp_FragmentLightSource[0].samplerSP 0x0012C31C 0xA20+0*0x70+0x60 0x01C8 ?
0x92 GL_SAMPLER_1D dmp_FragmentLightSource[1].samplerSP 0x0012C31C 0xA20+1*0x70+0x60 0x01C8 ?
0x93 GL_SAMPLER_1D dmp_FragmentLightSource[2].samplerSP 0x0012C31C 0xA20+2*0x70+0x60 0x01C8 ?
0x94 GL_SAMPLER_1D dmp_FragmentLightSource[3].samplerSP 0x0012C31C 0xA20+3*0x70+0x60 0x01C8 ?
0x95 GL_SAMPLER_1D dmp_FragmentLightSource[4].samplerSP 0x0012C31C 0xA20+4*0x70+0x60 0x01C8 ?
0x96 GL_SAMPLER_1D dmp_FragmentLightSource[5].samplerSP 0x0012C31C 0xA20+5*0x70+0x60 0x01C8 ?
0x97 GL_SAMPLER_1D dmp_FragmentLightSource[6].samplerSP 0x0012C31C 0xA20+6*0x70+0x60 0x01C8 ?
0x98 GL_SAMPLER_1D dmp_FragmentLightSource[7].samplerSP 0x0012C31C 0xA20+7*0x70+0x60 0x01C8 ?
0x99 GL_BOOL dmp_FragmentLightSource[0].spotEnabled 0x0012C380 ? 0x01C4 bit3 (1 = disable?)
0x9A GL_BOOL dmp_FragmentLightSource[1].spotEnabled 0x0012C380 ? 0x01C4 bit4 (1 = disable?)
0x9B GL_BOOL dmp_FragmentLightSource[2].spotEnabled 0x0012C380 ? 0x01C4 bit5 (1 = disable?)
0x9C GL_BOOL dmp_FragmentLightSource[3].spotEnabled 0x0012C380 ? 0x01C4 bit6 (1 = disable?)
0x9D GL_BOOL dmp_FragmentLightSource[4].spotEnabled 0x0012C380 ? 0x01C4 bit7 (1 = disable?)
0x9E GL_BOOL dmp_FragmentLightSource[5].spotEnabled 0x0012C380 ? 0x01C4 bit8 (1 = disable?)
0x9F GL_BOOL dmp_FragmentLightSource[6].spotEnabled 0x0012C380 ? 0x01C4 bit9 (1 = disable?)
0xA0 GL_BOOL dmp_FragmentLightSource[7].spotEnabled 0x0012C380 ? 0x01C4 bit10 (1 = disable?)
0xA1 GL_FLOAT dmp_FragmentLightSource[0].distanceAttenuationBias 0x00158AE8 0xA20+0*0x70+0x64 0x01C8 ?
0xA2 GL_FLOAT dmp_FragmentLightSource[1].distanceAttenuationBias 0x00158AE8 0xA20+1*0x70+0x64 0x01C8 ?
0xA3 GL_FLOAT dmp_FragmentLightSource[2].distanceAttenuationBias 0x00158AE8 0xA20+2*0x70+0x64 0x01C8 ?
0xA4 GL_FLOAT dmp_FragmentLightSource[3].distanceAttenuationBias 0x00158AE8 0xA20+3*0x70+0x64 0x01C8 ?
0xA5 GL_FLOAT dmp_FragmentLightSource[4].distanceAttenuationBias 0x00158AE8 0xA20+4*0x70+0x64 0x01C8 ?
0xA6 GL_FLOAT dmp_FragmentLightSource[5].distanceAttenuationBias 0x00158AE8 0xA20+5*0x70+0x64 0x01C8 ?
0xA7 GL_FLOAT dmp_FragmentLightSource[6].distanceAttenuationBias 0x00158AE8 0xA20+6*0x70+0x64 0x01C8 ?
0xA8 GL_FLOAT dmp_FragmentLightSource[7].distanceAttenuationBias 0x00158AE8 0xA20+7*0x70+0x64 0x01C8 ?
0xA9 GL_FLOAT dmp_FragmentLightSource[0].distanceAttenuationScale 0x00158C44 0xA20+0*0x70+0x68 0x01C8 ?
0xAA GL_FLOAT dmp_FragmentLightSource[1].distanceAttenuationScale 0x00158C44 0xA20+1*0x70+0x68 0x01C8 ?
0xAB GL_FLOAT dmp_FragmentLightSource[2].distanceAttenuationScale 0x00158C44 0xA20+2*0x70+0x68 0x01C8 ?
0xAC GL_FLOAT dmp_FragmentLightSource[3].distanceAttenuationScale 0x00158C44 0xA20+3*0x70+0x68 0x01C8 ?
0xAD GL_FLOAT dmp_FragmentLightSource[4].distanceAttenuationScale 0x00158C44 0xA20+4*0x70+0x68 0x01C8 ?
0xAE GL_FLOAT dmp_FragmentLightSource[5].distanceAttenuationScale 0x00158C44 0xA20+5*0x70+0x68 0x01C8 ?
0xAF GL_FLOAT dmp_FragmentLightSource[6].distanceAttenuationScale 0x00158C44 0xA20+6*0x70+0x68 0x01C8 ?
0xB0 GL_FLOAT dmp_FragmentLightSource[7].distanceAttenuationScale 0x00158C44 0xA20+7*0x70+0x68 0x01C8 ?
0xB1 GL_BOOL dmp_FragmentLightSource[0].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB2 GL_BOOL dmp_FragmentLightSource[1].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB3 GL_BOOL dmp_FragmentLightSource[2].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB4 GL_BOOL dmp_FragmentLightSource[3].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB5 GL_BOOL dmp_FragmentLightSource[4].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB6 GL_BOOL dmp_FragmentLightSource[5].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB7 GL_BOOL dmp_FragmentLightSource[6].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB8 GL_BOOL dmp_FragmentLightSource[7].distanceAttenuationEnabled 0x0012C4A0 ? 0x01C8 ?
0xB9 GL_SAMPLER_1D dmp_FragmentLightSource[0].samplerDA 0x0012C578 0xA20+0*0x70+0x6C 0x01C8 ?
0xBA GL_SAMPLER_1D dmp_FragmentLightSource[1].samplerDA 0x0012C578 0xA20+1*0x70+0x6C 0x01C8 ?
0xBB GL_SAMPLER_1D dmp_FragmentLightSource[2].samplerDA 0x0012C578 0xA20+2*0x70+0x6C 0x01C8 ?
0xBC GL_SAMPLER_1D dmp_FragmentLightSource[3].samplerDA 0x0012C578 0xA20+3*0x70+0x6C 0x01C8 ?
0xBD GL_SAMPLER_1D dmp_FragmentLightSource[4].samplerDA 0x0012C578 0xA20+4*0x70+0x6C 0x01C8 ?
0xBE GL_SAMPLER_1D dmp_FragmentLightSource[5].samplerDA 0x0012C578 0xA20+5*0x70+0x6C 0x01C8 ?
0xBF GL_SAMPLER_1D dmp_FragmentLightSource[6].samplerDA 0x0012C578 0xA20+6*0x70+0x6C 0x01C8 ?
0xC0 GL_SAMPLER_1D dmp_FragmentLightSource[7].samplerDA 0x0012C578 0xA20+7*0x70+0x6C 0x01C8 ?
0xC1 GL_BOOL dmp_LightEnv.absLutInputD0 0x0012C5D8 ? 0x01D0 bit12 (1 = disable?)
0xC2 GL_BOOL dmp_LightEnv.absLutInputD1 0x0012C5D8 ? 0x01D0 bit13 (1 = disable?)
0xC3 GL_BOOL dmp_LightEnv.absLutInputSP 0x0012C5D8 ? 0x01D0 bit14 (1 = disable?)
0xC4 GL_BOOL dmp_LightEnv.absLutInputFR 0x0012C5D8 ? 0x01D0 bit15 (1 = disable?)
0xC5 GL_BOOL dmp_LightEnv.absLutInputRB 0x0012C5D8 ? 0x01D0 bit16 (1 = disable?)
0xC6 GL_BOOL dmp_LightEnv.absLutInputRG 0x0012C5D8 ? 0x01D0 bit17 (1 = disable?)
0xC7 GL_BOOL dmp_LightEnv.absLutInputRR 0x0012C5D8 ? 0x01D0 bit18 (1 = disable?)
0xC8 GL_INT dmp_LightEnv.lutInputD0 0x0012C6E8 ? 0x01D1 bit0-2
0xC9 GL_INT dmp_LightEnv.lutInputD1 0x0012C6E8 ? 0x01D1 bit4-6
0xCA GL_INT dmp_LightEnv.lutInputSP 0x0012C6E8 ? 0x01D1 bit8-10
0xCB GL_INT dmp_LightEnv.lutInputFR 0x0012C6E8 ? 0x01D1 bit12-14
0xCC GL_INT dmp_LightEnv.lutInputRB 0x0012C6E8 ? 0x01D1 bit16-18
0xCD GL_INT dmp_LightEnv.lutInputRG 0x0012C6E8 ? 0x01D1 bit20-22
0xCE GL_INT dmp_LightEnv.lutInputRR 0x0012C6E8 ? 0x01D1 bit24-26
0xCF GL_FLOAT dmp_LightEnv.lutScaleD0 0x00155404 ? 0x01D2 bit0-3
0xD0 GL_FLOAT dmp_LightEnv.lutScaleD1 0x00155404 ? 0x01D2 bit4-7
0xD1 GL_FLOAT dmp_LightEnv.lutScaleSP 0x00155404 ? 0x01D2 bit8-11
0xD2 GL_FLOAT dmp_LightEnv.lutScaleFR 0x00155404 ? 0x01D2 bit12-15
0xD3 GL_FLOAT dmp_LightEnv.lutScaleRB 0x00155404 ? 0x01D2 bit16-19
0xD4 GL_FLOAT dmp_LightEnv.lutScaleRG 0x00155404 ? 0x01D2 bit20-23
0xD5 GL_FLOAT dmp_LightEnv.lutScaleRR 0x00155404 ? 0x01D2 bit24-27
0xD6 GL_SAMPLER_1D dmp_FragmentMaterial.samplerD0 0x0012C7D0 ? ?
0xD7 GL_SAMPLER_1D dmp_FragmentMaterial.samplerD1 0x0012C7D0 ? ?
0xD8 GL_SAMPLER_1D dmp_FragmentMaterial.samplerFR 0x0012C7D0 ? ?
0xD9 GL_SAMPLER_1D dmp_FragmentMaterial.samplerRB 0x0012C7D0 ? ?
0xDA GL_SAMPLER_1D dmp_FragmentMaterial.samplerRG 0x0012C7D0 ? ?
0xDB GL_SAMPLER_1D dmp_FragmentMaterial.samplerRR 0x0012C7D0 ? ?
0xDC GL_INT dmp_LightEnv.shadowSelector 0x0012CE44 ? 0x01C3 bit24-25
0xDD GL_INT dmp_LightEnv.bumpSelector 0x0012CD88 ? 0x01C3 bit22-23
0xDE GL_INT dmp_LightEnv.bumpMode 0x0012D4B4 ? ?
0xDF GL_BOOL dmp_LightEnv.bumpRenorm 0x0012D8A0 ? ?
0xE0 GL_INT dmp_LightEnv.config 0x0012D5E4 ? ?
0xE1 GL_BOOL dmp_LightEnv.invertShadow 0x0012CF04 ? ?
0xE2 GL_BOOL dmp_LightEnv.shadowPrimary 0x0012CFD4 ? ?
0xE3 GL_BOOL dmp_LightEnv.shadowSecondary 0x0012D1B8 ? ?
0xE4 GL_BOOL dmp_LightEnv.shadowAlpha 0x0012D350 ? ?
0xE5 GL_INT dmp_LightEnv.fresnelSelector 0x0012D720 ? ?
0xE6 GL_BOOL dmp_LightEnv.clampHighlights 0x0012D9B0 ? ?
0xE7 GL_BOOL dmp_LightEnv.lutEnabledD0 0x0012DA80 ? ?
0xE8 GL_BOOL dmp_LightEnv.lutEnabledD1 0x0012DB58 ? ?
0xE9 GL_BOOL dmp_LightEnv.lutEnabledRefl 0x0012C83C ? ?
0xEA GL_INT dmp_TexEnv[0].combineRgb 0x0012DC2C ? 0xC2
0xEB GL_INT dmp_TexEnv[1].combineRgb 0x0012DC2C ? 0xCA
0xEC GL_INT dmp_TexEnv[2].combineRgb 0x0012DC2C ? 0xD2
0xED GL_INT dmp_TexEnv[3].combineRgb 0x0012DC2C ? 0xDA
0xEE GL_INT dmp_TexEnv[4].combineRgb 0x0012DC2C ? 0xF2
0xEF GL_INT dmp_TexEnv[5].combineRgb 0x0012DC2C ? 0xFA
0xF0 GL_INT dmp_TexEnv[0].combineAlpha 0x0012DD9C ? 0xC2
0xF1 GL_INT dmp_TexEnv[1].combineAlpha 0x0012DD9C ? 0xCA
0xF2 GL_INT dmp_TexEnv[2].combineAlpha 0x0012DD9C ? 0xD2
0xF3 GL_INT dmp_TexEnv[3].combineAlpha 0x0012DD9C ? 0xDA
0xF4 GL_INT dmp_TexEnv[4].combineAlpha 0x0012DD9C ? 0xF2
0xF5 GL_INT dmp_TexEnv[5].combineAlpha 0x0012DD9C ? 0xFA
0xF6 GL_INT_VEC3 dmp_TexEnv[0].srcRgb 0x0012DF08 ? 0xC0
0xF7 GL_INT_VEC3 dmp_TexEnv[1].srcRgb 0x0012DF08 ? 0xC8
0xF8 GL_INT_VEC3 dmp_TexEnv[2].srcRgb 0x0012DF08 ? 0xD0
0xF9 GL_INT_VEC3 dmp_TexEnv[3].srcRgb 0x0012DF08 ? 0xD8
0xFA GL_INT_VEC3 dmp_TexEnv[4].srcRgb 0x0012DF08 ? 0xF0
0xFB GL_INT_VEC3 dmp_TexEnv[5].srcRgb 0x0012DF08 ? 0xF8
0xFC GL_INT_VEC3 dmp_TexEnv[0].srcAlpha 0x0012E0FC ? 0xC0
0xFD GL_INT_VEC3 dmp_TexEnv[1].srcAlpha 0x0012E0FC ? 0xC8
0xFE GL_INT_VEC3 dmp_TexEnv[2].srcAlpha 0x0012E0FC ? 0xD0
0xFF GL_INT_VEC3 dmp_TexEnv[3].srcAlpha 0x0012E0FC ? 0xD8
0x100 GL_INT_VEC3 dmp_TexEnv[4].srcAlpha 0x0012E0FC ? 0xF0
0x101 GL_INT_VEC3 dmp_TexEnv[5].srcAlpha 0x0012E0FC ? 0xF8
0x102 GL_INT_VEC3 dmp_TexEnv[0].operandRgb 0x0012E2F0 ? 0xC1
0x103 GL_INT_VEC3 dmp_TexEnv[1].operandRgb 0x0012E2F0 ? 0xC9
0x104 GL_INT_VEC3 dmp_TexEnv[2].operandRgb 0x0012E2F0 ? 0xD1
0x105 GL_INT_VEC3 dmp_TexEnv[3].operandRgb 0x0012E2F0 ? 0xD9
0x106 GL_INT_VEC3 dmp_TexEnv[4].operandRgb 0x0012E2F0 ? 0xF1
0x107 GL_INT_VEC3 dmp_TexEnv[5].operandRgb 0x0012E2F0 ? 0xF9
0x108 GL_INT_VEC3 dmp_TexEnv[0].operandAlpha 0x0012E51C ? 0xC1
0x109 GL_INT_VEC3 dmp_TexEnv[1].operandAlpha 0x0012E51C ? 0xC9
0x10A GL_INT_VEC3 dmp_TexEnv[2].operandAlpha 0x0012E51C ? 0xD1
0x10B GL_INT_VEC3 dmp_TexEnv[3].operandAlpha 0x0012E51C ? 0xD9
0x10C GL_INT_VEC3 dmp_TexEnv[4].operandAlpha 0x0012E51C ? 0xF1
0x10D GL_INT_VEC3 dmp_TexEnv[5].operandAlpha 0x0012E51C ? 0xF9
0x10E GL_FLOAT dmp_TexEnv[0].scaleRgb 0x00155464 ? ?
0x10F GL_FLOAT dmp_TexEnv[1].scaleRgb 0x00155464 ? ?
0x110 GL_FLOAT dmp_TexEnv[2].scaleRgb 0x00155464 ? ?
0x111 GL_FLOAT dmp_TexEnv[3].scaleRgb 0x00155464 ? ?
0x112 GL_FLOAT dmp_TexEnv[4].scaleRgb 0x00155464 ? ?
0x113 GL_FLOAT dmp_TexEnv[5].scaleRgb 0x00155464 ? ?
0x114 GL_FLOAT dmp_TexEnv[0].scaleAlpha 0x00158EDC ? ?
0x115 GL_FLOAT dmp_TexEnv[1].scaleAlpha 0x00158EDC ? ?
0x116 GL_FLOAT dmp_TexEnv[2].scaleAlpha 0x00158EDC ? ?
0x117 GL_FLOAT dmp_TexEnv[3].scaleAlpha 0x00158EDC ? ?
0x118 GL_FLOAT dmp_TexEnv[4].scaleAlpha 0x00158EDC ? ?
0x119 GL_FLOAT dmp_TexEnv[5].scaleAlpha 0x00158EDC ? ?
0x11A GL_FLOAT_VEC4 dmp_TexEnv[0].constRgba 0x00158FF4 ? 0xC3
0x11B GL_FLOAT_VEC4 dmp_TexEnv[1].constRgba 0x00158FF4 ? 0xCB
0x11C GL_FLOAT_VEC4 dmp_TexEnv[2].constRgba 0x00158FF4 ? 0xD3
0x11D GL_FLOAT_VEC4 dmp_TexEnv[3].constRgba 0x00158FF4 ? 0xDB
0x11E GL_FLOAT_VEC4 dmp_TexEnv[4].constRgba 0x00158FF4 ? 0xF3
0x11F GL_FLOAT_VEC4 dmp_TexEnv[5].constRgba 0x00158FF4 ? 0xFB
0x120 GL_FLOAT_VEC4 dmp_TexEnv[0].bufferColor 0x001591C0 ? ?
0x121 GL_INT_VEC2 dmp_TexEnv[1].bufferInput 0x0012E6D0 ? ?
0x122 GL_INT_VEC2 dmp_TexEnv[2].bufferInput 0x0012E6D0 ? ?
0x123 GL_INT_VEC2 dmp_TexEnv[3].bufferInput 0x0012E6D0 ? ?
0x124 GL_INT_VEC2 dmp_TexEnv[4].bufferInput 0x0012E6D0 ? ?
0x125 GL_INT dmp_Fog.mode 0x0012E7F8 ? 0x00E0 bit0-2 (5 -> fog (0x0B60), 7 -> gas (0x6050))
0x126 GL_FLOAT_VEC3 dmp_Fog.color 0x00159338 ? ?
0x127 GL_BOOL dmp_Fog.zFlip 0x0012E9DC ? 0x00E0 bit16
0x128 GL_SAMPLER_1D dmp_Fog.sampler 0x0012EAA4 ? ?

On steeldiver's uniform handlers : R1 is a pointer to the current shader program object, R12 is a pointer to the data the uniform is being set to.

Other Symbols[edit]

The list above is not exhaustive. A number of other strings specific to Nintendo's rendering framework have been found. Below is a table listing those strings including the location they were found in.

Name Context Occurrence
dmp_Point.viewport.xy Name of a shader uniform CTRAging's romfs:/gpu/GasCessna/shader.shbin
dmp_Point.distanceAttenuation Name of a shader uniform CTRAging's romfs:/gpu/GasCessna/shader.shbin
dmp_Point.Position Name of a shader uniform CTRAging's romfs:/gpu/GasCessna/shader.shbin
dmp_Point.PointSize Name of a shader uniform CTRAging's romfs:/gpu/GasCessna/shader.shbin