Implement OpVectorExtract/InsertDynamic

This commit is contained in:
baldurk
2020-04-13 17:57:15 +01:00
parent a9f7819bf7
commit 2318305c96
2 changed files with 73 additions and 0 deletions
@@ -711,6 +711,44 @@ void ThreadState::StepNext(ShaderDebugState *state,
break;
}
case Op::VectorExtractDynamic:
{
OpVectorExtractDynamic extract(it);
ShaderVariable var = GetSrc(extract.vector);
ShaderVariable idx = GetSrc(extract.index);
uint32_t comp = idx.value.u.x;
if(VarTypeByteSize(var.type) == 8)
var.value.u64v[0] = var.value.u64v[comp];
else
var.value.uv[0] = var.value.uv[comp];
// result is now scalar
var.columns = 1;
SetDst(state, extract.result, var);
break;
}
case Op::VectorInsertDynamic:
{
OpVectorInsertDynamic insert(it);
ShaderVariable var = GetSrc(insert.vector);
ShaderVariable scalar = GetSrc(insert.component);
ShaderVariable idx = GetSrc(insert.index);
uint32_t comp = idx.value.u.x;
if(VarTypeByteSize(var.type) == 8)
var.value.u64v[comp] = scalar.value.u64v[0];
else
var.value.uv[comp] = scalar.value.uv[0];
SetDst(state, insert.result, var);
break;
}
case Op::Select:
{
OpSelect select(it);
@@ -563,6 +563,8 @@ void main()
38 %test_38
39 %test_39
40 %test_40
41 %test_41
42 %test_42
; test OpVectorShuffle
%test_0 = OpLabel
@@ -1085,6 +1087,8 @@ void main()
%scale_31 = OpFAdd %float %zerof %float_1_234
%Color_31 = OpVectorTimesScalar %float4 %vec_31 %scale_31
)EOSHADER"
R"EOSHADER(
OpStore %Color %Color_31
OpBranch %break
@@ -1187,6 +1191,37 @@ void main()
OpStore %Color %Color_40
OpBranch %break
%test_41 = OpLabel
%a_41 = OpFAdd %float %zerof %float_15
%b_41 = OpFAdd %float %zerof %float_4
%c_41 = OpFAdd %float %zerof %float_neg4
%d_41 = OpFAdd %float %zerof %float_1_234
%x_41 = OpFAdd %float %zerof %float_neg15
%comp_41 = OpIAdd %uint %zerou %uint_3
%vec_41 = OpCompositeConstruct %float4 %a_41 %b_41 %c_41 %d_41
%extracted_41 = OpVectorExtractDynamic %float %vec_41 %comp_41
%Color_41 = OpCompositeConstruct %float4 %extracted_41 %extracted_41 %extracted_41 %extracted_41
OpStore %Color %Color_41
OpBranch %break
%test_42 = OpLabel
%a_42 = OpFAdd %float %zerof %float_15
%b_42 = OpFAdd %float %zerof %float_4
%c_42 = OpFAdd %float %zerof %float_neg4
%d_42 = OpFAdd %float %zerof %float_1_234
%x_42 = OpFAdd %float %zerof %float_neg15
%comp_42 = OpIAdd %uint %zerou %uint_2
%vec_42 = OpCompositeConstruct %float4 %a_42 %b_42 %c_42 %d_42
%Color_42 = OpVectorInsertDynamic %float4 %vec_42 %x_42 %comp_42
OpStore %Color %Color_42
OpBranch %break
%default = OpLabel
OpStore %Color %float_0000
OpBranch %break