83 строки
2.6 KiB
C++
83 строки
2.6 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// DxilDiaTableInjectedSources.h //
|
|
// Copyright (C) Microsoft Corporation. All rights reserved. //
|
|
// This file is distributed under the University of Illinois Open Source //
|
|
// License. See LICENSE.TXT for details. //
|
|
// //
|
|
// DIA API implementation for DXIL modules. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "dxc/Support/WinIncludes.h"
|
|
|
|
#include <vector>
|
|
|
|
#include "dia2.h"
|
|
|
|
#include "dxc/Support/Global.h"
|
|
#include "dxc/Support/microcom.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/IR/Metadata.h"
|
|
|
|
#include "DxilDia.h"
|
|
#include "DxilDiaTable.h"
|
|
|
|
namespace dxil_dia {
|
|
|
|
class InjectedSource : public IDiaInjectedSource {
|
|
private:
|
|
DXC_MICROCOM_TM_REF_FIELDS()
|
|
CComPtr<Session> m_pSession;
|
|
DWORD m_index;
|
|
|
|
public:
|
|
DXC_MICROCOM_TM_ADDREF_RELEASE_IMPL()
|
|
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void **ppvObject) {
|
|
return DoBasicQueryInterface<IDiaInjectedSource>(this, iid, ppvObject);
|
|
}
|
|
|
|
InjectedSource(IMalloc *pMalloc, Session *pSession, DWORD index)
|
|
: m_pMalloc(pMalloc), m_pSession(pSession), m_index(index) {}
|
|
|
|
llvm::MDTuple *NameContent();
|
|
llvm::StringRef Name();
|
|
llvm::StringRef Content();
|
|
|
|
STDMETHODIMP get_crc(
|
|
/* [retval][out] */ DWORD *pRetVal) override { return ENotImpl(); }
|
|
|
|
STDMETHODIMP get_length(_Out_ ULONGLONG *pRetVal) override;
|
|
|
|
STDMETHODIMP get_filename(BSTR *pRetVal) override;
|
|
|
|
STDMETHODIMP get_objectFilename(BSTR *pRetVal) override;
|
|
|
|
STDMETHODIMP get_virtualFilename(BSTR *pRetVal) override;
|
|
|
|
STDMETHODIMP get_sourceCompression(
|
|
/* [retval][out] */ DWORD *pRetVal) override { return ENotImpl(); }
|
|
|
|
STDMETHODIMP get_source(
|
|
/* [in] */ DWORD cbData,
|
|
/* [out] */ DWORD *pcbData,
|
|
/* [size_is][out] */ BYTE *pbData) override;
|
|
};
|
|
|
|
class InjectedSourcesTable : public impl::TableBase<IDiaEnumInjectedSources,
|
|
IDiaInjectedSource> {
|
|
public:
|
|
InjectedSourcesTable(IMalloc *pMalloc, Session *pSession);
|
|
|
|
HRESULT GetItem(DWORD index, IDiaInjectedSource **ppItem) override;
|
|
|
|
void Init(llvm::StringRef filename);
|
|
|
|
private:
|
|
std::vector<unsigned> m_indexList;
|
|
};
|
|
|
|
} // namespace dxil_dia
|