rsx/fp: Explicitly insert global functions.

- Functions such as pack/unpack ops must exist before the shared gather functions are declared
This commit is contained in:
kd-11 2017-12-02 15:13:13 +03:00
parent bfb3144f34
commit cdd4fd9867
8 changed files with 25 additions and 8 deletions

View file

@ -444,15 +444,17 @@ std::string FragmentProgramDecompiler::BuildCode()
std::stringstream OS; std::stringstream OS;
insertHeader(OS); insertHeader(OS);
OS << std::endl; OS << "\n";
insertConstants(OS); insertConstants(OS);
OS << std::endl; OS << "\n";
insertIntputs(OS); insertIntputs(OS);
OS << std::endl; OS << "\n";
insertOutputs(OS); insertOutputs(OS);
OS << std::endl; OS << "\n";
//Insert global function definitions
insertGlobalFunctions(OS);
//TODO: Better organization for this
std::string float2 = getFloatTypeName(2); std::string float2 = getFloatTypeName(2);
std::string float4 = getFloatTypeName(4); std::string float4 = getFloatTypeName(4);

View file

@ -207,6 +207,9 @@ protected:
/** insert declaration of shader constants. /** insert declaration of shader constants.
*/ */
virtual void insertConstants(std::stringstream &OS) = 0; virtual void insertConstants(std::stringstream &OS) = 0;
/** insert helper functin definitions.
*/
virtual void insertGlobalFunctions(std::stringstream &OS) = 0;
/** insert beginning of main (signature, temporary declaration...) /** insert beginning of main (signature, temporary declaration...)
*/ */
virtual void insertMainStart(std::stringstream &OS) = 0; virtual void insertMainStart(std::stringstream &OS) = 0;

View file

@ -176,10 +176,13 @@ namespace
} }
} }
void D3D12FragmentDecompiler::insertMainStart(std::stringstream & OS) void D3D12FragmentDecompiler::insertGlobalFunctions(std::stringstream &OS)
{ {
insert_d3d12_legacy_function(OS, true); insert_d3d12_legacy_function(OS, true);
}
void D3D12FragmentDecompiler::insertMainStart(std::stringstream & OS)
{
for (const ParamType &PT : m_parr.params[PF_PARAM_IN]) for (const ParamType &PT : m_parr.params[PF_PARAM_IN])
{ {
for (const ParamItem &PI : PT.items) for (const ParamItem &PI : PT.items)

View file

@ -17,6 +17,7 @@ protected:
virtual void insertIntputs(std::stringstream &OS) override; virtual void insertIntputs(std::stringstream &OS) override;
virtual void insertOutputs(std::stringstream &OS) override; virtual void insertOutputs(std::stringstream &OS) override;
virtual void insertConstants(std::stringstream &OS) override; virtual void insertConstants(std::stringstream &OS) override;
virtual void insertGlobalFunctions(std::stringstream &OS) override;
virtual void insertMainStart(std::stringstream &OS) override; virtual void insertMainStart(std::stringstream &OS) override;
virtual void insertMainEnd(std::stringstream &OS) override; virtual void insertMainEnd(std::stringstream &OS) override;
public: public:

View file

@ -192,10 +192,13 @@ namespace
} }
} }
void GLFragmentDecompilerThread::insertMainStart(std::stringstream & OS) void GLFragmentDecompilerThread::insertGlobalFunctions(std::stringstream &OS)
{ {
glsl::insert_glsl_legacy_function(OS, glsl::glsl_fragment_program); glsl::insert_glsl_legacy_function(OS, glsl::glsl_fragment_program);
}
void GLFragmentDecompilerThread::insertMainStart(std::stringstream & OS)
{
//TODO: Generate input mask during parse stage to avoid this //TODO: Generate input mask during parse stage to avoid this
for (const ParamType& PT : m_parr.params[PF_PARAM_IN]) for (const ParamType& PT : m_parr.params[PF_PARAM_IN])
{ {

View file

@ -28,6 +28,7 @@ protected:
virtual void insertIntputs(std::stringstream &OS) override; virtual void insertIntputs(std::stringstream &OS) override;
virtual void insertOutputs(std::stringstream &OS) override; virtual void insertOutputs(std::stringstream &OS) override;
virtual void insertConstants(std::stringstream &OS) override; virtual void insertConstants(std::stringstream &OS) override;
virtual void insertGlobalFunctions(std::stringstream &OS) override;
virtual void insertMainStart(std::stringstream &OS) override; virtual void insertMainStart(std::stringstream &OS) override;
virtual void insertMainEnd(std::stringstream &OS) override; virtual void insertMainEnd(std::stringstream &OS) override;
}; };

View file

@ -195,10 +195,13 @@ namespace vk
} }
} }
void VKFragmentDecompilerThread::insertMainStart(std::stringstream & OS) void VKFragmentDecompilerThread::insertGlobalFunctions(std::stringstream &OS)
{ {
glsl::insert_glsl_legacy_function(OS, glsl::glsl_fragment_program); glsl::insert_glsl_legacy_function(OS, glsl::glsl_fragment_program);
}
void VKFragmentDecompilerThread::insertMainStart(std::stringstream & OS)
{
//TODO: Generate input mask during parse stage to avoid this //TODO: Generate input mask during parse stage to avoid this
for (const ParamType& PT : m_parr.params[PF_PARAM_IN]) for (const ParamType& PT : m_parr.params[PF_PARAM_IN])
{ {

View file

@ -32,6 +32,7 @@ protected:
virtual void insertIntputs(std::stringstream &OS) override; virtual void insertIntputs(std::stringstream &OS) override;
virtual void insertOutputs(std::stringstream &OS) override; virtual void insertOutputs(std::stringstream &OS) override;
virtual void insertConstants(std::stringstream &OS) override; virtual void insertConstants(std::stringstream &OS) override;
virtual void insertGlobalFunctions(std::stringstream &OS) override;
virtual void insertMainStart(std::stringstream &OS) override; virtual void insertMainStart(std::stringstream &OS) override;
virtual void insertMainEnd(std::stringstream &OS) override; virtual void insertMainEnd(std::stringstream &OS) override;
}; };