From 924c2883cd09b4f091e637b6ff4f7b7b838e458c Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Sun, 15 Dec 2024 12:05:19 +0000 Subject: [PATCH] DXIL Debugger Implement DXOp::SplitDouble --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 15 ++++++++++++++- renderdoc/driver/shaders/dxil/dxil_reflect.cpp | 1 - 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index e7bf3fc3b..e34db95fb 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -3454,8 +3454,21 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, result.value.u64v[0] = ((uint64_t)b.value.u32v[0] << 32) | a.value.u32v[0]; break; } - // Likely to implement when required case DXOp::SplitDouble: + { + // SplitDouble(value) + RDCASSERTEQUAL(inst.args[1]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[1]->type->scalarType, Type::Float); + RDCASSERTEQUAL(inst.args[1]->type->bitWidth, 64); + ShaderVariable a; + RDCASSERT(GetShaderVariable(inst.args[1], opCode, dxOpCode, a)); + // lo + result.value.u32v[0] = (uint32_t)(a.value.u64v[0] & 0xffffffff); + // hi + result.value.u32v[1] = (uint32_t)(a.value.u64v[0] >> 32); + break; + } + // Likely to implement when required case DXOp::BitcastI16toF16: case DXOp::BitcastF16toI16: case DXOp::BitcastI32toF32: diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 868939780..37590b8b2 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -1826,7 +1826,6 @@ rdcstr Program::GetDebugStatus() case DXOp::CutStream: case DXOp::EmitThenCutStream: case DXOp::GSInstanceID: - case DXOp::SplitDouble: case DXOp::LoadOutputControlPoint: case DXOp::LoadPatchConstant: case DXOp::DomainLocation: