[ET-VK][qconv] Read weight buffer as int in pack_q8_conv2d_weights shader#17703
Merged
[ET-VK][qconv] Read weight buffer as int in pack_q8_conv2d_weights shader#17703
Conversation
…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
🔗 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 PendingAs of commit 8d1af98 with merge base 63f9724 ( NEW FAILURE - The following job has failed:
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
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
This was referenced Feb 25, 2026
This PR needs a
|
manuelcandales
approved these changes
Feb 25, 2026
bace537 to
8d1af98
Compare
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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