Commit c8eadba6 authored by hybrid's avatar hybrid

Add file debug for HLSL pixel shader for NewerCookie.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2134 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 0d8210fa
...@@ -18,20 +18,20 @@ ...@@ -18,20 +18,20 @@
namespace irr namespace irr
{ {
namespace video namespace video
{ {
//! Public constructor //! Public constructor
CD3D9HLSLMaterialRenderer::CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev, CD3D9HLSLMaterialRenderer::CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev,
video::IVideoDriver* driver, s32& outMaterialTypeNr, video::IVideoDriver* driver, s32& outMaterialTypeNr,
const c8* vertexShaderProgram, const c8* vertexShaderProgram,
const c8* vertexShaderEntryPointName, const c8* vertexShaderEntryPointName,
E_VERTEX_SHADER_TYPE vsCompileTarget, E_VERTEX_SHADER_TYPE vsCompileTarget,
const c8* pixelShaderProgram, const c8* pixelShaderProgram,
const c8* pixelShaderEntryPointName, const c8* pixelShaderEntryPointName,
E_PIXEL_SHADER_TYPE psCompileTarget, E_PIXEL_SHADER_TYPE psCompileTarget,
IShaderConstantSetCallBack* callback, IShaderConstantSetCallBack* callback,
IMaterialRenderer* baseMaterial, IMaterialRenderer* baseMaterial,
s32 userData) s32 userData)
: CD3D9ShaderMaterialRenderer(d3ddev, driver, callback, baseMaterial, userData), : CD3D9ShaderMaterialRenderer(d3ddev, driver, callback, baseMaterial, userData),
...@@ -52,11 +52,11 @@ CD3D9HLSLMaterialRenderer::CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev, ...@@ -52,11 +52,11 @@ CD3D9HLSLMaterialRenderer::CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev,
return; return;
} }
if (!createHLSLVertexShader(vertexShaderProgram, if (!createHLSLVertexShader(vertexShaderProgram,
vertexShaderEntryPointName, VERTEX_SHADER_TYPE_NAMES[vsCompileTarget])) vertexShaderEntryPointName, VERTEX_SHADER_TYPE_NAMES[vsCompileTarget]))
return; return;
if (!createHLSLPixelShader(pixelShaderProgram, if (!createHLSLPixelShader(pixelShaderProgram,
pixelShaderEntryPointName, PIXEL_SHADER_TYPE_NAMES[psCompileTarget])) pixelShaderEntryPointName, PIXEL_SHADER_TYPE_NAMES[psCompileTarget]))
return; return;
...@@ -64,7 +64,8 @@ CD3D9HLSLMaterialRenderer::CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev, ...@@ -64,7 +64,8 @@ CD3D9HLSLMaterialRenderer::CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev,
outMaterialTypeNr = Driver->addMaterialRenderer(this); outMaterialTypeNr = Driver->addMaterialRenderer(this);
} }
//! Destructor
//! Destructor
CD3D9HLSLMaterialRenderer::~CD3D9HLSLMaterialRenderer() CD3D9HLSLMaterialRenderer::~CD3D9HLSLMaterialRenderer()
{ {
if (VSConstantsTable) if (VSConstantsTable)
...@@ -76,8 +77,8 @@ CD3D9HLSLMaterialRenderer::~CD3D9HLSLMaterialRenderer() ...@@ -76,8 +77,8 @@ CD3D9HLSLMaterialRenderer::~CD3D9HLSLMaterialRenderer()
bool CD3D9HLSLMaterialRenderer::createHLSLVertexShader(const char* vertexShaderProgram, bool CD3D9HLSLMaterialRenderer::createHLSLVertexShader(const char* vertexShaderProgram,
const char* shaderEntryPointName, const char* shaderEntryPointName,
const char* shaderTargetName) const char* shaderTargetName)
{ {
if (!vertexShaderProgram) if (!vertexShaderProgram)
return true; return true;
...@@ -85,49 +86,48 @@ bool CD3D9HLSLMaterialRenderer::createHLSLVertexShader(const char* vertexShaderP ...@@ -85,49 +86,48 @@ bool CD3D9HLSLMaterialRenderer::createHLSLVertexShader(const char* vertexShaderP
LPD3DXBUFFER buffer = 0; LPD3DXBUFFER buffer = 0;
LPD3DXBUFFER errors = 0; LPD3DXBUFFER errors = 0;
#ifdef _IRR_D3D_NO_SHADER_DEBUGGING #ifdef _IRR_D3D_NO_SHADER_DEBUGGING
// compile without debug info
HRESULT h = stubD3DXCompileShader(
vertexShaderProgram,
strlen(vertexShaderProgram),
0, // macros
0, // no includes
shaderEntryPointName,
shaderTargetName,
0, // no flags
&buffer,
&errors,
&VSConstantsTable);
#else
// compile shader and emitt some debug informations to
// make it possible to debug the shader in visual studio
static int irr_dbg_hlsl_file_nr = 0;
++irr_dbg_hlsl_file_nr;
char tmp[32];
sprintf(tmp, "irr_d3d9_dbg_hlsl_%d.vsh", irr_dbg_hlsl_file_nr);
FILE* f = fopen(tmp, "wb");
fwrite(vertexShaderProgram, strlen(vertexShaderProgram), 1, f);
fflush(f);
fclose(f);
HRESULT h = stubD3DXCompileShaderFromFile(
tmp,
0, // macros
0, // no includes
shaderEntryPointName,
shaderTargetName,
D3DXSHADER_DEBUG | D3DXSHADER_SKIPOPTIMIZATION,
&buffer,
&errors,
&VSConstantsTable);
#endif // compile without debug info
HRESULT h = stubD3DXCompileShader(
vertexShaderProgram,
strlen(vertexShaderProgram),
0, // macros
0, // no includes
shaderEntryPointName,
shaderTargetName,
0, // no flags
&buffer,
&errors,
&VSConstantsTable);
#else
// compile shader and emitt some debug informations to
// make it possible to debug the shader in visual studio
static int irr_dbg_hlsl_file_nr = 0;
++irr_dbg_hlsl_file_nr;
char tmp[32];
sprintf(tmp, "irr_d3d9_dbg_hlsl_%d.vsh", irr_dbg_hlsl_file_nr);
FILE* f = fopen(tmp, "wb");
fwrite(vertexShaderProgram, strlen(vertexShaderProgram), 1, f);
fflush(f);
fclose(f);
HRESULT h = stubD3DXCompileShaderFromFile(
tmp,
0, // macros
0, // no includes
shaderEntryPointName,
shaderTargetName,
D3DXSHADER_DEBUG | D3DXSHADER_SKIPOPTIMIZATION,
&buffer,
&errors,
&VSConstantsTable);
#endif
if (FAILED(h)) if (FAILED(h))
{ {
...@@ -163,7 +163,7 @@ bool CD3D9HLSLMaterialRenderer::createHLSLVertexShader(const char* vertexShaderP ...@@ -163,7 +163,7 @@ bool CD3D9HLSLMaterialRenderer::createHLSLVertexShader(const char* vertexShaderP
} }
bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderProgram, bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderProgram,
const char* shaderEntryPointName, const char* shaderEntryPointName,
const char* shaderTargetName) const char* shaderTargetName)
{ {
...@@ -172,10 +172,13 @@ bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderPro ...@@ -172,10 +172,13 @@ bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderPro
LPD3DXBUFFER buffer = 0; LPD3DXBUFFER buffer = 0;
LPD3DXBUFFER errors = 0; LPD3DXBUFFER errors = 0;
#ifdef _IRR_D3D_NO_SHADER_DEBUGGING
// compile without debug info
HRESULT h = stubD3DXCompileShader( HRESULT h = stubD3DXCompileShader(
pixelShaderProgram, pixelShaderProgram,
strlen(pixelShaderProgram), strlen(pixelShaderProgram),
0, // macros 0, // macros
0, // no includes 0, // no includes
shaderEntryPointName, shaderEntryPointName,
...@@ -185,6 +188,34 @@ bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderPro ...@@ -185,6 +188,34 @@ bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderPro
&errors, &errors,
&PSConstantsTable); &PSConstantsTable);
#else
// compile shader and emitt some debug informations to
// make it possible to debug the shader in visual studio
static int irr_dbg_hlsl_file_nr = 0;
++irr_dbg_hlsl_file_nr;
char tmp[32];
sprintf(tmp, "irr_d3d9_dbg_hlsl_%d.psh", irr_dbg_hlsl_file_nr);
FILE* f = fopen(tmp, "wb");
fwrite(pixelShaderProgram, strlen(pixelShaderProgram), 1, f);
fflush(f);
fclose(f);
HRESULT h = stubD3DXCompileShaderFromFile(
tmp,
0, // macros
0, // no includes
shaderEntryPointName,
shaderTargetName,
D3DXSHADER_DEBUG | D3DXSHADER_SKIPOPTIMIZATION,
&buffer,
&errors,
&PSConstantsTable);
#endif
if (FAILED(h)) if (FAILED(h))
{ {
os::Printer::log("HLSL pixel shader compilation failed:"); os::Printer::log("HLSL pixel shader compilation failed:");
...@@ -219,14 +250,14 @@ bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderPro ...@@ -219,14 +250,14 @@ bool CD3D9HLSLMaterialRenderer::createHLSLPixelShader(const char* pixelShaderPro
} }
bool CD3D9HLSLMaterialRenderer::setVariable(bool vertexShader, const c8* name, bool CD3D9HLSLMaterialRenderer::setVariable(bool vertexShader, const c8* name,
const f32* floats, int count) const f32* floats, int count)
{ {
LPD3DXCONSTANTTABLE tbl = vertexShader ? VSConstantsTable : PSConstantsTable; LPD3DXCONSTANTTABLE tbl = vertexShader ? VSConstantsTable : PSConstantsTable;
if (!tbl) if (!tbl)
return false; return false;
// currently we only support top level parameters. // currently we only support top level parameters.
// Should be enough for the beginning. (TODO) // Should be enough for the beginning. (TODO)
D3DXHANDLE hndl = tbl->GetConstantByName(NULL, name); D3DXHANDLE hndl = tbl->GetConstantByName(NULL, name);
...@@ -250,6 +281,7 @@ bool CD3D9HLSLMaterialRenderer::setVariable(bool vertexShader, const c8* name, ...@@ -250,6 +281,7 @@ bool CD3D9HLSLMaterialRenderer::setVariable(bool vertexShader, const c8* name,
return true; return true;
} }
bool CD3D9HLSLMaterialRenderer::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) bool CD3D9HLSLMaterialRenderer::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype)
{ {
if (VSConstantsTable) if (VSConstantsTable)
...@@ -258,9 +290,10 @@ bool CD3D9HLSLMaterialRenderer::OnRender(IMaterialRendererServices* service, E_V ...@@ -258,9 +290,10 @@ bool CD3D9HLSLMaterialRenderer::OnRender(IMaterialRendererServices* service, E_V
return CD3D9ShaderMaterialRenderer::OnRender(service, vtxtype); return CD3D9ShaderMaterialRenderer::OnRender(service, vtxtype);
} }
void CD3D9HLSLMaterialRenderer::printHLSLVariables(LPD3DXCONSTANTTABLE table) void CD3D9HLSLMaterialRenderer::printHLSLVariables(LPD3DXCONSTANTTABLE table)
{ {
// currently we only support top level parameters. // currently we only support top level parameters.
// Should be enough for the beginning. (TODO) // Should be enough for the beginning. (TODO)
// print out constant names // print out constant names
...@@ -268,7 +301,7 @@ void CD3D9HLSLMaterialRenderer::printHLSLVariables(LPD3DXCONSTANTTABLE table) ...@@ -268,7 +301,7 @@ void CD3D9HLSLMaterialRenderer::printHLSLVariables(LPD3DXCONSTANTTABLE table)
HRESULT hr = table->GetDesc(&tblDesc); HRESULT hr = table->GetDesc(&tblDesc);
if (!FAILED(hr)) if (!FAILED(hr))
{ {
for (int i=0; i<(int)tblDesc.Constants; ++i) for (int i=0; i<(int)tblDesc.Constants; ++i)
{ {
D3DXCONSTANT_DESC d; D3DXCONSTANT_DESC d;
UINT n = 1; UINT n = 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment