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; }
static TString InterfaceBlockFieldName(const TInterfaceBlock &interfaceBlock, const TField &field) { if (interfaceBlock.hasInstanceName()) { return interfaceBlock.name() + "." + field.name(); } else { return field.name(); } }
static TString InterfaceBlockStructName(const TInterfaceBlock &interfaceBlock) { return DecoratePrivate(interfaceBlock.name()) + "_type"; }