Skip to content

[ET-VK][qconv] Read weight buffer as int in pack_q8_conv2d_weights shader#17703

Merged
SS-JIA merged 3 commits intomainfrom
gh/SS-JIA/446/head
Feb 25, 2026
Merged

[ET-VK][qconv] Read weight buffer as int in pack_q8_conv2d_weights shader#17703
SS-JIA merged 3 commits intomainfrom
gh/SS-JIA/446/head

Conversation

@SS-JIA
Copy link
Copy Markdown
Contributor

@SS-JIA SS-JIA commented Feb 25, 2026

Stack from ghstack (oldest at bottom):

The shader previously declared the input weight buffer as int8, requiring
the GL_EXT_shader_8bit_storage extension which is not supported on all
devices. Replace with an int (int32) buffer and extract individual bytes
via shift-and-mask, the same technique used in nchw_to_int8x4_buffer.glsl.
This makes the shader functional on devices without 8-bit buffer support.

Differential Revision: D94314255

…ader

The shader previously declared the input weight buffer as int8, requiring
the GL_EXT_shader_8bit_storage extension which is not supported on all
devices. Replace with an int (int32) buffer and extract individual bytes
via shift-and-mask, the same technique used in nchw_to_int8x4_buffer.glsl.
This makes the shader functional on devices without 8-bit buffer support.

Differential Revision: [D94314255](https://our.internmc.facebook.com/intern/diff/D94314255/)

ghstack-source-id: 344664014
Pull Request resolved: #17703
@pytorch-bot
Copy link
Copy Markdown

pytorch-bot Bot commented Feb 25, 2026

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/17703

Note: Links to docs will display an error until the docs builds have been completed.

❌ 1 New Failure, 145 Pending

As of commit 8d1af98 with merge base 63f9724 (image):

NEW FAILURE - The following job has failed:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 25, 2026
ssjia added 2 commits February 25, 2026 06:18
…a_ shaders

Devices that lack VK_KHR_shader_integer_dot_product (older GPUs, emulators)
currently fail with ShaderNotSupportedError when running int8-quantized
conv2d/linear because the q8ta_ shaders unconditionally require
GL_EXT_integer_dot_product. This adds fallback SPIR-V variants that use a
pure-GLSL software implementation so those devices can still execute the
operators at a performance cost.

Approach: compile-time macro USE_INT8_DOT_PRODUCT_EXT selects the
implementation. Each affected YAML file gains a *_fallback shader variant
compiled with USE_INT8_DOT_PRODUCT_EXT=0. At C++ dispatch time,
adapter_ptr()->supports_int8_dot_product() picks the matching variant.

Changes:
- common.glslh: add dotPacked4x8Acc_fallback() and dotPacked4x8AccSat()
  dispatch macro
- linear_fp_output_tile_int8_int8_compute.glslh: guard extension + use macro
- q8ta_conv2d/pw/linear/linear_gemv .glsl: inject USE_INT8_DOT_PRODUCT_EXT
  template define, guard extension, replace direct EXT calls with macro
- q8ta_conv2d/pw/linear/linear_gemv .yaml: add USE_INT8_DOT_PRODUCT_EXT
  parameter and *_fallback shader variants
- Q8taConv2d/PW/Linear/LinearGemv .cpp: call supports_int8_dot_product() to
  select hardware vs. fallback variant at runtime

Differential Revision: [D94314256](https://our.internmc.facebook.com/intern/diff/D94314256/)

ghstack-source-id: 344664015
Pull Request resolved: #17704
Add a build config flag `etvk.force_no_extensions` that causes all
Vulkan extension support queries in Adapter.h to return false. This
makes it easy to test fallback code paths for devices that lack
optional extensions (e.g. 8-bit storage buffers, float16, dot product)
on a development host that would otherwise report support for them.

Enable with: --config etvk.force_no_extensions=1

Differential Revision: [D94314257](https://our.internmc.facebook.com/intern/diff/D94314257/)

ghstack-source-id: 344664016
Pull Request resolved: #17705
@github-actions
Copy link
Copy Markdown

This PR needs a release notes: label

If your change should be included in the release notes (i.e. would users of this library care about this change?), please use a label starting with release notes:. This helps us keep track and include your important work in the next release notes.

To add a label, you can comment to pytorchbot, for example
@pytorchbot label "release notes: none"

For more information, see
https://github.com/pytorch/pytorch/wiki/PyTorch-AutoLabel-Bot#why-categorize-for-release-notes-and-how-does-it-work.

@SS-JIA SS-JIA changed the base branch from gh/SS-JIA/446/base to main February 25, 2026 19:54
@SS-JIA SS-JIA force-pushed the gh/SS-JIA/446/head branch from bace537 to 8d1af98 Compare February 25, 2026 19:54
@SS-JIA SS-JIA merged commit 4dadf24 into main Feb 25, 2026
164 of 171 checks passed
SS-JIA pushed a commit that referenced this pull request Feb 25, 2026
…ader

The shader previously declared the input weight buffer as int8, requiring
the GL_EXT_shader_8bit_storage extension which is not supported on all
devices. Replace with an int (int32) buffer and extract individual bytes
via shift-and-mask, the same technique used in nchw_to_int8x4_buffer.glsl.
This makes the shader functional on devices without 8-bit buffer support.

Differential Revision: [D94314255](https://our.internmc.facebook.com/intern/diff/D94314255/)

ghstack-source-id: 344664014
Pull Request resolved: #17703
@SS-JIA SS-JIA deleted the gh/SS-JIA/446/head branch February 25, 2026 20:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants