From cd72381432829c955786968acda4c4ca4d1da0d9 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Thu, 17 Oct 2024 09:52:18 +0100 Subject: [PATCH] DXIL Debugger support for ptr cast instructions PtrToI IToPtr --- renderdoc/driver/shaders/dxil/dxil_debug.cpp | 41 +++++++++++++++++++ .../driver/shaders/dxil/dxil_reflect.cpp | 2 - 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/shaders/dxil/dxil_debug.cpp b/renderdoc/driver/shaders/dxil/dxil_debug.cpp index 979d219f0..ff1cb9d10 100644 --- a/renderdoc/driver/shaders/dxil/dxil_debug.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_debug.cpp @@ -2496,6 +2496,7 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, } case Operation::Bitcast: { + RDCASSERTEQUAL(retType->bitWidth, inst.args[0]->type->bitWidth); ShaderVariable a; RDCASSERT(GetShaderVariable(inst.args[0], opCode, dxOpCode, a)); result.value = a.value; @@ -3128,7 +3129,47 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper, break; } case Operation::PtrToI: + { + RDCASSERTEQUAL(inst.args[0]->type->type, Type::TypeKind::Pointer); + RDCASSERTEQUAL(inst.args[0]->type->scalarType, Type::Int); + RDCASSERTEQUAL(retType->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(retType->scalarType, Type::Int); + ShaderVariable a; + RDCASSERT(GetShaderVariable(inst.args[0], opCode, dxOpCode, a)); + const uint32_t c = 0; + uint64_t x = 0; + +#undef _IMPL +#define _IMPL(I, S, U) x = comp(a, c); + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, a.type); + +#undef _IMPL +#define _IMPL(I, S, U) comp(result, c) = (U)x; + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, result.type); + + break; + } case Operation::IToPtr: + { + RDCASSERTEQUAL(inst.args[0]->type->type, Type::TypeKind::Scalar); + RDCASSERTEQUAL(inst.args[0]->type->scalarType, Type::Int); + RDCASSERTEQUAL(retType->type, Type::TypeKind::Pointer); + RDCASSERTEQUAL(retType->scalarType, Type::Int); + ShaderVariable a; + RDCASSERT(GetShaderVariable(inst.args[0], opCode, dxOpCode, a)); + const uint32_t c = 0; + uint64_t x = 0; + +#undef _IMPL +#define _IMPL(I, S, U) x = comp(a, c); + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, a.type); + +#undef _IMPL +#define _IMPL(I, S, U) comp(result, c) = (U)x; + IMPL_FOR_INT_TYPES_FOR_TYPE(_IMPL, result.type); + + break; + } case Operation::AddrSpaceCast: case Operation::ExtractElement: case Operation::InsertElement: diff --git a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp index 37aa93dfb..2ba71c86a 100644 --- a/renderdoc/driver/shaders/dxil/dxil_reflect.cpp +++ b/renderdoc/driver/shaders/dxil/dxil_reflect.cpp @@ -1768,8 +1768,6 @@ rdcstr Program::GetDebugStatus() { switch(inst->op) { - case Operation::PtrToI: - case Operation::IToPtr: case Operation::AddrSpaceCast: case Operation::ExtractElement: case Operation::InsertElement: