2#include <c3d/uniforms.h>
17} C3Di_ShaderFVecData[2];
19static bool C3Di_FVUnifEverDirty[2][C3D_FVUNIF_COUNT];
20static bool C3Di_IVUnifEverDirty[2][C3D_IVUNIF_COUNT];
24 int offset = type == GPU_GEOMETRY_SHADER ? (GPUREG_GSH_BOOLUNIFORM-GPUREG_VSH_BOOLUNIFORM) : 0;
28 if (C3Di_ShaderFVecData[type].
dirty)
30 while (i < C3Di_ShaderFVecData[type].
count)
32 float24Uniform_s* u = &C3Di_ShaderFVecData[type].data[i++];
33 GPUCMD_AddIncrementalWrites(GPUREG_VSH_FLOATUNIFORM_CONFIG+offset, (u32*)u, 4);
36 C3Di_ShaderFVecData[type].dirty =
false;
41 while (i < C3D_FVUNIF_COUNT)
54 GPUCMD_AddWrite(GPUREG_VSH_FLOATUNIFORM_CONFIG+offset, 0x80000000|i);
55 GPUCMD_AddWrites(GPUREG_VSH_FLOATUNIFORM_DATA+offset, (u32*)&
C3D_FVUnif[type][i], (j-i)*4);
59 for (k = i; k < j; k ++)
62 C3Di_FVUnifEverDirty[type][k] =
true;
70 for (i = 0; i < C3D_IVUNIF_COUNT; i ++)
74 GPUCMD_AddWrite(GPUREG_VSH_INTUNIFORM_I0+offset+i,
C3D_IVUnif[type][i]);
76 C3Di_IVUnifEverDirty[type][i] =
false;
82 GPUCMD_AddWrite(GPUREG_VSH_BOOLUNIFORM+offset, 0x7FFF0000 |
C3D_BoolUnifs[type]);
91 if (C3Di_ShaderFVecData[type].
count)
92 C3Di_ShaderFVecData[type].dirty =
true;
93 for (i = 0; i < C3D_FVUNIF_COUNT; i ++)
95 for (i = 0; i < C3D_IVUNIF_COUNT; i ++)
101 GPU_SHADER_TYPE type = si->dvle->type;
102 if (si->boolUniformMask)
108 if (type == GPU_GEOMETRY_SHADER)
112 if (si->intUniformMask)
115 for (i = 0; i < 4; i ++)
117 if (si->intUniformMask & BIT(i))
124 C3Di_ShaderFVecData[type].dirty =
true;
125 C3Di_ShaderFVecData[type].count = si->numFloat24Uniforms;
126 C3Di_ShaderFVecData[type].data = si->float24Uniforms;
131 C3Di_ShaderFVecData[type].dirty =
false;
132 C3Di_ShaderFVecData[type].count = 0;
133 C3Di_ShaderFVecData[type].data = NULL;