SHBIN: Difference between revisions

Oreo639 (talk | contribs)
mNo edit summary
Oreo639 (talk | contribs)
Update DVOJ section
 
(3 intermediate revisions by the same user not shown)
Line 45: Line 45:
|  0x4
|  0x4
|  0x4
|  0x4
|  Unknown, same value as in DVLE. (Possibly a version number?)
|  Unknown, same value as in DVLE. (Likely a version number)
|-
|-
|  0x8
|  0x8
Line 95: Line 95:
|  0x4
|  0x4
|  0x2
|  0x2
|  Unknown, same value as in DVLP. (Possibly a version number?)
|  Unknown, same value as in DVLP. (Likely a version number)
|-
|-
|  0x6
|  0x6
Line 103: Line 103:
|  0x7
|  0x7
|  0x1
|  0x1
|  true = merge vertex/geometry shader outmaps ('dummy' output attribute is present)
|  true = merge vertex and geometry shader outmaps (geometry shader)
|-
|-
|  0x8
|  0x8
Line 187: Line 187:
|-
|-
|  0x0
|  0x0
0x1
0x2
|  Label ID
|  Label ID
|-
|  0x0
|  0x2
|  Unknown (always 1?)
|-
|-
|  0x4
|  0x4
Line 196: Line 200:
|  0x8
|  0x8
|  0x4
|  0x4
?
Size of label's location (in words). 0xFFFFFFFF/(uint32_t)-1 if there is no size.
|-
|-
|  0xC
|  0xC
Line 206: Line 210:
=== Constant Table Entry ===
=== Constant Table Entry ===


Each executable's constants are stored as in a constant table. This information is used by ctrulib's SHDR framework to automatically send those values to the GPU when changing to a given program. An entry is constituted by a header and the constant data, the latter of which uses a format specific to the constant type.
Each executable's constants are stored in a constant table. This information is used by ctrulib's SHDR framework to automatically send those values to the GPU when changing to a given program. An entry is constituted by a header and the constant data, the latter of which uses a format specific to the constant type.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 309: Line 313:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Bit
Offset
!  Size
!  Description
!  Description
|-
|-
0-3
0x0
|  0x2
|  Output type (see table below)
|  Output type (see table below)
|-
|-
16-19
0x2
|  0x2
|  Register ID
|  Register ID
|-
|-
32-35
0x4
|  0x2
|  Output attribute component mask (e.g. 5=xz)
|  Output attribute component mask (e.g. 5=xz)
|-
|  0x6
|  0x2
|  Unknown (Consistently the same number throughout the DVLE, may vary between DVLEs?)
|-
|}
|}


Line 420: Line 433:
|-
|-
|  0x04
|  0x04
0x4
0x2
|  Unknown. Seems to be related to the DVLE shader type.
|  Unknown. (Likely a version number)
|-
|  0x06
|  0x1
|  Shader type (0x0 = vertex shader, 0x1 = geometry shader; might contain other flags)
|-
|  0x07
|  0x1
|  true = merge vertex and geometry shader outmaps (geometry shader)
|-
|-
|  0x08
|  0x08
0x4
0x2
Unknown.
Bitmask of used input registers.
|-
|  0x10
|  0x2
|  Bitmask of used output registers.
|-
|-
|  0x0C
|  0x0C
Line 457: Line 482:
|  0x28
|  0x28
|  0x4
|  0x4
|  Offset (relative to DVLP start) to shader instruction extension table
|  Offset to operand descriptor table
|-
|-
|  0x2C
|  0x2C
|  0x4
|  0x4
|  Number of shader instruction extension table entries (each entry is 8-byte long)
|  Number of operand descriptor table entries (each entry is 8-bytes long)
|-
|-
|  0x30
|  0x30