@@ -144,7 +144,7 @@ static void ComputeFlagsBasedOnArgs(ArrayRef<std::wstring> args, std::vector<std
144144 }
145145}
146146
147- struct DxcPdbVersionInfo : public IDxcVersionInfo2 {
147+ struct DxcPdbVersionInfo : public IDxcVersionInfo3 {
148148private:
149149 DXC_MICROCOM_TM_REF_FIELDS ()
150150
@@ -156,9 +156,22 @@ struct DxcPdbVersionInfo : public IDxcVersionInfo2 {
156156
157157 hlsl::DxilCompilerVersion m_Version = {};
158158 std::string m_VersionCommitSha = {};
159+ std::string m_VersionString = {};
160+
161+ static HRESULT CopyStringToOutStringPtr (const std::string &Str, _Out_ char **ppOutString) {
162+ *ppOutString = nullptr ;
163+ char *const pString = (char *)CoTaskMemAlloc (Str.size () + 1 );
164+ if (pString == nullptr )
165+ return E_OUTOFMEMORY;
166+ std::memcpy (pString, Str.data (), Str.size ());
167+ pString[Str.size ()] = 0 ;
168+
169+ *ppOutString = pString;
170+ return S_OK;
171+ }
159172
160173 HRESULT STDMETHODCALLTYPE QueryInterface (REFIID iid, void **ppvObject) override {
161- return DoBasicQueryInterface<IDxcVersionInfo, IDxcVersionInfo2>(this , iid, ppvObject);
174+ return DoBasicQueryInterface<IDxcVersionInfo, IDxcVersionInfo2, IDxcVersionInfo3 >(this , iid, ppvObject);
162175 }
163176
164177 virtual HRESULT STDMETHODCALLTYPE GetVersion (_Out_ UINT32 *pMajor, _Out_ UINT32 *pMinor) override {
@@ -175,23 +188,22 @@ struct DxcPdbVersionInfo : public IDxcVersionInfo2 {
175188 return S_OK;
176189 }
177190
178- virtual HRESULT STDMETHODCALLTYPE GetCommitInfo (_Out_ UINT32 *pCommitCount, _Out_ char **pCommitHash) {
191+ virtual HRESULT STDMETHODCALLTYPE GetCommitInfo (_Out_ UINT32 *pCommitCount, _Outptr_result_z_ char **pCommitHash) {
179192 if (!pCommitHash)
180193 return E_POINTER;
181194
182- *pCommitHash = nullptr ;
183-
184- char *const hash = (char *)CoTaskMemAlloc (m_VersionCommitSha.size () + 1 );
185- if (hash == nullptr )
186- return E_OUTOFMEMORY;
187- std::memcpy (hash, m_VersionCommitSha.data (), m_VersionCommitSha.size ());
188- hash[m_VersionCommitSha.size ()] = 0 ;
189-
190- *pCommitHash = hash;
195+ IFR (CopyStringToOutStringPtr (m_VersionCommitSha, pCommitHash));
191196 *pCommitCount = m_Version.CommitCount ;
192197
193198 return S_OK;
194199 }
200+
201+ virtual HRESULT STDMETHODCALLTYPE GetCustomVersionString (_Outptr_result_z_ char **pVersionString) {
202+ if (!pVersionString)
203+ return E_POINTER;
204+ IFR (CopyStringToOutStringPtr (m_VersionString, pVersionString));
205+ return S_OK;
206+ }
195207};
196208
197209struct PdbRecompilerIncludeHandler : public IDxcIncludeHandler {
@@ -861,6 +873,7 @@ struct DxcPdbUtils : public IDxcPdbUtils, public IDxcPixDxilDebugInfoFactory
861873 }
862874 result->m_Version = m_VersionInfo;
863875 result->m_VersionCommitSha = m_VersionCommitSha;
876+ result->m_VersionString = m_VersionString;
864877 *ppVersionInfo = result.Detach ();
865878 return S_OK;
866879 }
0 commit comments