Add direct3d diff for old nevrax pixel program code, marked a todo in the comments

This commit is contained in:
kaetemi 2013-06-19 02:10:38 +02:00
parent 301ea3f32e
commit daccf30f15
3 changed files with 46 additions and 14 deletions

View file

@ -193,6 +193,11 @@ CDriverD3D::CDriverD3D()
#else // NL_DISABLE_HARDWARE_VERTEX_PROGAM #else // NL_DISABLE_HARDWARE_VERTEX_PROGAM
_DisableHardwareVertexProgram = false; _DisableHardwareVertexProgram = false;
#endif // NL_DISABLE_HARDWARE_VERTEX_PROGAM #endif // NL_DISABLE_HARDWARE_VERTEX_PROGAM
#ifdef NL_DISABLE_HARDWARE_PIXEL_PROGAM
_DisableHardwarePixelProgram = true;
#else // NL_DISABLE_HARDWARE_PIXEL_PROGAM
_DisableHardwarePixelProgram = false;
#endif // NL_DISABLE_HARDWARE_PIXEL_PROGAM
#ifdef NL_DISABLE_HARDWARE_VERTEX_ARRAY_AGP #ifdef NL_DISABLE_HARDWARE_VERTEX_ARRAY_AGP
_DisableHardwareVertexArrayAGP = true; _DisableHardwareVertexArrayAGP = true;
#else // NL_DISABLE_HARDWARE_VERTEX_ARRAY_AGP #else // NL_DISABLE_HARDWARE_VERTEX_ARRAY_AGP
@ -1546,6 +1551,7 @@ bool CDriverD3D::setDisplay(nlWindow wnd, const GfxMode& mode, bool show, bool r
#endif // NL_FORCE_TEXTURE_STAGE_COUNT #endif // NL_FORCE_TEXTURE_STAGE_COUNT
_VertexProgram = !_DisableHardwareVertexProgram && ((caps.VertexShaderVersion&0xffff) >= 0x0100); _VertexProgram = !_DisableHardwareVertexProgram && ((caps.VertexShaderVersion&0xffff) >= 0x0100);
_PixelProgram = !_DisableHardwarePixelProgram && (caps.PixelShaderVersion&0xffff) >= 0x0101;
_PixelShader = !_DisableHardwarePixelShader && (caps.PixelShaderVersion&0xffff) >= 0x0101; _PixelShader = !_DisableHardwarePixelShader && (caps.PixelShaderVersion&0xffff) >= 0x0101;
_MaxVerticesByVertexBufferHard = caps.MaxVertexIndex; _MaxVerticesByVertexBufferHard = caps.MaxVertexIndex;
_MaxLight = caps.MaxActiveLights; _MaxLight = caps.MaxActiveLights;
@ -2016,6 +2022,8 @@ bool CDriverD3D::swapBuffers()
// Reset vertex program // Reset vertex program
setVertexProgram (NULL, NULL); setVertexProgram (NULL, NULL);
// Reset pixel program
setPixelShader (NULL);
if (_VBHardProfiling) if (_VBHardProfiling)
{ {

View file

@ -242,6 +242,19 @@ public:
}; };
// ***************************************************************************
class CPixelProgramDrvInfosD3D : public IPixelProgramDrvInfos
{
public:
// The shader
IDirect3DPixelShader9 *Shader;
CPixelProgramDrvInfosD3D(IDriver *drv, ItPixelPrgDrvInfoPtrList it);
~CPixelProgramDrvInfosD3D();
};
// *************************************************************************** // ***************************************************************************
class CVertexDeclaration class CVertexDeclaration
@ -773,6 +786,7 @@ public:
// Driver parameters // Driver parameters
virtual void disableHardwareVertexProgram(); virtual void disableHardwareVertexProgram();
virtual void disableHardwarePixelProgram();
virtual void disableHardwareIndexArrayAGP(); virtual void disableHardwareIndexArrayAGP();
virtual void disableHardwareVertexArrayAGP(); virtual void disableHardwareVertexArrayAGP();
virtual void disableHardwareTextureShader(); virtual void disableHardwareTextureShader();
@ -993,8 +1007,10 @@ public:
// Vertex program // Vertex program
virtual bool isVertexProgramSupported () const; virtual bool isVertexProgramSupported () const;
virtual bool isPixelProgramSupported () const;
virtual bool isVertexProgramEmulated () const; virtual bool isVertexProgramEmulated () const;
virtual bool activeVertexProgram (CVertexProgram *program); virtual bool activeVertexProgram (CVertexProgram *program);
virtual bool activePixelProgram (CPixelProgram *program);
virtual void setConstant (uint index, float, float, float, float); virtual void setConstant (uint index, float, float, float, float);
virtual void setConstant (uint index, double, double, double, double); virtual void setConstant (uint index, double, double, double, double);
virtual void setConstant (uint index, const NLMISC::CVector& value); virtual void setConstant (uint index, const NLMISC::CVector& value);
@ -1006,6 +1022,15 @@ public:
virtual void enableVertexProgramDoubleSidedColor(bool doubleSided); virtual void enableVertexProgramDoubleSidedColor(bool doubleSided);
virtual bool supportVertexProgramDoubleSidedColor() const; virtual bool supportVertexProgramDoubleSidedColor() const;
// Pixel program
virtual void setPixelProgramConstant (uint index, float, float, float, float);
virtual void setPixelProgramConstant (uint index, double, double, double, double);
virtual void setPixelProgramConstant (uint index, const NLMISC::CVector& value);
virtual void setPixelProgramConstant (uint index, const NLMISC::CVectorD& value);
virtual void setPixelProgramConstant (uint index, uint num, const float *src);
virtual void setPixelProgramConstant (uint index, uint num, const double *src);
virtual void setPixelProgramConstantMatrix (uint index, IDriver::TMatrix matrix, IDriver::TTransform transform);
// Occlusion query // Occlusion query
virtual bool supportOcclusionQuery() const; virtual bool supportOcclusionQuery() const;
virtual IOcclusionQuery *createOcclusionQuery(); virtual IOcclusionQuery *createOcclusionQuery();
@ -1892,6 +1917,15 @@ public:
return d3dtex; return d3dtex;
} }
// Get the d3dtext mirror of an existing setuped pixel program.
static inline CPixelProgramDrvInfosD3D* getPixelProgramD3D(CPixelProgram& pixelProgram)
{
H_AUTO_D3D(CDriverD3D_getPixelProgramD3D);
CPixelProgramDrvInfosD3D* d3dPixelProgram;
d3dPixelProgram = (CPixelProgramDrvInfosD3D*)(IPixelProgramDrvInfos*)(pixelProgram._DrvInfo);
return d3dPixelProgram;
}
// Get the d3dtext mirror of an existing setuped vertex program. // Get the d3dtext mirror of an existing setuped vertex program.
static inline CVertexProgamDrvInfosD3D* getVertexProgramD3D(CVertexProgram& vertexProgram) static inline CVertexProgamDrvInfosD3D* getVertexProgramD3D(CVertexProgram& vertexProgram)
{ {
@ -2197,8 +2231,10 @@ private:
bool _ForceDXTCCompression:1; bool _ForceDXTCCompression:1;
bool _TextureCubeSupported; bool _TextureCubeSupported;
bool _VertexProgram; bool _VertexProgram;
bool _PixelProgram;
bool _PixelShader; bool _PixelShader;
bool _DisableHardwareVertexProgram; bool _DisableHardwareVertexProgram;
bool _DisableHardwarePixelProgram;
bool _DisableHardwareVertexArrayAGP; bool _DisableHardwareVertexArrayAGP;
bool _DisableHardwareIndexArrayAGP; bool _DisableHardwareIndexArrayAGP;
bool _DisableHardwarePixelShader; bool _DisableHardwarePixelShader;

View file

@ -82,10 +82,11 @@ bool CDriverD3D::activePixelProgram(CPixelProgram *program)
program->_DrvInfo = *itPix; program->_DrvInfo = *itPix;
std::string dest; std::string dest;
/* TODO_REMOVE
if(program->isEffectProgram()) if(program->isEffectProgram())
{ {
dest = program->getProgram(); dest = program->getProgram();
} }*/
LPD3DXBUFFER pShader; LPD3DXBUFFER pShader;
LPD3DXBUFFER pErrorMsgs; LPD3DXBUFFER pErrorMsgs;
@ -289,17 +290,4 @@ void CDriverD3D::disableHardwarePixelProgram()
_PixelProgram = false; _PixelProgram = false;
} }
// ***************************************************************************
uint CDriverD3D::getMaxTexturesForEffects() const
{
H_AUTO_D3D(CDriverD3D_getMaxTexturesForEffects)
// we use ps_2_0 profile for direct3D ASM pixel program, then 16 texture samplers are available
if(!strcmp(CPixelProgram::getPixelASMProfile(), "ps_2_0"))
return 16;
return 0;
}
} // NL3D } // NL3D