Esempio n. 1
0
        /// <summary>
        /// Disassembles HLSL shader bytecode.
        /// </summary>
        /// <param name="shader">The shader to disassemble.</param>
        /// <returns>The disassembled shader if successful, or <c>null</c> otherwise.</returns>
        public static unsafe string Disassemble(byte[] shader)
        {
            ID3DBlob blob = null;

            try
            {
                int result;

                fixed(byte *buffer = shader)
                result = D3DDisassemble((IntPtr)buffer, (uint)shader.Length, 0, null, out blob);

                if (result != S_OK || blob == null)
                {
                    return(null);
                }
                var textPtr = blob.GetBufferPointer();
                var text    = Marshal.PtrToStringAnsi(textPtr);
                return(text);
            }
            finally
            {
                if (blob != null)
                {
                    Marshal.ReleaseComObject(blob);
                }
            }
        }
Esempio n. 2
0
        static int D3DCompile_Hooked(IntPtr pSrcData,
                                     uint srcDataSize,
                                     String pSourceName,
                                     D3D_SHADER_MACRO[] pDefines,
                                     IntPtr pInclude,
                                     String pEntryPoint,
                                     String pTarget,
                                     uint flags1,
                                     uint flags2,
                                     out ID3DBlob ppCode,
                                     out ID3DBlob ppErrorMsgs)
        {
            try
            {
                Main This = (Main)HookRuntimeInfo.Callback;
                This.Interface.WriteConsole("D3DCompile_Hooked");
            }
            catch
            {
            }

            // call original API...
            return(D3DCompile(pSrcData,
                              srcDataSize,
                              pSourceName,
                              pDefines,
                              pInclude,
                              pEntryPoint,
                              pTarget,
                              flags1,
                              flags2,
                              out ppCode,
                              out ppErrorMsgs));
        }
Esempio n. 3
0
        /// <summary>
        /// Assembles HLSL shader assembly.
        /// </summary>
        /// <param name="code">The code to assemble.</param>
        /// <param name="errors">Pointer to a string to receive error messages. Will be set to <c>null</c> if errors are not available.</param>
        /// <returns>The bytecode for the shader if successful, or <c>null</c> otherwise.</returns>
        public static byte[] Assemble(string code, out string errors)
        {
            ID3DBlob codeBlob = null, errorBlob = null;

            errors = null;
            try
            {
                var result = D3DAssemble(code, (uint)code.Length, null, IntPtr.Zero, IntPtr.Zero, 0, out codeBlob, out errorBlob);
                if (result != S_OK || codeBlob == null)
                {
                    if (errorBlob == null)
                    {
                        return(null);
                    }
                    var errorPtr = errorBlob.GetBufferPointer();
                    errors = Marshal.PtrToStringAnsi(errorPtr);
                    return(null);
                }
                var bytes     = new byte[codeBlob.GetBufferSize()];
                var bufferPtr = codeBlob.GetBufferPointer();
                Marshal.Copy(bufferPtr, bytes, 0, bytes.Length);
                return(bytes);
            }
            finally
            {
                if (codeBlob != null)
                {
                    Marshal.ReleaseComObject(codeBlob);
                }
                if (errorBlob != null)
                {
                    Marshal.ReleaseComObject(errorBlob);
                }
            }
        }
Esempio n. 4
0
 private static extern int D3DDisassemble(
     IntPtr pSrcData,
     uint SrcDataSize,
     uint Flags,
     [MarshalAs(UnmanagedType.LPStr)] string szComments,
     out ID3DBlob ppDisassembly
     );
Esempio n. 5
0
        static HRESULT D3DCompileFromFile_Hooked(String pFileName,
                                                 D3D_SHADER_MACRO[] pDefines,
                                                 IntPtr pInclude,
                                                 String pEntrypoint,
                                                 String pTarget,
                                                 uint Flags1,
                                                 uint Flags2,
                                                 out ID3DBlob ppCode,
                                                 out ID3DBlob ppErrorMsgs)
        {
            try
            {
                Main This = (Main)HookRuntimeInfo.Callback;
                This.Interface.WriteConsole("D3DCompileFromFile_Hooked");
                Console.WriteLine("D3DCompileFromFile_Hooked writing from client side");
            }
            catch
            {
            }

            return(D3DCompileFromFile(pFileName,
                                      pDefines,
                                      pInclude,
                                      pEntrypoint,
                                      pTarget,
                                      Flags1,
                                      Flags2,
                                      out ppCode,
                                      out ppErrorMsgs));
        }
Esempio n. 6
0
 public extern static int D3DAssemble(
     [In] byte[] pSrcData,
     [In] UIntPtr SrcDataSize,
     [MarshalAs(UnmanagedType.LPStr)] string pSourceName,
     [In, Out] SHADER_MACRO[] pDefines,
     IntPtr pInclude,
     uint Flags,
     ref ID3DBlob ppCode,
     ref ID3DBlob ppErrorMsgs);
Esempio n. 7
0
 public extern static int D3DCompileFromFile(
     [MarshalAs(UnmanagedType.LPTStr)] string pFilename,
     [In, Out] SHADER_MACRO[] pDefines,
     IntPtr pInclude,
     [MarshalAs(UnmanagedType.LPStr)] string pEntrypoint,
     [MarshalAs(UnmanagedType.LPStr)] string pTarget,
     uint flags1,
     uint flags2,
     ref ID3DBlob ppCode,
     ref ID3DBlob ppErrorMsgs);
Esempio n. 8
0
 private static extern int D3DAssemble(
     [MarshalAs(UnmanagedType.LPStr)] string pSrcData,
     uint SrcDataSize,
     [MarshalAs(UnmanagedType.LPStr)] string pSourceName,
     IntPtr pDefines,
     IntPtr pInclude,
     uint Flags,
     out ID3DBlob ppCode,
     out ID3DBlob ppErrorMsgs
     );
Esempio n. 9
0
 public static extern HRESULT D3DCompileFromFile([MarshalAs(UnmanagedType.LPWStr), In] String pFileName,
                                                 [In, Optional, MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(D3D_SHADER_MACROMarshaler))]
                                                 D3D_SHADER_MACRO[] pDefines,
                                                 [In, Optional] IntPtr pInclude,
                                                 [MarshalAs(UnmanagedType.LPStr), In] String pEntrypoint,
                                                 [MarshalAs(UnmanagedType.LPStr), In] String pTarget,
                                                 [In] uint Flags1,
                                                 [In] uint Flags2,
                                                 [MarshalAs(UnmanagedType.Interface), Out] out ID3DBlob ppCode,
                                                 [MarshalAs(UnmanagedType.Interface), Out, Optional] out ID3DBlob ppErrorMsgs);
Esempio n. 10
0
        private static string ID3DBlobToString(ID3DBlob blob)
        {
            if (blob is null)
            {
                return("");
            }

            // yeah great 64-bit support there thanks MS
            return(Marshal.PtrToStringAnsi(blob.GetBufferPointer(), (int)blob.GetBufferSize()));
        }
Esempio n. 11
0
        public static string ID3DBlobToString(ID3DBlob blob)
        {
            if (blob == null)
            {
                return(string.Empty);
            }

            string str = Marshal.PtrToStringAnsi(blob.GetBufferPointer(), (int)blob.GetBufferSize());

            return(str);
        }
Esempio n. 12
0
 public extern static int D3DCompile(
     [In] byte[] pSrcData,
     [In] UIntPtr SrcDataSize,
     [MarshalAs(UnmanagedType.LPStr)] string pSourceName,
     [In, Out] SHADER_MACRO[] pDefines,
     IntPtr pInclude,
     [MarshalAs(UnmanagedType.LPStr)] string pEntrypoint,
     [MarshalAs(UnmanagedType.LPStr)] string pTarget,
     uint flags1,
     uint flags2,
     ref ID3DBlob ppCode,
     ref ID3DBlob ppErrorMsgs);
Esempio n. 13
0
 public static extern int D3DCompile([In] IntPtr pSrcData,
                                     [In] uint srcDataSize,
                                     [MarshalAs(UnmanagedType.LPStr), In, Optional] String pSourceName,
                                     [In, Optional, MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(D3D_SHADER_MACROMarshaler))]
                                     D3D_SHADER_MACRO[] pDefines,
                                     [In, Optional] IntPtr pInclude,
                                     [MarshalAs(UnmanagedType.LPStr), In] String pEntryPoint,
                                     [MarshalAs(UnmanagedType.LPStr), In] String pTarget,
                                     [In] uint flags1,
                                     [In] uint flags2,
                                     [MarshalAs(UnmanagedType.Interface), Out] out ID3DBlob ppCode,
                                     [MarshalAs(UnmanagedType.Interface), Out, Optional] out ID3DBlob ppErrorMsgs);
        public static string ID3DBlobToString(ID3DBlob blob)
        {
            if (blob == null)
            {
                return string.Empty;
            }

            string str = Marshal.PtrToStringAnsi(blob.GetBufferPointer(), (int) blob.GetBufferSize());

            return str;
        }
        static int D3DCompile_Hooked(IntPtr pSrcData,
                                     uint srcDataSize,
                                     String pSourceName,
                                     D3D_SHADER_MACRO[] pDefines,
                                     IntPtr pInclude,
                                     String pEntryPoint,
                                     String pTarget,
                                     uint flags1,
                                     uint flags2,
                                     out ID3DBlob ppCode,
                                     out ID3DBlob ppErrorMsgs)
        {
            try
            {
                Main This = (Main)HookRuntimeInfo.Callback;
                This.Interface.WriteConsole("D3DCompile_Hooked");
            }
            catch
            {
            }

            // call original API...
            return D3DCompile(pSrcData,
                              srcDataSize,
                              pSourceName,
                              pDefines,
                              pInclude,
                              pEntryPoint,
                              pTarget,
                              flags1,
                              flags2,
                              out ppCode,
                              out ppErrorMsgs);
        }
Esempio n. 16
0
 public Blob(ID3DBlob blob)
 {
     _blob  = blob ?? throw new ArgumentNullException(nameof(blob));
     Size   = blob.GetBufferSize();
     Buffer = blob.GetBufferPointer();
 }
Esempio n. 17
0
        static void Main()
        {
            ReferenceTracker.TrackReferences = true;
            Form form = new Form();

            IDXGIFactory factory = DXGI.CreateFactory();
            IDXGIAdapter adapter = null;

            factory.EnumAdapters(0, out adapter);

            DXGI_SWAP_CHAIN_DESC swapChainDescription = new DXGI_SWAP_CHAIN_DESC
            {
                BufferCount = 1,
                BufferDesc  = new DXGI_MODE_DESC
                {
                    Format      = DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM,
                    Height      = form.ClientSize.Height,
                    RefreshRate = new DXGI_RATIONAL
                    {
                        Denominator = 1,
                        Numerator   = 60
                    },

                    Scaling          = DXGI_MODE_SCALING.DXGI_MODE_SCALING_UNSPECIFIED,
                    ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER.DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
                    Width            = form.ClientSize.Width
                },
                BufferUsage  = (int)DXGI_USAGE.DXGI_USAGE_RENDER_TARGET_OUTPUT,
                Flags        = 0,
                OutputWindow = form.Handle,
                SampleDesc   = new DXGI_SAMPLE_DESC
                {
                    Count   = 1,
                    Quality = 0
                },
                SwapEffect = DXGI_SWAP_EFFECT.DXGI_SWAP_EFFECT_DISCARD,
                Windowed   = true
            };

            ID3D11Device   device    = SlimDX.Direct3D11.Direct3D11.CreateDevice(adapter);
            IDXGISwapChain swapChain = null;

            factory.CreateSwapChain(device, swapChainDescription, out swapChain);

            ID3D11Texture2D        backbuffer = swapChain.GetBuffer <ID3D11Texture2D>(0);
            ID3D11RenderTargetView view       = null;

            device.CreateRenderTargetView(backbuffer, null, out view);

            ID3DBlob vertexShaderBytecode = ShaderCompiler.CompileFromString(File.ReadAllText("MiniTri11.fx"), "MiniTri11.fx", "VS", "vs_4_0");
            ID3DBlob pixelShaderBytecode  = ShaderCompiler.CompileFromString(File.ReadAllText("MiniTri11.fx"), "MiniTri11.fx", "PS", "ps_4_0");

            D3D11_INPUT_ELEMENT_DESC[] inputElements = new[] {
                new D3D11_INPUT_ELEMENT_DESC {
                    SemanticName = "POSITION", AlignedByteOffset = 0, SemanticIndex = 0, Format = DXGI_FORMAT.DXGI_FORMAT_R32G32B32A32_FLOAT, InstanceDataStepRate = 0, InputSlot = 0, InputSlotClass = D3D11_INPUT_CLASSIFICATION.D3D11_INPUT_PER_VERTEX_DATA
                },
                new D3D11_INPUT_ELEMENT_DESC {
                    SemanticName = "COLOR", AlignedByteOffset = 16, SemanticIndex = 0, Format = DXGI_FORMAT.DXGI_FORMAT_R32G32B32A32_FLOAT, InstanceDataStepRate = 0, InputSlot = 0, InputSlotClass = D3D11_INPUT_CLASSIFICATION.D3D11_INPUT_PER_VERTEX_DATA
                }
            };

            ID3DBlob inputSignature;

            ShaderCompiler.D3DGetInputSignatureBlob(vertexShaderBytecode.GetBufferPointer(), vertexShaderBytecode.GetBufferSize(), out inputSignature);
            ID3D11InputLayout inputLayout;

            device.CreateInputLayout(inputElements, inputElements.Length, inputSignature.GetBufferPointer(), inputSignature.GetBufferSize(), out inputLayout);

            ByteBuffer vertexData = new ByteBuffer(3 * 32);

            vertexData.Write(0 * Vector4.SizeInBytes, new Vector4(0.0f, 0.5f, 0.5f, 1.0f));
            vertexData.Write(1 * Vector4.SizeInBytes, new Vector4(1.0f, 0.0f, 0.0f, 1.0f));
            vertexData.Write(2 * Vector4.SizeInBytes, new Vector4(0.5f, -0.5f, 0.5f, 1.0f));
            vertexData.Write(3 * Vector4.SizeInBytes, new Vector4(0.0f, 1.0f, 0.0f, 1.0f));
            vertexData.Write(4 * Vector4.SizeInBytes, new Vector4(-0.5f, -0.5f, 0.5f, 1.0f));
            vertexData.Write(5 * Vector4.SizeInBytes, new Vector4(0.0f, 0.0f, 1.0f, 1.0f));

            D3D11_BUFFER_DESC vertexBufferDescription = new D3D11_BUFFER_DESC
            {
                BindFlags           = 1,      //vertex buffer
                ByteWidth           = 3 * 32,
                CPUAccessFlags      = 0,
                MiscFlags           = 0,
                Usage               = D3D11_USAGE.D3D11_USAGE_DEFAULT,
                StructureByteStride = 0
            };
            ID3D11Buffer           vertexBuffer;
            D3D11_SUBRESOURCE_DATA srd = new D3D11_SUBRESOURCE_DATA
            {
                pSysMem          = vertexData.Pin(),
                SysMemPitch      = 0,
                SysMemSlicePitch = 0
            };

            device.CreateBuffer(vertexBufferDescription, srd, out vertexBuffer);
            vertexData.Unpin();

            RenderLoop          loop    = new RenderLoop();
            ID3D11DeviceContext context = null;

            device.GetImmediateContext(out context);

            ID3D11VertexShader vertexShader;
            ID3D11PixelShader  pixelShader;

            device.CreateVertexShader(vertexShaderBytecode.GetBufferPointer(), vertexShaderBytecode.GetBufferSize(), null, out vertexShader);
            device.CreatePixelShader(pixelShaderBytecode.GetBufferPointer(), pixelShaderBytecode.GetBufferSize(), null, out pixelShader);
            context.IASetInputLayout(inputLayout);
            context.VSSetShader(vertexShader, null, 0);
            context.PSSetShader(pixelShader, null, 0);
            context.IASetPrimitiveTopology(4);            //triangle list
            context.IASetVertexBuffers(0, 1, new ID3D11Buffer[] { vertexBuffer }, new int[] { 32 }, new int[] { 0 });
            context.OMSetRenderTargets(1, new ID3D11RenderTargetView[] { view }, IntPtr.Zero);

            D3D11_VIEWPORT vp = new D3D11_VIEWPORT {
                Height   = form.ClientSize.Height,
                Width    = form.ClientSize.Width,
                TopLeftX = 0,
                TopLeftY = 0,
                MinDepth = 0.0f,
                MaxDepth = 1.0f
            };

            context.RSSetViewports(1, new D3D11_VIEWPORT [] { vp });

            loop.Run(form, () =>
            {
                var clearColor = new SlimDX.Color4 {
                    R = 0.0f, G = 0.0f, B = 0.0f, A = 1.0f
                };
                context.ClearRenderTargetView(view, clearColor);
                context.Draw(3, 0);
                swapChain.Present(0, 0);
            });

            view.ReleaseReference();
            backbuffer.ReleaseReference();
            swapChain.ReleaseReference();
            device.ReleaseReference();
            adapter.ReleaseReference();
            factory.ReleaseReference();
        }
Esempio n. 18
0
 private static extern int D3DDisassemble(
     IntPtr pSrcData,
     uint SrcDataSize,
     uint Flags,
     [MarshalAs(UnmanagedType.LPStr)] string szComments,
     out ID3DBlob ppDisassembly
 );
Esempio n. 19
0
 private static extern int D3DAssemble(
     [MarshalAs(UnmanagedType.LPStr)] string pSrcData,
     uint SrcDataSize,
     [MarshalAs(UnmanagedType.LPStr)] string pSourceName,
     IntPtr pDefines,
     IntPtr pInclude,
     uint Flags,
     out ID3DBlob ppCode,
     out ID3DBlob ppErrorMsgs
 );
Esempio n. 20
0
 private extern static int D3DDisassemble(IntPtr pSrcData,
                                          UIntPtr SrcDataSize,
                                          uint Flags,
                                          [MarshalAs(UnmanagedType.LPStr)] string szComments,
                                          [MarshalAs(UnmanagedType.Interface), Out] out ID3DBlob Disassembly);
        static HRESULT D3DCompileFromFile_Hooked(String pFileName,
                                                 D3D_SHADER_MACRO[] pDefines,
                                                 IntPtr pInclude,
                                                 String pEntrypoint,
                                                 String pTarget,
                                                 uint Flags1,
                                                 uint Flags2,
                                                 out ID3DBlob ppCode,
                                                 out ID3DBlob ppErrorMsgs)
        {
            try
            {
                Main This = (Main)HookRuntimeInfo.Callback;
                This.Interface.WriteConsole("D3DCompileFromFile_Hooked");
                Console.WriteLine("D3DCompileFromFile_Hooked writing from client side");
            }
            catch
            {
            }

            return D3DCompileFromFile(pFileName,
                                      pDefines,
                                      pInclude,
                                      pEntrypoint,
                                      pTarget,
                                      Flags1,
                                      Flags2,
                                      out ppCode,
                                      out ppErrorMsgs);
        }
Esempio n. 22
0
 public extern static int D3DDisassemble(
     [In] byte[] pSrcData,
     [In] UIntPtr SrcDataSize,
     uint flags,
     [MarshalAs(UnmanagedType.LPStr)] string szComments,
     ref ID3DBlob ppDisassembly);