TString UniformHLSL::uniformBlockString(const TInterfaceBlock &interfaceBlock, unsigned int registerIndex, unsigned int arrayIndex) { const TString &arrayIndexString = (arrayIndex != GL_INVALID_INDEX ? Decorate(str(arrayIndex)) : ""); const TString &blockName = interfaceBlock.name() + arrayIndexString; TString hlsl; hlsl += "cbuffer " + blockName + " : register(b" + str(registerIndex) + ")\n" "{\n"; if (interfaceBlock.hasInstanceName()) { hlsl += " " + InterfaceBlockStructName(interfaceBlock) + " " + uniformBlockInstanceString(interfaceBlock, arrayIndex) + ";\n"; } else { const TLayoutBlockStorage blockStorage = interfaceBlock.blockStorage(); hlsl += uniformBlockMembersString(interfaceBlock, blockStorage); } hlsl += "};\n\n"; return hlsl; }
TString UniformHLSL::interfaceBlockStructString(const TInterfaceBlock &interfaceBlock) { const TLayoutBlockStorage blockStorage = interfaceBlock.blockStorage(); return "struct " + InterfaceBlockStructName(interfaceBlock) + "\n" "{\n" + interfaceBlockMembersString(interfaceBlock, blockStorage) + "};\n\n"; }