Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorJeremy Gebben <jeremyg@lunarg.com>2022-11-10 20:35:18 +0300
committerGitHub <noreply@github.com>2022-11-10 20:35:18 +0300
commit68e8327f2932339422eb6a1043ff395e9e602402 (patch)
treebad0b3c4032d9a2ce5789fe0f3edbff91f5e29fc /source
parent996d4c021f7112356b305b7172fd722d02eefdb5 (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.cpp13
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_);