mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +01:00
[tests] Added simple app that compiles HLSL shaders
This commit is contained in:
parent
0d3a1b25a1
commit
d66593fab5
@ -2,3 +2,4 @@ test_dxbc_deps = [ dxbc_dep, dxvk_dep ]
|
|||||||
|
|
||||||
executable('dxbc-compiler', files('test_dxbc_compiler.cpp'), dependencies : test_dxbc_deps, install : true)
|
executable('dxbc-compiler', files('test_dxbc_compiler.cpp'), dependencies : test_dxbc_deps, install : true)
|
||||||
executable('dxbc-disasm', files('test_dxbc_disasm.cpp'), dependencies : [ test_dxbc_deps, lib_d3dcompiler_47 ], install : true)
|
executable('dxbc-disasm', files('test_dxbc_disasm.cpp'), dependencies : [ test_dxbc_deps, lib_d3dcompiler_47 ], install : true)
|
||||||
|
executable('hlsl-compiler', files('test_hlsl_compiler.cpp'), dependencies : [ test_dxbc_deps, lib_d3dcompiler_47 ], install : true)
|
||||||
|
61
tests/dxbc/test_hlsl_compiler.cpp
Normal file
61
tests/dxbc/test_hlsl_compiler.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#include <cstring>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
#include <d3dcompiler.h>
|
||||||
|
|
||||||
|
#include <shellapi.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
|
|
||||||
|
#include "../test_utils.h"
|
||||||
|
|
||||||
|
using namespace dxvk;
|
||||||
|
|
||||||
|
int WINAPI WinMain(HINSTANCE hInstance,
|
||||||
|
HINSTANCE hPrevInstance,
|
||||||
|
LPSTR lpCmdLine,
|
||||||
|
int nCmdShow) {
|
||||||
|
int argc = 0;
|
||||||
|
LPWSTR* argv = CommandLineToArgvW(
|
||||||
|
GetCommandLineW(), &argc);
|
||||||
|
|
||||||
|
if (argc < 5) {
|
||||||
|
std::cerr << "Usage: hlsl-compiler target entrypoint input.hlsl output.dxbc" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const LPWSTR target = argv[1];
|
||||||
|
const LPWSTR entryPoint = argv[2];
|
||||||
|
const LPWSTR inputFile = argv[3];
|
||||||
|
const LPWSTR outputFile = argv[4];
|
||||||
|
|
||||||
|
std::ifstream ifile(str::fromws(inputFile), std::ios::binary);
|
||||||
|
ifile.ignore(std::numeric_limits<std::streamsize>::max());
|
||||||
|
std::streamsize length = ifile.gcount();
|
||||||
|
ifile.clear();
|
||||||
|
|
||||||
|
ifile.seekg(0, std::ios_base::beg);
|
||||||
|
std::vector<char> hlslCode(length);
|
||||||
|
ifile.read(hlslCode.data(), length);
|
||||||
|
|
||||||
|
Com<ID3DBlob> binary;
|
||||||
|
Com<ID3DBlob> errors;
|
||||||
|
|
||||||
|
HRESULT hr = D3DCompile(
|
||||||
|
hlslCode.data(),
|
||||||
|
hlslCode.size(),
|
||||||
|
"Shader", nullptr, nullptr,
|
||||||
|
str::fromws(entryPoint).c_str(),
|
||||||
|
str::fromws(target).c_str(),
|
||||||
|
0, 0, &binary, &errors);
|
||||||
|
|
||||||
|
if (FAILED(hr)) {
|
||||||
|
if (errors != nullptr)
|
||||||
|
std::cerr << reinterpret_cast<const char*>(errors->GetBufferPointer()) << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ofstream outputStream(str::fromws(outputFile), std::ios::binary | std::ios::trunc);
|
||||||
|
outputStream.write(reinterpret_cast<const char*>(binary->GetBufferPointer()), binary->GetBufferSize());
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user