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;
insertHeader(OS);
OS << std::endl;
OS << "\n";
insertConstants(OS);
OS << std::endl;
OS << "\n";
insertIntputs(OS);
OS << std::endl;
OS << "\n";
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 float4 = getFloatTypeName(4);

View File

@ -207,6 +207,9 @@ protected:
/** insert declaration of shader constants.
*/
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...)
*/
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);
}
void D3D12FragmentDecompiler::insertMainStart(std::stringstream & OS)
{
for (const ParamType &PT : m_parr.params[PF_PARAM_IN])
{
for (const ParamItem &PI : PT.items)

View File

@ -17,6 +17,7 @@ protected:
virtual void insertIntputs(std::stringstream &OS) override;
virtual void insertOutputs(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 insertMainEnd(std::stringstream &OS) override;
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);
}
void GLFragmentDecompilerThread::insertMainStart(std::stringstream & OS)
{
//TODO: Generate input mask during parse stage to avoid this
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 insertOutputs(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 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);
}
void VKFragmentDecompilerThread::insertMainStart(std::stringstream & OS)
{
//TODO: Generate input mask during parse stage to avoid this
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 insertOutputs(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 insertMainEnd(std::stringstream &OS) override;
};