Only apply the enable mask on instructions requiring predication.
diff --git a/src/GLES2/libEGL/main.cpp b/src/GLES2/libEGL/main.cpp
index cb3db37..52a7dde 100644
--- a/src/GLES2/libEGL/main.cpp
+++ b/src/GLES2/libEGL/main.cpp
@@ -115,6 +115,7 @@
switch(reason)
{
case DLL_PROCESS_ATTACH:
+ // MessageBoxA(0, "Attach debugger now and press OK", "SwiftShader loaded", MB_OK);
return eglAttachProcess();
break;
case DLL_THREAD_ATTACH:
diff --git a/src/Shader/PixelRoutine.cpp b/src/Shader/PixelRoutine.cpp
index 42f6189..bb0b862 100644
--- a/src/Shader/PixelRoutine.cpp
+++ b/src/Shader/PixelRoutine.cpp
@@ -4007,7 +4007,7 @@
if(dst.w) d.w = Min(d.w, Float4(1.0f));
}
- if(shader->containsDynamicBranching())
+ if(instruction->isPredicated())
{
Vector4f pDst; // FIXME: Rename
diff --git a/src/Shader/Shader.cpp b/src/Shader/Shader.cpp
index 7f0f68f..da0a84f 100644
--- a/src/Shader/Shader.cpp
+++ b/src/Shader/Shader.cpp
@@ -1024,6 +1024,15 @@
return opcode == OPCODE_ENDLOOP || opcode == OPCODE_ENDREP || opcode == OPCODE_ENDWHILE;
}
+ bool Shader::Instruction::isPredicated() const
+ {
+ return predicate ||
+ analysisBranch ||
+ analysisBreak ||
+ analysisContinue ||
+ analysisLeave;
+ }
+
Shader::Shader() : serialID(serialCounter++)
{
usedSamplers = 0;
diff --git a/src/Shader/Shader.hpp b/src/Shader/Shader.hpp
index e785d12..6486ed9 100644
--- a/src/Shader/Shader.hpp
+++ b/src/Shader/Shader.hpp
@@ -430,6 +430,8 @@
bool isLoop() const;
bool isEndLoop() const;
+ bool isPredicated() const;
+
Opcode opcode;
union
diff --git a/src/Shader/VertexProgram.cpp b/src/Shader/VertexProgram.cpp
index 75dc5df..a07fbb5 100644
--- a/src/Shader/VertexProgram.cpp
+++ b/src/Shader/VertexProgram.cpp
@@ -283,7 +283,7 @@
if(dst.w) d.w = Min(d.w, Float4(1.0f));
}
- if(shader->containsDynamicBranching())
+ if(instruction->isPredicated())
{
Vector4f pDst; // FIXME: Rename