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); }
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; }
public uint Size() { var majorVersion = DXShaderObjectExporter.GetMajorVersion(programType); return(majorVersion >= 5 ? (uint)36 : (uint)16); }