コード例 #1
0
        public ResourceChunk(ShaderSubProgram shaderSubprogram)
        {
            majorVersion          = (byte)DXShaderObjectExporter.GetMajorVersion(shaderSubprogram.ProgramType);
            resourceBindingOffset = majorVersion >= 5 ? (uint)60 : (uint)28;
            resourceBindings      = new ResourceBindingChunk(shaderSubprogram, resourceBindingOffset, NameLookup);
            constantBufferOffset  = resourceBindingOffset + resourceBindings.Size;
            constantBuffers       = new ConstantBufferChunk(shaderSubprogram, constantBufferOffset, NameLookup);
            creatorStringOffset   = constantBufferOffset + constantBuffers.Size;
            creatorString         = "uTinyRipper";
            chunkSize             = creatorStringOffset + (uint)creatorString.Length + 1;

            programType = DXShaderObjectExporter.GetDXProgramType(shaderSubprogram.ProgramType);
        }
コード例 #2
0
        public VariableChunk(ConstantBuffer constantBuffer, int constantBufferIndex, uint variableOffset, ShaderGpuProgramType programType)
        {
            const int memberSize = 12;

            this.constantBuffer      = constantBuffer;
            this.constantBufferIndex = constantBufferIndex;
            this.programType         = programType;
            this.variables           = BuildVariables(constantBuffer);

            majorVersion = DXShaderObjectExporter.GetMajorVersion(programType);
            uint variableSize  = majorVersion >= 5 ? (uint)40 : (uint)24;
            uint variableCount = (uint)variables.Count;
            uint dataOffset    = variableOffset + variableCount * variableSize;

            foreach (var variable in variables)
            {
                variableNameLookup[variable.Name] = dataOffset;
                var header = new VariableHeader();
                header.nameOffset  = dataOffset;
                dataOffset        += (uint)variable.Name.Length + 1;
                header.startOffset = (uint)variable.Index;
                header.variable    = variable;

                typeLookup[variable.ShaderType] = dataOffset;
                dataOffset += variable.ShaderType.Size();

                variable.ShaderType.MemberOffset = variable.ShaderType.members.Count > 0 ? dataOffset : 0;
                dataOffset += (uint)variable.ShaderType.members.Count * memberSize;

                foreach (var member in variable.ShaderType.members)
                {
                    variableNameLookup[member.Name] = dataOffset;
                    dataOffset += (uint)member.Name.Length + 1;

                    typeLookup[member.ShaderType] = dataOffset;
                    dataOffset += member.ShaderType.Size();
                }

                variableHeaders.Add(header);
            }
            size = dataOffset - variableOffset;
        }
コード例 #3
0
        public uint Size()
        {
            var majorVersion = DXShaderObjectExporter.GetMajorVersion(programType);

            return(majorVersion >= 5 ? (uint)36 : (uint)16);
        }