aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/ComputeParams.cs
blob: 03582f050801183b2b00c14fcf26b9821663194f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.Runtime.InteropServices;

namespace Ryujinx.Graphics.Gpu.Engine
{
    struct UniformBufferParams
    {
        public int AddressLow;
        public int AddressHighAndSize;

        public ulong PackAddress()
        {
            return (uint)AddressLow | ((ulong)(AddressHighAndSize & 0xff) << 32);
        }

        public ulong UnpackSize()
        {
            return (ulong)((AddressHighAndSize >> 15) & 0x1ffff);
        }
    }

    struct ComputeParams
    {
        public int Unknown0;
        public int Unknown1;
        public int Unknown2;
        public int Unknown3;
        public int Unknown4;
        public int Unknown5;
        public int Unknown6;
        public int Unknown7;
        public int ShaderOffset;
        public int Unknown9;
        public int Unknown10;
        public int Unknown11;
        public int GridSizeX;
        public int GridSizeYZ;
        public int Unknown14;
        public int Unknown15;
        public int Unknown16;
        public int Unknown17;
        public int BlockSizeX;
        public int BlockSizeYZ;
        public int UniformBuffersConfig;
        public int Unknown21;
        public int Unknown22;
        public int Unknown23;
        public int Unknown24;
        public int Unknown25;
        public int Unknown26;
        public int Unknown27;
        public int Unknown28;

        private UniformBufferParams _uniformBuffer0;
        private UniformBufferParams _uniformBuffer1;
        private UniformBufferParams _uniformBuffer2;
        private UniformBufferParams _uniformBuffer3;
        private UniformBufferParams _uniformBuffer4;
        private UniformBufferParams _uniformBuffer5;
        private UniformBufferParams _uniformBuffer6;
        private UniformBufferParams _uniformBuffer7;

        public Span<UniformBufferParams> UniformBuffers
        {
            get
            {
                return MemoryMarshal.CreateSpan(ref _uniformBuffer0, 8);
            }
        }

        public int Unknown45;
        public int Unknown46;
        public int Unknown47;
        public int Unknown48;
        public int Unknown49;
        public int Unknown50;
        public int Unknown51;
        public int Unknown52;
        public int Unknown53;
        public int Unknown54;
        public int Unknown55;
        public int Unknown56;
        public int Unknown57;
        public int Unknown58;
        public int Unknown59;
        public int Unknown60;
        public int Unknown61;
        public int Unknown62;
        public int Unknown63;

        public int UnpackGridSizeX()
        {
            return GridSizeX & 0x7fffffff;
        }

        public int UnpackGridSizeY()
        {
            return GridSizeYZ & 0xffff;
        }

        public int UnpackGridSizeZ()
        {
            return (GridSizeYZ >> 16) & 0xffff;
        }

        public int UnpackBlockSizeX()
        {
            return (BlockSizeX >> 16) & 0xffff;
        }

        public int UnpackBlockSizeY()
        {
            return BlockSizeYZ & 0xffff;
        }

        public int UnpackBlockSizeZ()
        {
            return (BlockSizeYZ >> 16) & 0xffff;
        }

        public uint UnpackUniformBuffersEnableMask()
        {
            return (uint)UniformBuffersConfig & 0xff;
        }
    }
}