I need to load a compiled pixel shader into memory to use with CreatePixelShader but I can't use any D3DX calls.

How can I do this?

(I'm using Visual Studio 2010 as my compiler and C++ as the language)

  • Why can't you use D3DX? are you not using DirectX at all, or is this some sort of test? – thecoshman Feb 16 '11 at 18:26
  • @thecoshman Either he, like me, likes to understand what helper functions are doing, or he could see the future and saw this link. Yes, MS decided to break legacy code because... MS... Ironicaly enough, you still have to #define NOMINMAX to build a simple Windows application. Go figure. – user1593842 Aug 22 '18 at 22:38

build your precompiled shader from the command line using fxc:

fxc filename.hlsl /E PixelShaderEntry /Fo precompiledShader.ext

load the precompiled shader data using regular c++ file loading code.

in psuedo-ish code:

byte * data = loadFile("precompiledShader.ext");
IDirect3DPixelShader9 *ps = NULL;
HRESULT hr = device->CreatePixelShader(data, ps);

I realize someone posted pseudo-code earlier. Here is C++ code using the Windows SDK (and not the D3DX libraries as requested).

Here "PixelShader.cso" is the precompiled hlsl shader generated by Visual Studio 11 from a .hlsl file in the project. The compiled .cso file is usually moved to the Projects/ProjectName/Debug folder by default. As a result it must be cut and paste into the same directory as your source code before using. Mind you this setting can be changed by right-clicking the HLSL file while inside Visual Studio 11 and editing the Output Settings. By default its: $(OutDir)%(Filename).cso, change it to: $(Directory)%(Filename).cso

ID3D11PixelShader* PS;
ID3DBlob* PS_Buffer;

D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer);
d3d11DevCon->PSSetShader(PS, 0, 0);

Take note of the L before "PixelShader.cso". My project was using the Multi-Byte Character Set, if you have yours set to Unicode the L might not be necessary.

  • How to calculate checksum of cso while modifying it. My createVertextShader fails on checksum validation – user3264821 May 1 '19 at 6:14

Your Answer

