/*==========================================================================;
 *
 *  Copyright (C) 1995-1997 Microsoft Corporation.  All Rights Reserved.
 *
 *  File:   pshader.hpp
 *  Content:    Direct3D pixel shader internal include file
 *
 *
 ***************************************************************************/
#ifndef _PSHADER_HPP
#define _PSHADER_HPP

#include "d3dfe.hpp"
#include "hmgr.hpp"

struct PVM_WORD
{
    union
    {
        struct
        {
            D3DVALUE x, y, z, w;
        };
        D3DVALUE v[4];
    };
};

struct CONST_DEF
{
    float   f[4];
    UINT    RegNum;
};

//-----------------------------------------------------------------------------
//
// CPShader: Pixel Shader Class
//
//-----------------------------------------------------------------------------
class CPShader : public CD3DBaseObj
{
public:
    DWORD*      m_pCode;
    UINT        m_dwCodeSize;
    DWORD*      m_pCodeOrig;
    UINT        m_dwCodeSizeOrig;
    DWORD       m_dwNumConstDefs;
    CONST_DEF*  m_pConstDefs;
    
    CPShader(void)
    {
        m_pCodeOrig = NULL;
        m_dwCodeSizeOrig = 0x0;
        m_pCode = m_pCodeOrig;
        m_dwCodeSize = m_dwCodeSizeOrig;
        m_dwNumConstDefs = 0;
        m_pConstDefs = NULL;
    }
    ~CPShader()
    {
        if (NULL != m_pCode) delete[] m_pCode;
        if (NULL != m_pCodeOrig) delete[] m_pCodeOrig;
        if (NULL != m_pConstDefs) delete[] m_pConstDefs;
    }
    HRESULT Initialize(CONST DWORD* pCode, D3DDEVTYPE DevType);
};
typedef CPShader *LPPSHADER;

#endif _PSHADER_HPP