blob: 03877f1af4cdb4868dbd40bcaf6fb6c00f3b4619 [file] [log] [blame] [edit]
#include "dxc/DxilPdbInfo/DxilPdbInfoWriter.h"
#include "dxc/Support/Global.h"
#include "dxc/Support/WinIncludes.h"
#include "dxc/DxilCompression/DxilCompressionHelpers.h"
#include "dxc/DxilContainer/DxilContainer.h"
#include "dxc/DxilContainer/DxilRuntimeReflection.h"
using namespace hlsl;
HRESULT hlsl::WritePdbInfoPart(IMalloc *pMalloc,
const void *pUncompressedPdbInfoData,
size_t size, std::vector<char> *outBuffer) {
// Write to the output buffer.
outBuffer->clear();
hlsl::DxilShaderPDBInfo header = {};
header.CompressionType =
hlsl::DxilShaderPDBInfoCompressionType::Zlib; // TODO: Add option to do
// uncompressed version.
header.UncompressedSizeInBytes = size;
header.Version = hlsl::DxilShaderPDBInfoVersion::Latest;
{
const size_t lastSize = outBuffer->size();
outBuffer->resize(outBuffer->size() + sizeof(header));
memcpy(outBuffer->data() + lastSize, &header, sizeof(header));
}
// Then write the compressed RDAT data.
hlsl::ZlibResult result = hlsl::ZlibCompressAppend(
pMalloc, pUncompressedPdbInfoData, size, *outBuffer);
if (result == hlsl::ZlibResult::OutOfMemory)
IFTBOOL(false, E_OUTOFMEMORY);
IFTBOOL(result == hlsl::ZlibResult::Success, E_FAIL);
IFTBOOL(outBuffer->size() >= sizeof(header), E_FAIL);
header.SizeInBytes = outBuffer->size() - sizeof(header);
memcpy(outBuffer->data(), &header, sizeof(header));
return S_OK;
}