Skip to content

Implement the asint16 HLSL Function #99184

Closed
Listed in
@farzonl

Description

@farzonl
  • implement a asint16 bit cast using __detail::bit_cast in clang/lib/Headers/hlsl/hlsl_intrinsics.h use asint as template.
    Add codegen tests to clang/test/CodeGenHLSL/builtins/asint16.hlsl
    Add sema tests to clang/test/SemaHLSL/BuiltIns/asint16-errors.hlsl

DirectX

There were no DXIL opcodes found for asint16.

SPIR-V

OpBitcast:

Description:

Bit pattern-preserving type conversion.

Result Type must be an OpTypePointer, or a
scalar or vector of numerical-type.

Operand must have a type of OpTypePointer, or a
scalar or vector of numerical-type. It must be a
different type than Result Type.

Before version 1.5: If either Result Type or Operand is a
pointer, the other must be a pointer or an integer scalar.
Starting with version 1.5: If either Result Type or Operand is a
pointer, the other must be a pointer, an integer scalar, or an integer
vector.

If both Result Type and the type of Operand are pointers, they both
must point into same storage class.

Behavior is undefined if the storage class of Result
Type
does not match the one used by the operation that produced the
value of Operand.

If Result Type has the same number of components as Operand, they
must also have the same component width, and results are computed per
component.

If Result Type has a different number of components than Operand,
the total number of bits in Result Type must equal the total number of
bits in Operand. Let L be the type, either Result Type or
Operand’s type, that has the larger number of components. Let S be
the other type, with the smaller number of components. The number of
components in L must be an integer multiple of the number of
components in S. The first component (that is, the only or
lowest-numbered component) of S maps to the first components of L,
and so on, up to the last component of S mapping to the last
components of L. Within this mapping, any single component of S
(mapping to multiple components of L) maps its lower-ordered bits to
the lower-numbered components of L.

Word Count Opcode Results Operands

4

124

<id>
Result Type

Result <id>

<id>
Operand

Test Case(s)

Example 1

//dxc asint16_test.hlsl -T lib_6_8 -enable-16bit-types -O0

export int16_t4 fn(half4 p1) {
    return asint16(p1);
}

HLSL:

Syntax

int16_t<> asint16(numeric16_only<> x);

Type Description

Name Template Type Component Type Size
ret scalar, vector, or matrix int16_t any
x scalar, vector, or matrix half, int16_t, or uint16_t any

Minimum Shader Model

This function is supported in the following shader models.

Shader Model Supported
Shader Model 6.2 and higher shader models yes

Shader Stages

See also

Activity

added
HLSLHLSL Language Support
metabugIssue to collect references to a group of similar or related issues.
on Jul 16, 2024
moved this to Ready in HLSL Supporton Oct 30, 2024
moved this from Ready to Planning in HLSL Supporton Oct 30, 2024
moved this from Planning to Ready in HLSL Supporton Dec 3, 2024
metkarpoonam

metkarpoonam commented on Mar 12, 2025

@metkarpoonam
Contributor

I will start working on this.

moved this from Ready to Needs Review in HLSL Supporton Mar 19, 2025

3 remaining items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

HLSLHLSL Language Supportbackend:SPIR-Vbot:HLSLmetabugIssue to collect references to a group of similar or related issues.

Type

No type

Projects

Status

Closed

Milestone

No milestone

Relationships

None yet

    Development

    Participants

    @farzonl@metkarpoonam

    Issue actions

      Implement the `asint16` HLSL Function · Issue #99184 · llvm/llvm-project