Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GPU-AV check index buffer out-of-bounds #2492

Open
danginsburg opened this issue Jan 25, 2021 · 1 comment · May be fixed by #8489
Open

GPU-AV check index buffer out-of-bounds #2492

danginsburg opened this issue Jan 25, 2021 · 1 comment · May be fixed by #8489
Assignees
Labels
GPU-AV GPU Assisted Validation Incomplete Missing Validation VUs to be added

Comments

@danginsburg
Copy link

We recently had a GPU hang that GPU Assisted Validation was unable to catch. We were running with robustBufferAccess disabled and had a -1 in our index buffer. The draw with the index buffer was dispatched from an indirect draw command. It would be a nice feature addition if GPUAV could check this case since we couldn't catch it with validation or GPUAV.

@Tony-LunarG @greg-lunarg

@danginsburg danginsburg added the Incomplete Missing Validation VUs to be added label Jan 25, 2021
@greg-lunarg
Copy link
Contributor

@Tony-LunarG I think the technique we chatted about the other day where we insert a compute pipeline to check buffers before they are consumed by the API might be the ticket here. This is another case that would help justify the infrastructure investment.

@spencer-lunarg spencer-lunarg added the GPU-AV GPU Assisted Validation label Oct 14, 2022
jeremyg-lunarg added a commit to jeremyg-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 9, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
jeremyg-lunarg added a commit to jeremyg-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 9, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 13, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 13, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 14, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
jeremyg-lunarg added a commit to jeremyg-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 14, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 16, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 19, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 19, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Aug 27, 2024
This involves splitting up draw.vert into separate shaders for
non-indexed indirect, indexed (both indirect and direct) and mesh
draw calls.

Fixes KhronosGroup#2492
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 3, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 3, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 3, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 3, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 4, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 11, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 12, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 12, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
arno-lunarg pushed a commit to arno-lunarg/Vulkan-ValidationLayers that referenced this issue Sep 12, 2024
Fixes KhronosGroup#2492

Completely rework gpuav_draw, to make it easier to add validation,
and debug existing one.
When adding validation for some VkBuffer, the 2 more importants parts
are 1) creating the validation shader and 2) have an informative error
message. gpuav_draw.cpp has been redesigned around that idea.
Each shader is in charge of its small validation, no uber shader trying
to cater to all needs. Doing that ends up being a mess, with the need
to correctly pipe data to the validation shader.
Validation shaders are now more fine grained.
The C++ has been reworked around some template to streamline the
process of adding validation. The general idea is the following:
1) Declase a new "shader" struct representing validation shader
bindings and push contants
2) fill that struct
3) bind this struct and the validation pipeline
4) dispatch the appropriate number of draws

About 4): we used to dispatch one draw, and do for loop in the shader
to scan buffer elements. GPU are not good at that, instead a proper
amount of draws should be dispatched, each in charge of doing it's
small validation logic.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment