Implement OpVectorShuffle

This commit is contained in:
baldurk
2020-04-07 17:43:30 +01:00
parent ebe53d2be1
commit 1b6cc3a70e
@@ -487,6 +487,34 @@ void ThreadState::StepNext(ShaderDebugState *state,
break;
}
case Op::VectorShuffle:
{
OpVectorShuffle shuffle(it);
ShaderVariable var;
const DataType &type = debugger.GetType(shuffle.resultType);
var.type = type.scalar().Type();
var.rows = 1;
var.columns = RDCMAX(1U, (uint32_t)shuffle.components.size());
ShaderVariable src1 = GetSrc(shuffle.vector1);
ShaderVariable src2 = GetSrc(shuffle.vector2);
for(size_t i = 0; i < shuffle.components.size(); i++)
{
uint32_t c = shuffle.components[i];
if(c <= 3)
var.value.uv[i] = src1.value.uv[c];
else
var.value.uv[i] = src2.value.uv[c - 4];
}
SetDst(state, shuffle.result, var);
break;
}
case Op::Select:
{
OpSelect select(it);