public void UpdateWave(float dt) { _wavet += dt; if (!(_wavet >= _waveTimeStep)) { return; } CloseCurrentBuffer(); _waveSwapChain.Swap(); while (_wavet > _waveTimeStep) { _wavet -= _waveTimeStep; } ImmediateContext.ComputeShader.Set(_compShader); ImmediateContext.ComputeShader.SetConstantBuffer(0, _wavesCBBuffer); ImmediateContext.ComputeShader.SetShaderResources(0, _waveSwapChain.PastSolution); ImmediateContext.ComputeShader.SetUnorderedAccessView(0, _waveSwapChain.CurrentSolution); ImmediateContext.Dispatch((int)_wavesCB.ColumnCount / BLOCK_SIZE + 1, (int)_wavesCB.RowCount / BLOCK_SIZE + 1, 1); ImmediateContext.ComputeShader.SetUnorderedAccessView(0, null); ImmediateContext.ComputeShader.SetShaderResource(0, null); ImmediateContext.ComputeShader.Set(null); }
public void Dispatch(int x, int y, int z = 1) { // test agains feature level 11.0 specs Debug.Assert(x <= DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION); Debug.Assert(y <= DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION); Debug.Assert(z <= DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION); context.Dispatch(x, y, z); }
/// <summary> /// スキニングを実行する。 /// </summary> /// <param name="d3ddc"> /// 実行対象のDeviceContext。 /// </param> /// <param name="入力頂点数"> /// モデルの全頂点数。 /// </param> /// <param name="ボーンのモデルポーズ行列定数バッファ"> /// ボーンのモデルポーズ行列の配列を格納された定数バッファ。 /// 構造については <see cref="PMXモデル.D3DBoneTrans"/> 参照。 /// </param> /// <param name="ボーンのローカル位置定数バッファ"> /// ボーンのローカル位置の配列が格納された定数バッファ。 /// 構造については <see cref="PMXモデル.D3DBoneLocalPosition"/> 参照。 /// </param> /// <param name="ボーンの回転行列定数バッファ"> /// ボーンの回転行列の配列が格納された定数バッファ。 /// 構造については <see cref="PMXモデル.D3DBoneLocalPosition"/> 参照。 /// </param> /// <param name="変形前頂点データSRV"> /// スキニングの入力となる頂点データリソースのSRV。 /// 構造については <see cref="CS_INPUT"/> 参照。 /// </param> /// <param name="変形後頂点データUAV"> /// スキニングの出力を書き込む頂点データリソースのUAV。 /// 構造については <see cref="VS_INPUT"/> 参照。 /// </param> /// <remarks> /// このメソッドの呼び出し時には、<paramref name="d3ddc"/> には事前に以下のように設定される。 /// ComputeShader /// - slot( b1 ) …… <paramref name="ボーンのモデルポーズ行列定数バッファ"/> /// - slot( b2 ) …… <paramref name="ボーンのローカル位置定数バッファ"/> /// - slot( b3 ) …… <paramref name="ボーンの回転行列定数バッファ"/> /// - slot( t0 ) …… <paramref name="変形前頂点データSRV"/> /// - slot( u0 ) …… <paramref name="変形後頂点データUAV"/> /// </remarks> public void Run( SharpDX.Direct3D11.DeviceContext d3ddc, int 入力頂点数, SharpDX.Direct3D11.Buffer ボーンのモデルポーズ行列定数バッファ, SharpDX.Direct3D11.Buffer ボーンのローカル位置定数バッファ, SharpDX.Direct3D11.Buffer ボーンの回転行列定数バッファ, SharpDX.Direct3D11.ShaderResourceView 形前頂点データSRV, SharpDX.Direct3D11.UnorderedAccessView 形後頂点データUAV) { d3ddc.ComputeShader.Set(this.ComputeShader); d3ddc.Dispatch((入力頂点数 / 64) + 1, 1, 1); // 既定のシェーダー(DefaultSkinningComputeShader.hlsl)に合わせてある }
internal void Dispatch(int threadGroupCountX, int threadGroupCountY, int threadGroupCountZ) { m_deviceContext.Dispatch(threadGroupCountX, threadGroupCountY, threadGroupCountZ); m_statistics.Dispatches++; CheckErrors(); }
public void Dispatch(int x, int y, int z = 1) { context.Dispatch(x, y, z); }