Skip to content

Add texel buffer out-of-bounds checking instrumentation#4038

Merged
s-perron merged 1 commit intoKhronosGroup:masterfrom
greg-lunarg:buf_over9
Dec 1, 2020
Merged

Add texel buffer out-of-bounds checking instrumentation#4038
s-perron merged 1 commit intoKhronosGroup:masterfrom
greg-lunarg:buf_over9

Conversation

@greg-lunarg
Copy link
Copy Markdown
Contributor

This instruments ImageRead, ImageWrite and ImageFetch when applied to
texel buffers.

Also add new (but not yet generated) buffer OOB error codes differentiated
for VUID classification.

@greg-lunarg
Copy link
Copy Markdown
Contributor Author

@dnovillo Could you or someone else there do a review? Thanks!

uint32_t GenLastByteIdx(ref_analysis* ref, InstructionBuilder* builder);

// Clone original original reference encapsulated by |ref| into |builder|.
// This may generate more than one instruction if neccessary.
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clone original image computation starting at |image_id| into |builder|. Computation is part of larger descriptor-based reference |ref|.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually ref is not needed here. I will remove the comment regarding ref.

}

uint32_t InstBindlessCheckPass::CloneOriginalImage(
uint32_t old_image_id, ref_analysis* ref, InstructionBuilder* builder) {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ref is not needed here. I will remove it.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know why I did not notice this before. In a separate PR, could be rename the ref_analysis type to RefAnalysis? That way it will match our coding style.

@dnovillo
Copy link
Copy Markdown
Contributor

@greg-lunarg I will review today/tomorrow. Thanks.

Copy link
Copy Markdown
Collaborator

@s-perron s-perron left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good generally, but I think there is an error when adding the capability.

}

uint32_t InstBindlessCheckPass::CloneOriginalImage(
uint32_t old_image_id, ref_analysis* ref, InstructionBuilder* builder) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know why I did not notice this before. In a separate PR, could be rename the ref_analysis type to RefAnalysis? That way it will match our coding style.

old_image_inst->GetSingleWordInOperand(kSpvCopyObjectOperandIdInIdx),
ref, builder);
new_image_inst = builder->AddUnaryOp(old_image_inst->type_id(),
SpvOpCopyObject, clone_id);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need to keep the OpCopyObject? Can't you just use CloneId?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, good thinking. Since we are cloning, there is no need to create new copy. And yes, I will follow up with change to RefAnalysis.

if (image_ty_inst->GetSingleWordInOperand(kSpvTypeImageArrayed) != 0) return;
if (image_ty_inst->GetSingleWordInOperand(kSpvTypeImageMS) != 0) return;
// Enable ImageQuery Capability if not yet enabled
if (!get_feature_mgr()->HasCapability(SpvCapabilityInt64)) {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you checking for the Int64 capability? Shouldn't this be the ImageQuery capability?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gah! Cut and paste error. Good catch! Thanks!

// If runtime array length support enabled, create variable mappings. Length
// support is always enabled if descriptor init check is enabled.
if (desc_idx_enabled_ || buffer_bounds_enabled_)
// If runtime array length support or buffer bounds checking enabled,
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"checking enabled" should be "checking are enabled"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

This instruments ImageRead, ImageWrite and ImageFetch when applied to
texel buffers.

Also add new (but not yet generated) buffer OOB error codes differentiated
for VUID classification.
@greg-lunarg
Copy link
Copy Markdown
Contributor Author

@dnovillo @s-perron I believe have addressed all concerns to this point.

@s-perron s-perron merged commit 7046c05 into KhronosGroup:master Dec 1, 2020
@greg-lunarg greg-lunarg deleted the buf_over9 branch December 1, 2020 17:25
dneto0 pushed a commit to dneto0/SPIRV-Tools that referenced this pull request Sep 14, 2024
Roll third_party/glslang/ 142cb87..c594de2 (18 commits)

KhronosGroup/glslang@142cb87...c594de2

$ git log 142cb87..c594de2 --date=short --no-merges --format='%ad %ae %s'
2020-12-07 greg Update spirv-tools known-good #2 - Pick up ray tracing terminator fix (KhronosGroup#2478)
2020-12-03 greg Update spirv-tools known-good (KhronosGroup#2473)
2020-11-30 dgkoch update spirv-headers and fix handling of gl_HitTEXT (KhronosGroup#2471)
2020-11-24 dgkoch Add ray query capability if acceleration structure or ray query types declared (KhronosGroup#2469)
2020-11-23 dgkoch Updates for final Vulkan ray tracing extensions (KhronosGroup#2466)
2020-11-16 ShabbyX Compile out code for GL_EXT_shader_image_int64 for ANGLE (KhronosGroup#2463)
2020-11-12 mbechard tweak local_size comparison a bit (KhronosGroup#2456)
2020-11-12 dneto Avoid spuriously adding Geometry capability for vert, tesc, tese (KhronosGroup#2462)
2020-11-12 greg New nonuniform analysis (KhronosGroup#2457)
2020-11-09 jhall1024 Implement GL_EXT_terminate_invocation (KhronosGroup#2454)
2020-11-06 rdb Fix token-pasting macros not working in preprocessor directives. (KhronosGroup#2453)
2020-11-06 laddoc Fix warning in iomapper. (KhronosGroup#2449)
2020-11-04 TobyHector Add GL_EXT_shader_image_int64 support (KhronosGroup#2409)
2020-11-04 laddoc 8. io mapping refine & qualifier member check & resolver expand (KhronosGroup#2396)
2020-11-02 courtneygo Fix build error with Chromium & ANGLE (KhronosGroup#2446)
2020-11-02 dev Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (KhronosGroup#2442)
2020-11-02 justsid Support for CapabilityShaderViewportIndex and CapabilityShaderLayer (KhronosGroup#2432)
2020-11-02 jaebaek Do not use PropagateLineInfoPass and RedundantLineInfoElimPass (KhronosGroup#2440)

Created with:
  roll-dep third_party/glslang

Roll third_party/googletest/ 282877317..e5644f5f1 (35 commits)

google/googletest@2828773...e5644f5

$ git log 282877317..e5644f5f1 --date=short --no-merges --format='%ad %ae %s'
2020-12-08 absl-team Googletest export
2020-12-07 absl-team Googletest export
2020-12-07 absl-team Googletest export
2020-12-07 absl-team Googletest export
2020-12-05 paul.malcolm Fix typo in CLI help message
2020-12-03 absl-team Googletest export
2020-12-02 absl-team Googletest export
2020-12-02 absl-team Googletest export
2020-12-01 absl-team Googletest export
2020-11-30 dmauro Googletest export
2020-11-24 absl-team Googletest export
2020-11-23 absl-team Googletest export
2020-11-19 absl-team Googletest export
2020-11-13 vlee Initialize TestInfo member is_in_another_shard_ in constructor.
2020-11-12 absl-team Googletest export
2020-11-12 absl-team Googletest export
2020-11-12 absl-team Googletest export
2020-11-11 dmauro Googletest export
2020-11-11 dmauro Googletest export
2020-11-11 dmauro Googletest export
2020-11-11 absl-team Googletest export
2020-11-11 marius.brehler Refactor finding python
2020-11-06 absl-team Googletest export
2020-11-06 absl-team Googletest export
2020-10-29 knut Only save original working directory if death tests are enabled
2020-11-08 hyuk.myeong fix typos
2020-11-06 absl-team Googletest export
2020-11-05 ofats Googletest export
2020-10-27 elliott.brossard Add instructions for sanitizer integration
2020-09-16 hyuk.myeong Remove spaces between Google Test and Google Mock
2020-09-15 hyuk.myeong Add follow-up patch for more natural reading
2020-09-15 hyuk.myeong Apply the reviewed comment
2020-09-15 hyuk.myeong Remove a space
2020-09-15 hyuk.myeong Improve the tutorial that may be confusing
2020-02-17 krystian.kuzniarek remove a duplicated include

Created with:
  roll-dep third_party/googletest

Roll third_party/re2/ 166dbbeb3..91420e899 (3 commits)

google/re2@166dbbe...91420e8

$ git log 166dbbeb3..91420e899 --date=short --no-merges --format='%ad %ae %s'
2020-11-25 junyer Remove a double space from mksyntaxgo for Go folks.
2020-11-17 junyer Make benchmarks use substrings of a random text buffer.
2020-11-15 twpayne Add note about Go Unicode character classes

Created with:
  roll-dep third_party/re2

Roll third_party/spirv-headers/ 7845730..f027d53 (7 commits)

KhronosGroup/SPIRV-Headers@7845730...f027d53

$ git log 7845730..f027d53 --date=short --no-merges --format='%ad %ae %s'
2020-11-26 dkoch remove HitTKHR
2020-11-12 dneto MeshShadingNV enables builtins PrimitiveId, Layer, and ViewportIndex
2020-10-16 dkoch de-alias/reassign OpIgnoreIntersectionKHR/OpTerminateRayKHR
2020-06-29 alele Raytracing and Rayquery updates for final
2020-06-15 alele Updated headers for new trace/executeCallable and acceleration structure cast.
2020-11-04 michael.kinsner Reserve additional loop control bit for Intel extension (NoFusionINTEL) (KhronosGroup#175)
2020-11-02 4464295+XAMPPRocky Add EmbarkStudios/rust-gpu to vendor list. (KhronosGroup#174)

Created with:
  roll-dep third_party/spirv-headers

Roll third_party/spirv-tools/ f7da527..3b85234 (39 commits)

KhronosGroup/SPIRV-Tools@f7da527...3b85234

$ git log f7da527..3b85234 --date=short --no-merges --format='%ad %ae %s'
2020-12-08 46493288+sfricke-samsung spirv-val: Add last TessLevelOuter and TessLevelInner VUID (KhronosGroup#4055)
2020-12-08 46493288+sfricke-samsung spirv-val: Add last ClipDistance and CullDistance VUID (KhronosGroup#4054)
2020-12-08 46493288+sfricke-samsung spirv-val: Add last ViewportIndex and Layer VUID (KhronosGroup#4053)
2020-12-08 46493288+sfricke-samsung spirv-val: Add last Position VUID (KhronosGroup#4052)
2020-12-08 alanbaker Allow forward pointer to be used in types generally (KhronosGroup#4044)
2020-12-07 marijns95 opt: Run DCE when SPV_KHR_shader_clock is used (KhronosGroup#4049)
2020-12-07 dnovillo Update CHANGES to include latest ray tacing fixes.
2020-12-07 ehsannas Take new (raytracing) termination instructions into account. (KhronosGroup#4050)
2020-12-03 dnovillo Start SPIRV-Tools v2020.7
2020-12-03 dnovillo Finalize SPIRV-Tools v2020.6
2020-12-02 dnovillo Update CHANGES
2020-12-02 ehsannas Do run DCE if SPV_KHR_ray_query is used. (KhronosGroup#4047)
2020-12-02 dnovillo Update CHANGES
2020-12-01 greg Change ref_analysis to RefAnalysis to follow coding standards. (KhronosGroup#4045)
2020-12-01 stevenperron Handle 8-bit index in elim dead member (KhronosGroup#4043)
2020-12-01 dgkoch Add validation support for the ray tracing built-in variables (KhronosGroup#4041)
2020-12-01 greg Add texel buffer out-of-bounds checking instrumentation (KhronosGroup#4038)
2020-11-30 dgkoch Update spirv-header deps (KhronosGroup#4040)
2020-11-27 afdx Reject SPIR-V that applies void to OpUndef, OpCopyObject, OpPhi (KhronosGroup#4036)
2020-11-25 dneto BuildModule: optionally avoid adding new OpLine instructions (KhronosGroup#4033)
2020-11-25 dneto Remove prototype for unimplemented method (KhronosGroup#4031)
2020-11-25 afdx spirv-fuzz: Fix facts arising from CompositeConstruct (KhronosGroup#4034)
2020-11-24 afdx spirv-fuzz: Do not flatten conditionals that create synonyms (KhronosGroup#4030)
2020-11-23 dneto Update MeshShadingNV dependencies (and land Ray tracing updates) (KhronosGroup#4028)
2020-11-18 greg Fix buffer oob instrumentation for matrix refs (KhronosGroup#4025)
2020-11-13 afdx spirv-opt: Set parent when adding basic block (KhronosGroup#4021)
2020-11-13 jaebaek spirv-opt: properly preserve DebugValue indexes operand (KhronosGroup#4022)
2020-11-11 dneto Use less stack space when validating Vulkan builtins (KhronosGroup#4019)
2020-11-05 46493288+sfricke-samsung spirv-val: Fix SPV_KHR_fragment_shading_rate VUID label (KhronosGroup#4014)
2020-11-05 46493288+sfricke-samsung spirv-val: Label Layer and ViewportIndex VUIDs (KhronosGroup#4013)
2020-11-05 alanbaker Add dead function elimination to -O (KhronosGroup#4015)
2020-11-04 jaebaek Add DebugValue for invisible store in single_store_elim (KhronosGroup#4002)
2020-11-04 dnovillo Fix SSA re-writing in the presence of variable pointers. (KhronosGroup#4010)
2020-11-04 afdx spirv-fuzz: Fixes to pass management (KhronosGroup#4011)
2020-11-03 afdx spirv-fuzz: Add support for reining in rogue fuzzer passes (KhronosGroup#3987)
2020-11-03 vasniktel spirv-fuzz: Fix assertion failure in FuzzerPassAddCompositeExtract (KhronosGroup#3995)
2020-11-03 vasniktel spirv-fuzz: Fix invalid equation facts (KhronosGroup#4009)
2020-11-03 vasniktel spirv-fuzz: Fix bugs in TransformationFlattenConditionalBranch (KhronosGroup#4006)
2020-11-03 andreperezmaselco.developer spirv-fuzz: Fix bug related to transformation applicability (KhronosGroup#3990)

Created with:
  roll-dep third_party/spirv-tools
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants