From 5c889e9083d3ca17ca11f4bd9dd4defd3822f90b Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Sun, 15 Dec 2024 12:06:11 +0000 Subject: [PATCH] DXIL Debugger Implement DXOp::Bitcast* DXOp::BitcastI16toF16 DXOp::BitcastF16toI16 DXOp::BitcastI32toF32 DXOp::BitcastF32toI32 DXOp::BitcastI64toF64 DXOp::BitcastF64toI64 --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 32 ++++++++++++++++++- .../driver/shaders/dxil/dxil_reflect.cpp | 6 ---- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index e34db95fb..b8dbf7b27 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -3468,13 +3468,43 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, result.value.u32v[1] = (uint32_t)(a.value.u64v[0] >> 32); break; } - // Likely to implement when required case DXOp::BitcastI16toF16: case DXOp::BitcastF16toI16: + { + // BitcastI16toF16(value) + // BitcastF16toI16(value) + RDCASSERTEQUAL(inst.args[1]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[1]->type->bitWidth, 16); + ShaderVariable a; + RDCASSERT(GetShaderVariable(inst.args[1], opCode, dxOpCode, a)); + result.value.u16v[0] = a.value.u16v[0]; + break; + } case DXOp::BitcastI32toF32: case DXOp::BitcastF32toI32: + { + // BitcastI32toF32(value) + // BitcastF32toI32(value) + RDCASSERTEQUAL(inst.args[1]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[1]->type->bitWidth, 32); + ShaderVariable a; + RDCASSERT(GetShaderVariable(inst.args[1], opCode, dxOpCode, a)); + result.value.u32v[0] = a.value.u32v[0]; + break; + } case DXOp::BitcastI64toF64: case DXOp::BitcastF64toI64: + { + // BitcastI64toF64(value) + // BitcastF64toI64(value) + RDCASSERTEQUAL(inst.args[1]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[1]->type->bitWidth, 64); + ShaderVariable a; + RDCASSERT(GetShaderVariable(inst.args[1], opCode, dxOpCode, a)); + result.value.u64v[0] = a.value.u64v[0]; + break; + } + // Likely to implement when required case DXOp::LegacyDoubleToFloat: case DXOp::LegacyDoubleToSInt32: case DXOp::LegacyDoubleToUInt32: diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 37590b8b2..ada7a79f4 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -1846,12 +1846,6 @@ rdcstr Program::GetDebugStatus() case DXOp::WavePrefixOp: case DXOp::QuadReadLaneAt: case DXOp::QuadOp: - case DXOp::BitcastI16toF16: - case DXOp::BitcastF16toI16: - case DXOp::BitcastI32toF32: - case DXOp::BitcastF32toI32: - case DXOp::BitcastI64toF64: - case DXOp::BitcastF64toI64: case DXOp::LegacyDoubleToFloat: case DXOp::LegacyDoubleToSInt32: case DXOp::LegacyDoubleToUInt32: