microsoft / microsoft/DirectXShaderCompiler

[DirectX] Performing a `mul` between two double vectors produces invalid DXIL

Open
#8,208 1 comment 1 reaction 2 assignees View on GitHub

@damyanp is already working on this.

Since Mar 13, 2026.

bug
Dominant language
C++
Stars
3.7k
Forks
900
Avg merge
2d 11h
Merged PRs (30d)
44

Description

Description
Performing a mul between two double vectors results in a DXIL validation error about the intrinsic call call double @dx.op.dot4.f64 being invalid.
Unlike the dot function which is expected to map directly to the dot DXIL op, the mul function should not be restricted to such a limitation.

Steps to Reproduce
https://hlsl.godbolt.org/z/asnerhMsd

Compile the following HLSL with -T cs_6_8

RWStructuredBuffer<double4> In;
RWStructuredBuffer<double> Out;

[numthreads(1, 1, 1)]
void main() {
    Out[0] = mul(In[0], In[1]);
}

Actual Behavior
Compiler output:

error: validation errors
<source>:6:14: error: DXIL intrinsic overload must be valid.
note: at '%14 = call double @dx.op.dot4.f64(i32 56, double %10, double %11, double %12, double %13, double %5, double %6, double %7, double %8)' in block '#0' of function 'main'.
Validation failed.


Compiler returned: 5

Environment

  • DXC version 1.8.2505

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.