private d3dx_state CreateShader(TwoMGFX.ShaderInfo shaderInfo, string shaderFunction, string shaderProfile, bool isVertexShader) { // Compile the shader. SharpDX.D3DCompiler.ShaderBytecode shaderByteCode; try { SharpDX.D3DCompiler.ShaderFlags shaderFlags = 0; // While we never allow preshaders, this flag is invalid for // the DX11 shader compiler which doesn't allow preshaders // in the first place. //shaderFlags |= SharpDX.D3DCompiler.ShaderFlags.NoPreshader; if (shaderInfo.DX11Profile) { shaderFlags |= SharpDX.D3DCompiler.ShaderFlags.EnableBackwardsCompatibility; } if (shaderInfo.Debug) { shaderFlags |= SharpDX.D3DCompiler.ShaderFlags.SkipOptimization; shaderFlags |= SharpDX.D3DCompiler.ShaderFlags.Debug; } else { shaderFlags |= SharpDX.D3DCompiler.ShaderFlags.OptimizationLevel3; } // Compile the shader into bytecode. var result = SharpDX.D3DCompiler.ShaderBytecode.Compile( shaderInfo.fileContent, shaderFunction, shaderProfile, shaderFlags, 0, null, null, shaderInfo.fileName); if (result.HasErrors) { throw new Exception(result.Message); } shaderByteCode = result.Bytecode; //var source = shaderByteCode.Disassemble(); } catch (Exception ex) { throw ex; } // Get a copy of the shader bytecode. var bytecode = shaderByteCode.Data.ToArray(); // First look to see if we already created this same shader. DXShaderData dxShader = null; foreach (var shader in Shaders) { if (bytecode.SequenceEqual(shader.Bytecode)) { dxShader = shader; break; } } // Create a new shader. if (dxShader == null) { if (shaderInfo.DX11Profile) { dxShader = DXShaderData.CreateHLSL(bytecode, isVertexShader, ConstantBuffers, Shaders.Count, shaderInfo.Debug); } else { dxShader = DXShaderData.CreateGLSL(bytecode, ConstantBuffers, Shaders.Count); } Shaders.Add(dxShader); } //var assmbly = desc.Bytecode.Disassemble(); //var buffer = reflection.GetConstantBuffer(0); var state = new d3dx_state(); state.index = 0; state.type = STATE_TYPE.CONSTANT; state.operation = isVertexShader ? (uint)146 : (uint)147; state.parameter = new d3dx_parameter(); state.parameter.name = string.Empty; state.parameter.semantic = string.Empty; state.parameter.class_ = D3DXPARAMETER_CLASS.OBJECT; state.parameter.type = isVertexShader ? D3DXPARAMETER_TYPE.VERTEXSHADER : D3DXPARAMETER_TYPE.PIXELSHADER; state.parameter.rows = 0; state.parameter.columns = 0; state.parameter.data = dxShader.SharedIndex; return(state); }