示例#1
0
        public override void Export(ShaderWriter writer, ref ShaderSubProgram subProgram)
        {
            byte[] exportData       = subProgram.ProgramData;
            int    dataOffset       = DXShaderProgramRestorer.GetDataOffset(writer.Version, m_graphicApi, subProgram);
            int    dataLength       = exportData.Length - dataOffset;
            IntPtr unmanagedPointer = Marshal.AllocHGlobal(dataLength);

            Marshal.Copy(exportData, dataOffset, unmanagedPointer, dataLength);

            D3DCompiler.D3DCompiler.D3DDisassemble(unmanagedPointer, (uint)dataLength, 0, null, out IDxcBlob disassembly);
            string disassemblyText = GetStringFromBlob(disassembly);

            ExportListing(writer, disassemblyText);

            Marshal.FreeHGlobal(unmanagedPointer);
        }
        public override void DoExport(string filePath, uTinyRipper.Version version, ref ShaderSubProgram subProgram)
        {
            byte[] exportData       = subProgram.ProgramData;
            int    dataOffset       = DXShaderProgramRestorer.GetDataOffset(version, m_graphicApi, subProgram);
            int    dataLength       = exportData.Length - dataOffset;
            IntPtr unmanagedPointer = Marshal.AllocHGlobal(dataLength);

            Marshal.Copy(exportData, dataOffset, unmanagedPointer, dataLength);

            var parameters = new object[] { unmanagedPointer, (uint)dataLength, (uint)0, null, null };

            dissassembleMethod.Invoke(null, parameters);
            IDxcBlob disassembly     = (IDxcBlob)parameters[4];
            string   disassemblyText = GetStringFromBlob(disassembly);

            File.WriteAllText(filePath, disassemblyText);
            Marshal.FreeHGlobal(unmanagedPointer);
        }
示例#3
0
        public override void Export(ShaderWriter writer, ref ShaderSubProgram subProgram)
        {
            byte[] exportData       = DXShaderProgramRestorer.RestoreProgramData(writer.Version, m_graphicApi, subProgram);
            WrappedGlExtensions ext = new WrappedGlExtensions();

            ext.ARB_explicit_attrib_location  = 1;
            ext.ARB_explicit_uniform_location = 1;
            ext.ARB_shading_language_420pack  = 0;
            ext.OVR_multiview = 0;
            ext.EXT_shader_framebuffer_fetch = 0;
            Shader shader = Shader.TranslateFromMem(exportData, WrappedGLLang.LANG_DEFAULT, ext);

            if (shader.OK == 0)
            {
                base.Export(writer, ref subProgram);
            }
            else
            {
                ExportListing(writer, shader.Text);
            }
        }
        public override void DoExport(string filePath, uTinyRipper.Version version, ref ShaderSubProgram subProgram)
        {
            byte[] exportData       = DXShaderProgramRestorer.RestoreProgramData(version, m_graphicApi, subProgram);
            WrappedGlExtensions ext = new WrappedGlExtensions();

            ext.ARB_explicit_attrib_location  = 1;
            ext.ARB_explicit_uniform_location = 1;
            ext.ARB_shading_language_420pack  = 0;
            ext.OVR_multiview = 0;
            ext.EXT_shader_framebuffer_fetch = 0;
            Shader shader = Shader.TranslateFromMem(exportData, m_GLLang, ext);

            if (shader.OK == 0)
            {
                throw new Exception($"Error {shader.OK}");
            }
            else
            {
                File.WriteAllText(filePath, shader.Text);
            }
        }
示例#5
0
        public override void Export(ShaderWriter writer, ref ShaderSubProgram subProgram)
        {
            using (MemoryStream stream = new MemoryStream(subProgram.ProgramData))
            {
                using (BinaryReader reader = new BinaryReader(stream))
                {
                    DXDataHeader header = new DXDataHeader();
                    header.Read(reader, writer.Version);

                    // HACK: since we can't restore UAV info and HLSLcc requires it, process such shader with default exporter
                    if (header.UAVs > 0)
                    {
                        base.Export(writer, ref subProgram);
                    }
                    else
                    {
                        byte[] exportData       = DXShaderProgramRestorer.RestoreProgramData(reader, writer.Version, ref subProgram);
                        WrappedGlExtensions ext = new WrappedGlExtensions();
                        ext.ARB_explicit_attrib_location  = 1;
                        ext.ARB_explicit_uniform_location = 1;
                        ext.ARB_shading_language_420pack  = 0;
                        ext.OVR_multiview = 0;
                        ext.EXT_shader_framebuffer_fetch = 0;
                        Shader shader = Shader.TranslateFromMem(exportData, WrappedGLLang.LANG_DEFAULT, ext);
                        if (shader.OK == 0)
                        {
                            base.Export(writer, ref subProgram);
                        }
                        else
                        {
                            ExportListing(writer, shader.Text);
                        }
                    }
                }
            }
        }