   Found a method to use more than 200 matrix in HLSL
  In VS2.0, the const variable max count is 256, so only could have less than 64 bone matrix,I have a model have 222 bones, and have 193 bone to be update every frame, so, In HLSL, I have to build a matix with 193 count,BUT, it's no supportmy HLSL code like:float4x4 g_mWorldViewProjectionfloat4x4 g_matWorldMatrixArray[200] : WORLDMATRIXARRAY;   
  The post title implies that you already have the solution, but I assume it is just a bad translation :)Anyway, you should split your skinned mesh so that each resulting mesh has less than or equal amount of bone matrix references as compared to your target's maximum amount. Also, I recommend evaluating whether you actually need so much distinct bones, and whether or not you can combine bone influences to save computations.[Edited by - Nik02 on May 16, 2010 6:11:34 AM];  I have not found the method yet ^L^If just use HLSL,but not use Effect (for example, use vertexfragment), then could use more than 256 float4 variables ?The method you told need I do more works[Edited by - mdnullwho on May 16, 2010 7:47:08 PM];  How about making 2 arrays, each 64 length.float4x4 g_matWorldMatrixArray1[64] : WORLDMATRIXARRAY;float4x4 g_matWorldMatrixArray2[64] : WORLDMATRIXARRAY;And on CPU you would set those two uniforms.In HLSL you would index like thisfloat4x4 matrix;if (vinput.Index<64)   matrix = g_matWorldMatrixArray1[vinput.Index];else   matrix = g_matWorldMatrixArray2[vinput.Index-64];;Quote:Original post by JohnnyCodeHow about making 2 arrays, each 64 length.float4x4 g_matWorldMatrixArray1[64] : WORLDMATRIXARRAY;float4x4 g_matWorldMatrixArray2[64] : WORLDMATRIXARRAY;And on CPU you would set those two uniforms.In HLSL you would index like thisfloat4x4 matrix;if (vinput.Index<64)   matrix = g_matWorldMatrixArray1[vinput.Index];else   matrix = g_matWorldMatrixArray2[vinput.Index-64];The total constant register count is 64*2=128, exceeded 256/4,This method could work ? I'm not familiar with HLSL;Quote:Original post by mdnullwhoIn VS2.0, the const variable max count is 256You can't break this limit. There's only a certain number of registers present on a SM2.0 card. You cant have more data than there is space to store the data.However, the solution to this problem has already been posted:Quote:Original post by Nik02you should split your skinned mesh so that each resulting mesh has less than or equal amount of bone matrix references as compared to your target's maximum amount.Cut your mesh up into multiple different pieces (e.g. cut it into parts of 64 bones each).   ;  I consist to use HLSL write vertex bone transform, whatever do the calculation in GPU or CPUIf I CreateDevice use D3DCREATE_SOFTWARE_VERTEXPROCESSING anduse Effect fx with "float4x4 g_maxtrix[200]", then the calcualtion be happened in CPU(not in the GPU)? Is this method could work?   ;  Software vertex processing would work, as vs_2_sw and vs_3_sw profiles support 8192 constant registers.Note that software processing obviously shifts the workload from GPU to CPU. This can cause a significant performance hit if you already work the CPU to its full capacity. In contrast, the mesh splitting technique has to be done only once per object per application run, not per frame.Also, if you're going to use software shaders, I recommend using the "mixed" vertex processing option so you can switch between GPU and CPU processing at will.   