Commit 1a5d6ad4 by Nicolas Capens

Implement GL_COMBINE.

Bug 21278131 Change-Id: If0cf8aa09b582e0252c4cedd73426764fd4dff53 Reviewed-on: https://swiftshader-review.googlesource.com/3232Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 2be04209
...@@ -1984,7 +1984,23 @@ void Context::applyTextures() ...@@ -1984,7 +1984,23 @@ void Context::applyTextures()
} }
else // GL_COMBINE else // GL_COMBINE
{ {
device->setFirstArgument(unit, es2sw::ConvertSourceArgument(mState.textureUnit[unit].src0RGB));
device->setFirstModifier(unit, es2sw::ConvertSourceOperand(mState.textureUnit[unit].operand0RGB));
device->setSecondArgument(unit, es2sw::ConvertSourceArgument(mState.textureUnit[unit].src1RGB));
device->setSecondModifier(unit, es2sw::ConvertSourceOperand(mState.textureUnit[unit].operand1RGB));
device->setThirdArgument(unit, es2sw::ConvertSourceArgument(mState.textureUnit[unit].src2RGB));
device->setThirdModifier(unit, es2sw::ConvertSourceOperand(mState.textureUnit[unit].operand2RGB));
device->setStageOperation(unit, es2sw::ConvertCombineOperation(mState.textureUnit[unit].combineRGB));
device->setFirstArgumentAlpha(unit, es2sw::ConvertSourceArgument(mState.textureUnit[unit].src0Alpha));
device->setFirstModifierAlpha(unit, es2sw::ConvertSourceOperand(mState.textureUnit[unit].operand0Alpha));
device->setSecondArgumentAlpha(unit, es2sw::ConvertSourceArgument(mState.textureUnit[unit].src1Alpha));
device->setSecondModifierAlpha(unit, es2sw::ConvertSourceOperand(mState.textureUnit[unit].operand1Alpha));
device->setThirdArgumentAlpha(unit, es2sw::ConvertSourceArgument(mState.textureUnit[unit].src2Alpha));
device->setThirdModifierAlpha(unit, es2sw::ConvertSourceOperand(mState.textureUnit[unit].operand2Alpha));
device->setStageOperationAlpha(unit, es2sw::ConvertCombineOperation(mState.textureUnit[unit].combineAlpha));
} }
} }
else else
......
...@@ -399,6 +399,46 @@ namespace es2sw ...@@ -399,6 +399,46 @@ namespace es2sw
default: UNREACHABLE(); return sw::FORMAT_A8B8G8R8; default: UNREACHABLE(); return sw::FORMAT_A8B8G8R8;
} }
} }
sw::TextureStage::StageOperation ConvertCombineOperation(GLenum operation)
{
switch(operation)
{
case GL_REPLACE: return sw::TextureStage::STAGE_SELECTARG1;
case GL_MODULATE: return sw::TextureStage::STAGE_MODULATE;
case GL_ADD: return sw::TextureStage::STAGE_ADD;
case GL_ADD_SIGNED: return sw::TextureStage::STAGE_ADDSIGNED;
case GL_INTERPOLATE: return sw::TextureStage::STAGE_LERP;
case GL_SUBTRACT: return sw::TextureStage::STAGE_SUBTRACT;
case GL_DOT3_RGB: return sw::TextureStage::STAGE_DOT3;
case GL_DOT3_RGBA: return sw::TextureStage::STAGE_DOT3;
default: UNREACHABLE(); return sw::TextureStage::STAGE_SELECTARG1;
}
}
sw::TextureStage::SourceArgument ConvertSourceArgument(GLenum argument)
{
switch(argument)
{
case GL_TEXTURE: return sw::TextureStage::SOURCE_TEXTURE;
case GL_CONSTANT: return sw::TextureStage::SOURCE_CONSTANT;
case GL_PRIMARY_COLOR: return sw::TextureStage::SOURCE_DIFFUSE;
case GL_PREVIOUS: return sw::TextureStage::SOURCE_CURRENT;
default: UNREACHABLE(); return sw::TextureStage::SOURCE_CURRENT;
}
}
sw::TextureStage::ArgumentModifier ConvertSourceOperand(GLenum operand)
{
switch(operand)
{
case GL_SRC_COLOR: return sw::TextureStage::MODIFIER_COLOR;
case GL_ONE_MINUS_SRC_COLOR: return sw::TextureStage::MODIFIER_INVCOLOR;
case GL_SRC_ALPHA: return sw::TextureStage::MODIFIER_ALPHA;
case GL_ONE_MINUS_SRC_ALPHA: return sw::TextureStage::MODIFIER_INVALPHA;
default: UNREACHABLE(); return sw::TextureStage::MODIFIER_COLOR;
}
}
} }
namespace sw2es namespace sw2es
......
...@@ -55,6 +55,9 @@ namespace es2sw ...@@ -55,6 +55,9 @@ namespace es2sw
void ConvertMinFilter(GLenum texFilter, sw::FilterType *minFilter, sw::MipmapType *mipFilter, float maxAnisotropy); void ConvertMinFilter(GLenum texFilter, sw::FilterType *minFilter, sw::MipmapType *mipFilter, float maxAnisotropy);
bool ConvertPrimitiveType(GLenum primitiveType, GLsizei elementCount, es1::PrimitiveType &swPrimitiveType, int &primitiveCount); bool ConvertPrimitiveType(GLenum primitiveType, GLsizei elementCount, es1::PrimitiveType &swPrimitiveType, int &primitiveCount);
sw::Format ConvertRenderbufferFormat(GLenum format); sw::Format ConvertRenderbufferFormat(GLenum format);
sw::TextureStage::StageOperation ConvertCombineOperation(GLenum operation);
sw::TextureStage::SourceArgument ConvertSourceArgument(GLenum argument);
sw::TextureStage::ArgumentModifier ConvertSourceOperand(GLenum operand);
} }
namespace sw2es namespace sw2es
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment