diff options
author | Jeremy Gebben <jeremyg@lunarg.com> | 2022-11-10 20:35:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-10 20:35:18 +0300 |
commit | 68e8327f2932339422eb6a1043ff395e9e602402 (patch) | |
tree | bad0b3c4032d9a2ce5789fe0f3edbff91f5e29fc /source | |
parent | 996d4c021f7112356b305b7172fd722d02eefdb5 (diff) |
Instrument: Change output buffer offset definitions (#4961)
Add a flags field at the first offset within this buffer.
Define flags to allow buffer OOB checking to be enabled or
disabled at run time. This is to support VK_EXT_pipeline_robustnes.
Diffstat (limited to 'source')
-rw-r--r-- | source/opt/instrument_pass.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/source/opt/instrument_pass.cpp b/source/opt/instrument_pass.cpp index cf3f629a6..88fa5e1dc 100644 --- a/source/opt/instrument_pass.cpp +++ b/source/opt/instrument_pass.cpp @@ -554,7 +554,7 @@ uint32_t InstrumentPass::GetOutputBufferId() { analysis::Type* reg_uint_rarr_ty = GetUintRuntimeArrayType(32); analysis::Integer uint_ty(32, false); analysis::Type* reg_uint_ty = type_mgr->GetRegisteredType(&uint_ty); - analysis::Struct buf_ty({reg_uint_ty, reg_uint_rarr_ty}); + analysis::Struct buf_ty({reg_uint_ty, reg_uint_ty, reg_uint_rarr_ty}); analysis::Type* reg_buf_ty = type_mgr->GetRegisteredType(&buf_ty); uint32_t obufTyId = type_mgr->GetTypeInstruction(reg_buf_ty); // By the Vulkan spec, a pre-existing struct containing a RuntimeArray @@ -566,10 +566,12 @@ uint32_t InstrumentPass::GetOutputBufferId() { assert(context()->get_def_use_mgr()->NumUses(obufTyId) == 0 && "used struct type returned"); deco_mgr->AddDecoration(obufTyId, uint32_t(spv::Decoration::Block)); - deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputSizeOffset, + deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputFlagsOffset, uint32_t(spv::Decoration::Offset), 0); - deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputDataOffset, + deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputSizeOffset, uint32_t(spv::Decoration::Offset), 4); + deco_mgr->AddMemberDecoration(obufTyId, kDebugOutputDataOffset, + uint32_t(spv::Decoration::Offset), 8); uint32_t obufTyPtrId_ = type_mgr->FindPointerToType(obufTyId, spv::StorageClass::StorageBuffer); output_buffer_id_ = TakeNextId(); @@ -579,8 +581,9 @@ uint32_t InstrumentPass::GetOutputBufferId() { {uint32_t(spv::StorageClass::StorageBuffer)}}})); context()->AddGlobalValue(std::move(newVarOp)); context()->AddDebug2Inst(NewGlobalName(obufTyId, "OutputBuffer")); - context()->AddDebug2Inst(NewMemberName(obufTyId, 0, "written_count")); - context()->AddDebug2Inst(NewMemberName(obufTyId, 1, "data")); + context()->AddDebug2Inst(NewMemberName(obufTyId, 0, "flags")); + context()->AddDebug2Inst(NewMemberName(obufTyId, 1, "written_count")); + context()->AddDebug2Inst(NewMemberName(obufTyId, 2, "data")); context()->AddDebug2Inst(NewGlobalName(output_buffer_id_, "output_buffer")); deco_mgr->AddDecorationVal( output_buffer_id_, uint32_t(spv::Decoration::DescriptorSet), desc_set_); |