# Ogre::RTShader::ProgramProcessor Class Reference
[RTShader]

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

`#include <OgreShaderProgramProcessor.h>`

Inheritance diagram for Ogre::RTShader::ProgramProcessor:
[legend]

List of all members.

## Classes

struct | MergeCombination
class | MergeParameter

## Public Member Functions

| ProgramProcessor ()
| Class constructor.
virtual | ~ProgramProcessor ()
| Class destructor.
virtual const String & | getTargetLanguage () const =0
| Return the target language of this processor.
virtual bool | preCreateGpuPrograms (ProgramSet *programSet)=0
| Called before creation of the GPU programs.
virtual bool | postCreateGpuPrograms (ProgramSet *programSet)=0
| Called after creation of the GPU programs.
void * | operator new (size_t sz, const char *file, int line, const char *func)
| operator new, with debug line info
void * | operator new (size_t sz)
void * | operator new (size_t sz, void *ptr)
| placement operator new
void * | operator new[] (size_t sz, const char *file, int line, const char *func)
| array operator new, with debug line info
void * | operator new[] (size_t sz)
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 *)

## Protected Types

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

## Protected Member Functions

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

## Static Protected Member Functions

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

## Protected Attributes

MergeCombinationList | mParamMergeCombinations
int | mMaxTexCoordSlots
int | mMaxTexCoordFloats

## 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

typedef map<Parameter*, ParameterPtr>::type Ogre::RTShader::ProgramProcessor::LocalParameterMap `[protected]`

Definition at line 162 of file OgreShaderProgramProcessor.h.

typedef vector<MergeCombination>::type Ogre::RTShader::ProgramProcessor::MergeCombinationList `[protected]`

Definition at line 157 of file OgreShaderProgramProcessor.h.

typedef vector<MergeParameter>::type Ogre::RTShader::ProgramProcessor::MergeParameterList `[protected]`

Definition at line 130 of file OgreShaderProgramProcessor.h.

typedef vector<Operand*>::type Ogre::RTShader::ProgramProcessor::OperandPtrVector `[protected]`

Definition at line 160 of file OgreShaderProgramProcessor.h.

typedef map<Parameter*, OperandPtrVector>::type Ogre::RTShader::ProgramProcessor::ParameterOperandMap `[protected]`

Definition at line 161 of file OgreShaderProgramProcessor.h.

## Constructor & Destructor Documentation

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

Class constructor.

Parameters:

  | type | The 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:

  | paramList | The parameter list.
  | outParamsTable | Will hold the texcoord params sorted by types in each row.

virtual bool Ogre::RTShader::ProgramProcessor::compactVsOutputs | ( | Function * | vsMain,
|  | Function * | fsMain |
| ) |  |  | `[protected, virtual]`

Compact the vertex shader output registers.

Parameters:

  | vsMain | The vertex shader entry function.
  | fsMain | The 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:

  | vsMain | The vertex shader entry function.
  | outTexCoordSlots | Will hold the number of used output texcoord slots.
  | outTexCoordFloats | Will 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 | ) | `[static, protected]`

Return number of floats needed by the given type.

static int Ogre::RTShader::ProgramProcessor::getParameterMaskByFloatCount | ( | int | floatCount | ) | `[static, protected]`

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 | ) | `[static, protected]`

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]`

Return the target language of this processor.

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

void Ogre::RTShader::ProgramProcessor::mergeParameters | ( | ShaderParameterList | paramsTable[4],
|  | MergeParameterList & | mergedParams,
|  | ShaderParameterList & | splitParams |
| ) |  |  | `[protected]`

Merge the parameters from the given table.

Parameters:

  | paramsTable | Source parameters table.
  | mergedParams | Will 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:

  | combination | The merge combination to try.
  | paramsTable | The params table sorted by types in each row.
  | mergedParameter | Will 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:

  | paramsTable | Source parameters table.
  | mergedParams | The 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:

  | paramsTable | The params table sorted by types in each row.
  | mergedParams | The merged parameters list.
  | splitParams | The split parameters list.

template<class Alloc >

void Ogre::AllocatedObject< Alloc >::operator delete | ( | void * | ptr | ) | `[inherited]`

Definition at line 95 of file OgreMemoryAllocatedObject.h.

template<class Alloc >

void Ogre::AllocatedObject< Alloc >::operator delete | ( | void * | ptr,
|  | const char * | ,
|  | int | ,
|  | const char * |  |
| ) |  |  | `[inherited]`

Definition at line 107 of file OgreMemoryAllocatedObject.h.

template<class Alloc >

void Ogre::AllocatedObject< Alloc >::operator delete | ( | void * | ptr,
|  | void * |  |
| ) |  |  | `[inherited]`

Definition at line 101 of file OgreMemoryAllocatedObject.h.

template<class Alloc >

void Ogre::AllocatedObject< Alloc >::operator delete[] | ( | void * | ptr,
|  | const char * | ,
|  | int | ,
|  | const char * |  |
| ) |  |  | `[inherited]`

Definition at line 118 of file OgreMemoryAllocatedObject.h.

template<class Alloc >

void Ogre::AllocatedObject< Alloc >::operator delete[] | ( | void * | ptr | ) | `[inherited]`

Definition at line 112 of file OgreMemoryAllocatedObject.h.

template<class Alloc >

void* Ogre::AllocatedObject< Alloc >::operator new | ( | size_t | sz,
|  | const char * | file,
|  | int | line,
|  | const char * | func |
| ) |  |  | `[inherited]`

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 | ) | `[inherited]`

Definition at line 72 of file OgreMemoryAllocatedObject.h.

template<class Alloc >

void* Ogre::AllocatedObject< Alloc >::operator new | ( | size_t | sz,
|  | void * | ptr |
| ) |  |  | `[inherited]`

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 |
| ) |  |  | `[inherited]`

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 | ) | `[inherited]`

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:

  | programSet | The program set container. Return true on success.

Implemented in Ogre::RTShader::CGProgramProcessor, Ogre::RTShader::GLSLProgramProcessor, 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:

  | programSet | The program set container. Return true on success.

Implemented in Ogre::RTShader::CGProgramProcessor, Ogre::RTShader::GLSLProgramProcessor, 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

int Ogre::RTShader::ProgramProcessor::mMaxTexCoordFloats `[protected]`

Definition at line 253 of file OgreShaderProgramProcessor.h.

int Ogre::RTShader::ProgramProcessor::mMaxTexCoordSlots `[protected]`

Definition at line 252 of file OgreShaderProgramProcessor.h.

MergeCombinationList Ogre::RTShader::ProgramProcessor::mParamMergeCombinations `[protected]`

Definition at line 251 of file OgreShaderProgramProcessor.h.

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

- OgreShaderProgramProcessor.h

Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Wed Nov 3 2010 19:25:06