From d2bb7157c2221e010e216cca1aff638257ca0137 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Fri, 25 Nov 2016 12:01:31 -0800 Subject: [PATCH] libobs-d3d11: Add optional macro to log shader disassembly --- libobs-d3d11/d3d11-shader.cpp | 16 ++++++++++++++++ libobs-d3d11/d3d11-subsystem.cpp | 5 +++++ libobs-d3d11/d3d11-subsystem.hpp | 5 +++++ 3 files changed, 26 insertions(+) diff --git a/libobs-d3d11/d3d11-shader.cpp b/libobs-d3d11/d3d11-shader.cpp index 4e1d15365..fc3159f62 100644 --- a/libobs-d3d11/d3d11-shader.cpp +++ b/libobs-d3d11/d3d11-shader.cpp @@ -201,6 +201,22 @@ void gs_shader::Compile(const char *shaderString, const char *file, else throw HRError("Failed to compile shader", hr); } + +#ifdef DISASSEMBLE_SHADERS + ComPtr asmBlob; + + if (!device->d3dDisassemble) + return; + + hr = device->d3dDisassemble((*shader)->GetBufferPointer(), + (*shader)->GetBufferSize(), 0, nullptr, &asmBlob); + + if (SUCCEEDED(hr) && !!asmBlob && asmBlob->GetBufferSize()) { + blog(LOG_INFO, "============================================="); + blog(LOG_INFO, "Disassembly output for shader '%s':\n%s", + file, asmBlob->GetBufferPointer()); + } +#endif } inline void gs_shader::UpdateParam(vector &constData, diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index 876038690..8760a9d86 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -181,6 +181,11 @@ void gs_device::InitCompiler() if (module) { d3dCompile = (pD3DCompile)GetProcAddress(module, "D3DCompile"); + +#ifdef DISASSEMBLE_SHADERS + d3dDisassemble = (pD3DDisassemble)GetProcAddress( + module, "D3DDisassemble"); +#endif if (d3dCompile) { return; } diff --git a/libobs-d3d11/d3d11-subsystem.hpp b/libobs-d3d11/d3d11-subsystem.hpp index 1771dbf62..237fdc8d2 100644 --- a/libobs-d3d11/d3d11-subsystem.hpp +++ b/libobs-d3d11/d3d11-subsystem.hpp @@ -37,6 +37,8 @@ #include #include +// #define DISASSEMBLE_SHADERS + struct shader_var; struct shader_sampler; struct gs_vertex_shader; @@ -801,6 +803,9 @@ struct gs_device { D3D11_PRIMITIVE_TOPOLOGY curToplogy; pD3DCompile d3dCompile = nullptr; +#ifdef DISASSEMBLE_SHADERS + pD3DDisassemble d3dDisassemble = nullptr; +#endif gs_rect viewport;