Metal extended shader fixes

This commit is contained in:
Jack Andersen 2016-08-03 13:46:25 -10:00
parent 5f60a33cce
commit 07fcc2db92
4 changed files with 29 additions and 9 deletions

2
hecl/extern/boo vendored

@ -1 +1 @@
Subproject commit 758be7d76cc6fac9fddab6c075dd6bd5f79c0ace Subproject commit 3d96463db7b93a539d0f9407c439628f040bc883

View File

@ -35,11 +35,6 @@ private:
return hecl::Format("float3(%g,%g,%g)", vec.vec[0], vec.vec[1], vec.vec[2]); return hecl::Format("float3(%g,%g,%g)", vec.vec[0], vec.vec[1], vec.vec[2]);
} }
std::string EmitColorRegUse(unsigned idx) const
{
return hecl::Format("lu.colorReg%u", idx);
}
std::string EmitTexGenSource2(TexGenSrc src, int uvIdx) const; std::string EmitTexGenSource2(TexGenSrc src, int uvIdx) const;
std::string EmitTexGenSource4(TexGenSrc src, int uvIdx) const; std::string EmitTexGenSource4(TexGenSrc src, int uvIdx) const;
}; };

View File

@ -72,17 +72,17 @@ private:
return hecl::Format("sampling%u.a", samplingIdx); return hecl::Format("sampling%u.a", samplingIdx);
} }
virtual std::string EmitColorRegUseRaw(unsigned idx) const std::string EmitColorRegUseRaw(unsigned idx) const
{ {
return hecl::Format("colorReg%u", idx); return hecl::Format("colorReg%u", idx);
} }
virtual std::string EmitColorRegUseRGB(unsigned idx) const std::string EmitColorRegUseRGB(unsigned idx) const
{ {
return hecl::Format("colorReg%u.rgb", idx); return hecl::Format("colorReg%u.rgb", idx);
} }
virtual std::string EmitColorRegUseAlpha(unsigned idx) const std::string EmitColorRegUseAlpha(unsigned idx) const
{ {
return hecl::Format("colorReg%u.a", idx); return hecl::Format("colorReg%u.a", idx);
} }

View File

@ -229,6 +229,18 @@ std::string Metal::makeFrag(size_t blockCount, const char** blockNames, bool alp
"{\n" "{\n"
" FragOut out;\n"; " FragOut out;\n";
if (lighting.m_source)
{
retval += " float4 colorReg0 = block0.colorReg0;\n"
" float4 colorReg1 = block0.colorReg1;\n"
" float4 colorReg2 = block0.colorReg2;\n";
}
else
{
retval += " float4 colorReg0 = float4(1.0, 1.0, 1.0, 1.0);\n"
" float4 colorReg1 = float4(1.0, 1.0, 1.0, 1.0);\n"
" float4 colorReg2 = float4(1.0, 1.0, 1.0, 1.0);\n";
}
if (m_lighting) if (m_lighting)
{ {
@ -307,6 +319,19 @@ std::string Metal::makeFrag(size_t blockCount, const char** blockNames, bool alp
"{\n" "{\n"
" FragOut out;\n"; " FragOut out;\n";
if (lighting.m_source)
{
retval += " float4 colorReg0 = block0.colorReg0;\n"
" float4 colorReg1 = block0.colorReg1;\n"
" float4 colorReg2 = block0.colorReg2;\n";
}
else
{
retval += " float4 colorReg0 = float4(1.0, 1.0, 1.0, 1.0);\n"
" float4 colorReg1 = float4(1.0, 1.0, 1.0, 1.0);\n"
" float4 colorReg2 = float4(1.0, 1.0, 1.0, 1.0);\n";
}
if (m_lighting) if (m_lighting)
{ {
if (lighting.m_entry) if (lighting.m_entry)