diff --git a/renderdoc/driver/shaders/spirv/spirv_debug.cpp b/renderdoc/driver/shaders/spirv/spirv_debug.cpp index c8f180035..8183860fa 100644 --- a/renderdoc/driver/shaders/spirv/spirv_debug.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_debug.cpp @@ -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);