OGRE  1.8
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Ogre::RTShader::ProgramProcessor Class Referenceabstract

A class that provides extra processing services on CPU based programs. More...

#include <OgreShaderProgramProcessor.h>

+ Inheritance diagram for Ogre::RTShader::ProgramProcessor:
+ Collaboration diagram for Ogre::RTShader::ProgramProcessor:

Classes

struct  MergeCombination
 
class  MergeParameter
 

Public Member Functions

 ProgramProcessor ()
 Class constructor. More...
 
virtual ~ProgramProcessor ()
 Class destructor. More...
 
virtual const StringgetTargetLanguage () const =0
 Return the target language of this processor. More...
 
void operator delete (void *ptr)
 
void operator delete (void *ptr, void *)
 
void operator delete (void *ptr, const char *, int, const char *)
 
void operator delete[] (void *ptr)
 
void operator delete[] (void *ptr, const char *, int, const char *)
 
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info More...
 
void * operator new (size_t sz)
 
void * operator new (size_t sz, void *ptr)
 placement operator new More...
 
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info More...
 
void * operator new[] (size_t sz)
 
virtual bool postCreateGpuPrograms (ProgramSet *programSet)=0
 Called after creation of the GPU programs. More...
 
virtual bool preCreateGpuPrograms (ProgramSet *programSet)=0
 Called before creation of the GPU programs. More...
 

Protected Types

typedef map< Parameter
*, ParameterPtr >::type 
LocalParameterMap
 
typedef vector
< MergeCombination >::type 
MergeCombinationList
 
typedef vector< MergeParameter >
::type 
MergeParameterList
 
typedef vector< Operand * >::type OperandPtrVector
 
typedef map< Parameter
*, OperandPtrVector >::type 
ParameterOperandMap
 

Protected Member Functions

void bindAutoParameters (Program *pCpuProgram, GpuProgramPtr pGpuProgram)
 Bind the auto parameters for a given CPU and GPU program set. More...
 
void buildMergeCombinations ()
 Build parameter merging combinations. More...
 
void buildParameterReferenceMap (FunctionAtomInstanceList &funcAtomList, ParameterOperandMap &paramsRefMap)
 Builds a map between parameter and all the references to it. More...
 
void buildTexcoordTable (const ShaderParameterList &paramList, ShaderParameterList outParamsTable[4])
 Internal function that builds parameters table. More...
 
virtual bool compactVsOutputs (Function *vsMain, Function *fsMain)
 Compact the vertex shader output registers. More...
 
void countVsTexcoordOutputs (Function *vsMain, int &outTexCoordSlots, int &outTexCoordFloats)
 Internal method that counts vertex shader texcoord output slots and output floats. More...
 
void generateLocalSplitParameters (Function *func, GpuProgramType progType, MergeParameterList &mergedParams, ShaderParameterList &splitParams, LocalParameterMap &localParamsMap)
 Generates local parameters for the split parameters and perform packing/unpacking operation using them. More...
 
void mergeParameters (ShaderParameterList paramsTable[4], MergeParameterList &mergedParams, ShaderParameterList &splitParams)
 Merge the parameters from the given table. More...
 
bool mergeParametersByCombination (const MergeCombination &combination, ShaderParameterList paramsTable[4], MergeParameter *mergedParameter)
 Internal function that creates merged parameter from given combination. More...
 
void mergeParametersByPredefinedCombinations (ShaderParameterList paramsTable[4], MergeParameterList &mergedParams)
 Internal function that creates merged parameter using pre defined combinations. More...
 
void mergeParametersReminders (ShaderParameterList paramsTable[4], MergeParameterList &mergedParams, ShaderParameterList &splitParams)
 Merge reminders parameters that could not be merged into one slot using the predefined combinations. More...
 
void rebuildFunctionInvocations (FunctionAtomInstanceList &funcAtomList, MergeParameterList &mergedParams, LocalParameterMap &localParamsMap)
 Rebuild function invocations by replacing references to old source parameters with the matching merged parameters components. More...
 
void rebuildParameterList (Function *func, int paramsUsage, MergeParameterList &mergedParams)
 Rebuild the given parameters list using the merged parameters. More...
 
void replaceParametersReferences (MergeParameterList &mergedParams, ParameterOperandMap &paramsRefMap)
 Replace references to old parameters with the new merged parameters. More...
 
void replaceSplitParametersReferences (LocalParameterMap &localParamsMap, ParameterOperandMap &paramsRefMap)
 Replace references to old parameters that have been split with the new local parameters that represents them. More...
 

Static Protected Member Functions

static int getParameterFloatCount (GpuConstantType type)
 Return number of floats needed by the given type. More...
 
static int getParameterMaskByFloatCount (int floatCount)
 Return the parameter mask of by the float count type (I.E: X|Y for 2 etc..) More...
 
static int getParameterMaskByType (GpuConstantType type)
 Return the parameter mask of by the given parameter type (I.E: X|Y for FLOAT2 etc..) More...
 

Protected Attributes

std::map< Function *, String * > mFunctionMap
 
int mMaxTexCoordFloats
 
int mMaxTexCoordSlots
 
MergeCombinationList mParamMergeCombinations
 

Detailed Description

A class that provides extra processing services on CPU based programs.

The base class perform only the generic processing. In order to provide target language specific services and optimization one should derive from this class and register its factory via the ProgramManager instance.

Definition at line 49 of file OgreShaderProgramProcessor.h.

Member Typedef Documentation

Constructor & Destructor Documentation

Ogre::RTShader::ProgramProcessor::ProgramProcessor ( )

Class constructor.

Parameters
typeThe type of this program.
virtual Ogre::RTShader::ProgramProcessor::~ProgramProcessor ( )
virtual

Class destructor.

Member Function Documentation

void Ogre::RTShader::ProgramProcessor::bindAutoParameters ( Program pCpuProgram,
GpuProgramPtr  pGpuProgram 
)
protected

Bind the auto parameters for a given CPU and GPU program set.

void Ogre::RTShader::ProgramProcessor::buildMergeCombinations ( )
protected

Build parameter merging combinations.

void Ogre::RTShader::ProgramProcessor::buildParameterReferenceMap ( FunctionAtomInstanceList funcAtomList,
ParameterOperandMap paramsRefMap 
)
protected

Builds a map between parameter and all the references to it.

void Ogre::RTShader::ProgramProcessor::buildTexcoordTable ( const ShaderParameterList paramList,
ShaderParameterList  outParamsTable[4] 
)
protected

Internal function that builds parameters table.

Parameters
paramListThe parameter list.
outParamsTableWill hold the texcoord params sorted by types in each row.
virtual bool Ogre::RTShader::ProgramProcessor::compactVsOutputs ( Function vsMain,
Function fsMain 
)
protectedvirtual

Compact the vertex shader output registers.

Parameters
vsMainThe vertex shader entry function.
fsMainThe fragment shader entry function. Return true on success.
void Ogre::RTShader::ProgramProcessor::countVsTexcoordOutputs ( Function vsMain,
int &  outTexCoordSlots,
int &  outTexCoordFloats 
)
protected

Internal method that counts vertex shader texcoord output slots and output floats.

Parameters
vsMainThe vertex shader entry function.
outTexCoordSlotsWill hold the number of used output texcoord slots.
outTexCoordFloatsWill hold the total number of floats used by output texcoord slots.
void Ogre::RTShader::ProgramProcessor::generateLocalSplitParameters ( Function func,
GpuProgramType  progType,
MergeParameterList mergedParams,
ShaderParameterList splitParams,
LocalParameterMap localParamsMap 
)
protected

Generates local parameters for the split parameters and perform packing/unpacking operation using them.

static int Ogre::RTShader::ProgramProcessor::getParameterFloatCount ( GpuConstantType  type)
staticprotected

Return number of floats needed by the given type.

static int Ogre::RTShader::ProgramProcessor::getParameterMaskByFloatCount ( int  floatCount)
staticprotected

Return the parameter mask of by the float count type (I.E: X|Y for 2 etc..)

static int Ogre::RTShader::ProgramProcessor::getParameterMaskByType ( GpuConstantType  type)
staticprotected

Return the parameter mask of by the given parameter type (I.E: X|Y for FLOAT2 etc..)

virtual const String& Ogre::RTShader::ProgramProcessor::getTargetLanguage ( ) const
pure virtual
void Ogre::RTShader::ProgramProcessor::mergeParameters ( ShaderParameterList  paramsTable[4],
MergeParameterList mergedParams,
ShaderParameterList splitParams 
)
protected

Merge the parameters from the given table.

Parameters
paramsTableSource parameters table.
mergedParamsWill hold the merged parameters list.
bool Ogre::RTShader::ProgramProcessor::mergeParametersByCombination ( const MergeCombination combination,
ShaderParameterList  paramsTable[4],
MergeParameter mergedParameter 
)
protected

Internal function that creates merged parameter from given combination.

Parameters
combinationThe merge combination to try.
paramsTableThe params table sorted by types in each row.
mergedParameterWill hold the merged parameter.
void Ogre::RTShader::ProgramProcessor::mergeParametersByPredefinedCombinations ( ShaderParameterList  paramsTable[4],
MergeParameterList mergedParams 
)
protected

Internal function that creates merged parameter using pre defined combinations.

Parameters
paramsTableSource parameters table.
mergedParamsThe merged parameters list.
void Ogre::RTShader::ProgramProcessor::mergeParametersReminders ( ShaderParameterList  paramsTable[4],
MergeParameterList mergedParams,
ShaderParameterList splitParams 
)
protected

Merge reminders parameters that could not be merged into one slot using the predefined combinations.

Parameters
paramsTableThe params table sorted by types in each row.
mergedParamsThe merged parameters list.
splitParamsThe split parameters list.
template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr)
inlineinherited

Definition at line 95 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
void *   
)
inlineinherited

Definition at line 101 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

Definition at line 107 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr)
inlineinherited

Definition at line 112 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void Ogre::AllocatedObject< Alloc >::operator delete[] ( void *  ptr,
const char *  ,
int  ,
const char *   
)
inlineinherited

Definition at line 118 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

operator new, with debug line info

Definition at line 67 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz)
inlineinherited

Definition at line 72 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new ( size_t  sz,
void *  ptr 
)
inlineinherited

placement operator new

Definition at line 78 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz,
const char *  file,
int  line,
const char *  func 
)
inlineinherited

array operator new, with debug line info

Definition at line 85 of file OgreMemoryAllocatedObject.h.

template<class Alloc >
void* Ogre::AllocatedObject< Alloc >::operator new[] ( size_t  sz)
inlineinherited

Definition at line 90 of file OgreMemoryAllocatedObject.h.

virtual bool Ogre::RTShader::ProgramProcessor::postCreateGpuPrograms ( ProgramSet programSet)
pure virtual

Called after creation of the GPU programs.

Parameters
programSetThe program set container. Return true on success.

Implemented in Ogre::RTShader::GLSLProgramProcessor, Ogre::RTShader::CGProgramProcessor, Ogre::RTShader::GLSLESProgramProcessor, and Ogre::RTShader::HLSLProgramProcessor.

virtual bool Ogre::RTShader::ProgramProcessor::preCreateGpuPrograms ( ProgramSet programSet)
pure virtual

Called before creation of the GPU programs.

Do several preparation operation such as validation, register compaction and specific target language optimizations.

Parameters
programSetThe program set container. Return true on success.

Implemented in Ogre::RTShader::GLSLProgramProcessor, Ogre::RTShader::CGProgramProcessor, Ogre::RTShader::GLSLESProgramProcessor, and Ogre::RTShader::HLSLProgramProcessor.

void Ogre::RTShader::ProgramProcessor::rebuildFunctionInvocations ( FunctionAtomInstanceList funcAtomList,
MergeParameterList mergedParams,
LocalParameterMap localParamsMap 
)
protected

Rebuild function invocations by replacing references to old source parameters with the matching merged parameters components.

void Ogre::RTShader::ProgramProcessor::rebuildParameterList ( Function func,
int  paramsUsage,
MergeParameterList mergedParams 
)
protected

Rebuild the given parameters list using the merged parameters.

void Ogre::RTShader::ProgramProcessor::replaceParametersReferences ( MergeParameterList mergedParams,
ParameterOperandMap paramsRefMap 
)
protected

Replace references to old parameters with the new merged parameters.

void Ogre::RTShader::ProgramProcessor::replaceSplitParametersReferences ( LocalParameterMap localParamsMap,
ParameterOperandMap paramsRefMap 
)
protected

Replace references to old parameters that have been split with the new local parameters that represents them.

Member Data Documentation

std::map<Function *, String *> Ogre::RTShader::ProgramProcessor::mFunctionMap
protected

Definition at line 265 of file OgreShaderProgramProcessor.h.

int Ogre::RTShader::ProgramProcessor::mMaxTexCoordFloats
protected

Definition at line 264 of file OgreShaderProgramProcessor.h.

int Ogre::RTShader::ProgramProcessor::mMaxTexCoordSlots
protected

Definition at line 262 of file OgreShaderProgramProcessor.h.

MergeCombinationList Ogre::RTShader::ProgramProcessor::mParamMergeCombinations
protected

Definition at line 260 of file OgreShaderProgramProcessor.h.


The documentation for this class was generated from the following file: