| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import re
- inputFilename = 'runtime.opt.ll'
- sourceFilename = r'C:/Users/chwallis/Desktop/DXILShaderPatch/runtime.c'
- outputFilename = 'C:/Users/chwallis/Desktop/DXILShaderPatch/runtime.h'
- source = open(sourceFilename).read()
- input = open(inputFilename).read()
- m = re.search(r'"nvptx"(.*?)attributes #', input, re.DOTALL)
- dxil = m.group(1)
- # split the string up to avoid error C2026: string too big, trailing characters truncated
- lines = dxil.splitlines()
- dxil = []
- count = 0
- for line in lines:
- count += len(line)
- dxil.append(line)
- if count > 10000:
- dxil.append(')AAA",')
- dxil.append('R"AAA(')
- count = 0
- dxil = '\n'.join(dxil)
- template = """
- // This file generated by compiling the following source (runtime.c) as follows:
- // clang -S -emit-llvm -target nvptr runtime.c
- // opt -S -mem2reg runtime.ll -o runtime.opt.ll
- // The resulting LLVM-IR is stripped of its datalayout and replaced with one
- // compatible with DXIL.
- // runtime.c
- #if 0
- %SOURCE%
- #endif
- static const char* runtimeString[] = { R"AAA(
- target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f:64:64-n8:16:32:64"
- target triple = "dxil-ms-dx"
- %DXIL%
- attributes #0 = { nounwind }
- attributes #1 = { nounwind }
- )AAA"
- };
- #include <sstream>
- static std::string getRuntimeString()
- {
- std::ostringstream out;
- for( size_t i=0; i < _countof(runtimeString); ++i)
- out << runtimeString[i];
- return out.str();
- }
- """
- output = re.sub(r'%SOURCE%', source, template)
- output = re.sub(r'%DXIL%', dxil, output)
- open(outputFilename, 'w').write(output)
|