CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
466 lines
32 KiB
HLSL
466 lines
32 KiB
HLSL
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \
|
|
// RUN: -DRESOURCE=StructuredBuffer %s | FileCheck -DRESOURCE=StructuredBuffer \
|
|
// RUN: -check-prefix=EMPTY %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
|
|
// RUN: -DRESOURCE=StructuredBuffer %s | FileCheck -DRESOURCE=StructuredBuffer \
|
|
// RUN: -check-prefixes=CHECK,CHECK-SRV,CHECK-SUBSCRIPT,CHECK-LOAD,CHECK-BINDING %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \
|
|
// RUN: -DRESOURCE=RWStructuredBuffer %s | FileCheck -DRESOURCE=RWStructuredBuffer \
|
|
// RUN: -check-prefix=EMPTY %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
|
|
// RUN: -DRESOURCE=RWStructuredBuffer %s | FileCheck -DRESOURCE=RWStructuredBuffer \
|
|
// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-SUBSCRIPT-UAV,CHECK-COUNTER,CHECK-LOAD,CHECK-COUNTER-HANDLE %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \
|
|
// RUN: -DRESOURCE=AppendStructuredBuffer %s | FileCheck -DRESOURCE=AppendStructuredBuffer \
|
|
// RUN: -check-prefix=EMPTY %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
|
|
// RUN: -DRESOURCE=AppendStructuredBuffer %s | FileCheck -DRESOURCE=AppendStructuredBuffer \
|
|
// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-NOSUBSCRIPT,CHECK-APPEND,CHECK-COUNTER-HANDLE %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \
|
|
// RUN: -DRESOURCE=ConsumeStructuredBuffer %s | FileCheck -DRESOURCE=ConsumeStructuredBuffer \
|
|
// RUN: -check-prefix=EMPTY %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
|
|
// RUN: -DRESOURCE=ConsumeStructuredBuffer %s | FileCheck -DRESOURCE=ConsumeStructuredBuffer \
|
|
// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-NOSUBSCRIPT,CHECK-CONSUME,CHECK-COUNTER-HANDLE %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump -DEMPTY \
|
|
// RUN: -DRESOURCE=RasterizerOrderedStructuredBuffer %s | FileCheck -DRESOURCE=RasterizerOrderedStructuredBuffer \
|
|
// RUN: -check-prefix=EMPTY %s
|
|
//
|
|
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
|
|
// RUN: -DRESOURCE=RasterizerOrderedStructuredBuffer %s | FileCheck -DRESOURCE=RasterizerOrderedStructuredBuffer \
|
|
// RUN: -check-prefixes=CHECK,CHECK-UAV,CHECK-ROV,CHECK-SUBSCRIPT-UAV,CHECK-LOAD,CHECK-COUNTER-HANDLE %s
|
|
|
|
// This test tests two different AST generations for each structured buffer.
|
|
// The "EMPTY" test mode verifies the AST generated by forward declaration
|
|
// of the HLSL types which happens on initializing the HLSL external AST with
|
|
// an AST Context.
|
|
|
|
// The non-empty mode has a use that requires the resource type be complete,
|
|
// which results in the AST being populated by the external AST source. That
|
|
// case covers the full implementation of the template declaration and the
|
|
// instantiated specialization.
|
|
|
|
// EMPTY: ClassTemplateDecl {{.*}} implicit [[RESOURCE]]
|
|
// EMPTY-NEXT: TemplateTypeParmDecl {{.*}} typename depth 0 index 0 element_type
|
|
// EMPTY-NEXT: ConceptSpecializationExpr {{.*}} 'bool' Concept {{.*}} '__is_structured_resource_element_compatible'
|
|
// EMPTY-NEXT: ImplicitConceptSpecializationDecl
|
|
// EMPTY-NEXT: TemplateArgument type 'type-parameter-0-0'
|
|
// EMPTY-NEXT: TemplateTypeParmType {{.*}} 'type-parameter-0-0' dependent depth 0 index 0
|
|
// EMPTY-NEXT: TemplateTypeParm {{.*}} depth 0 index 0
|
|
// EMPTY-NEXT: TemplateArgument type 'element_type':'type-parameter-0-0'
|
|
// EMPTY-NEXT: TemplateTypeParmType {{.*}} 'element_type' dependent depth 0 index 0
|
|
// EMPTY-NEXT: TemplateTypeParm {{.*}} 'element_type'
|
|
// EMPTY-NEXT: CXXRecordDecl {{.*}} implicit <undeserialized declarations> class [[RESOURCE]]
|
|
// EMPTY-NEXT: FinalAttr {{.*}} Implicit final
|
|
|
|
// There should be no more occurrences of [[RESOURCE]]
|
|
// EMPTY-NOT: {{[^[:alnum:]]}}[[RESOURCE]]
|
|
|
|
#ifndef EMPTY
|
|
|
|
RESOURCE<float> Buffer;
|
|
|
|
#endif
|
|
|
|
// CHECK: ClassTemplateDecl {{.*}} implicit referenced [[RESOURCE]]
|
|
// CHECK-NEXT: TemplateTypeParmDecl {{.*}} typename depth 0 index 0 element_type
|
|
// CHECK-NEXT: ConceptSpecializationExpr {{.*}} 'bool' Concept {{.*}} '__is_structured_resource_element_compatible'
|
|
// CHECK-NEXT: ImplicitConceptSpecializationDecl {{.*}}
|
|
// CHECK-NEXT: TemplateArgument type 'type-parameter-0-0'
|
|
// CHECK-NEXT: TemplateTypeParmType {{.*}} 'type-parameter-0-0' dependent depth 0 index 0
|
|
// CHECK-NEXT: TemplateTypeParm {{.*}} depth 0 index 0
|
|
// CHECK-NEXT: TemplateArgument type 'element_type':'type-parameter-0-0'
|
|
// CHECK-NEXT: TemplateTypeParmType {{.*}} 'element_type' dependent depth 0 index 0
|
|
// CHECK-NEXT: TemplateTypeParm {{.*}} 'element_type'
|
|
// CHECK-NEXT: CXXRecordDecl {{.*}} implicit class [[RESOURCE]] definition
|
|
|
|
// CHECK: FinalAttr {{.*}} Implicit final
|
|
// CHECK-NEXT: FieldDecl {{.*}} implicit __handle '__hlsl_resource_t
|
|
// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
|
|
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
|
|
|
|
// Default constructor
|
|
|
|
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void ()' inline
|
|
// CHECK-NEXT: CompoundStmt
|
|
// CHECK-NEXT: BinaryOperator {{.*}} '='
|
|
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-NEXT: CallExpr
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_uninitializedhandle' '__hlsl_resource_t (__hlsl_resource_t) noexcept'
|
|
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: AlwaysInlineAttr
|
|
|
|
// Copy constructor
|
|
|
|
// CHECK: CXXConstructorDecl {{.*}} [[RESOURCE]]<element_type> 'void (const hlsl::[[RESOURCE]]<element_type> &)' inline
|
|
// CHECK-NEXT: ParmVarDecl {{.*}} other 'const hlsl::[[RESOURCE]]<element_type> &'
|
|
// CHECK-NEXT: CompoundStmt
|
|
// CHECK-NEXT: BinaryOperator {{.*}} '='
|
|
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'
|
|
// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '='
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} lvalue .__counter_handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} lvalue .__counter_handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'
|
|
// CHECK-NEXT: AlwaysInlineAttr
|
|
|
|
// operator=
|
|
|
|
// CHECK: CXXMethodDecl {{.*}} operator= 'hlsl::[[RESOURCE]]<element_type> &(const hlsl::[[RESOURCE]]<element_type> &)'
|
|
// CHECK-NEXT: ParmVarDecl {{.*}} other 'const hlsl::[[RESOURCE]]<element_type> &'
|
|
// CHECK-NEXT: CompoundStmt
|
|
// CHECK-NEXT: BinaryOperator {{.*}} '='
|
|
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: MemberExpr {{.*}} lvalue .__handle
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'
|
|
// CHECK-COUNTER-HANDLE: BinaryOperator {{.*}} '='
|
|
// CHECK-COUNTER-HANDLE: MemberExpr {{.*}} lvalue .__counter_handle
|
|
// CHECK-COUNTER-HANDLE: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-COUNTER-HANDLE: MemberExpr {{.*}} lvalue .__counter_handle
|
|
// CHECK-COUNTER-HANDLE: DeclRefExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue ParmVar {{.*}} 'other' 'const hlsl::[[RESOURCE]]<element_type> &'
|
|
// CHECK-NEXT: ReturnStmt
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: AlwaysInlineAttr
|
|
|
|
// Static __createFromBinding method
|
|
|
|
// CHECK-BINDING: CXXMethodDecl {{.*}} __createFromBinding 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *)' static
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} range 'int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} name 'const char *'
|
|
// CHECK-BINDING-NEXT: CompoundStmt
|
|
// CHECK-BINDING-NEXT: DeclStmt
|
|
// CHECK-BINDING-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
|
|
// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-BINDING-NEXT: CallExpr
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'
|
|
// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'registerNo' 'unsigned int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'spaceNo' 'unsigned int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} 'range' 'int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'index' 'unsigned int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'const char *' lvalue ParmVar {{.*}} 'name' 'const char *'
|
|
// CHECK-BINDING-NEXT: ReturnStmt
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// Static __createFromImplicitBinding method
|
|
|
|
// CHECK-BINDING: CXXMethodDecl {{.*}} __createFromImplicitBinding 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *)' static
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} orderId 'unsigned int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} range 'int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
|
|
// CHECK-BINDING-NEXT: ParmVarDecl {{.*}} name 'const char *'
|
|
// CHECK-BINDING-NEXT: CompoundStmt {{.*}}
|
|
// CHECK-BINDING-NEXT: DeclStmt {{.*}}
|
|
// CHECK-BINDING-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
|
|
// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-BINDING-NEXT: CallExpr
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'
|
|
// CHECK-BINDING-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'orderId' 'unsigned int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'spaceNo' 'unsigned int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} 'range' 'int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'index' 'unsigned int'
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'const char *' lvalue ParmVar {{.*}} 'name' 'const char *'
|
|
// CHECK-BINDING-NEXT: ReturnStmt
|
|
// CHECK-BINDING-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-BINDING-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// CHECK-COUNTER-HANDLE: CXXMethodDecl {{.*}} __createFromBindingWithImplicitCounter 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *, unsigned int)' static
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} registerNo 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} range 'int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} name 'const char *'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} counterOrderId 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CompoundStmt
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclStmt
|
|
// CHECK-COUNTER-HANDLE-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t {{.*}}'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CallExpr
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefrombinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'registerNo' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'spaceNo' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} 'range' 'int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'index' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'const char *' lvalue ParmVar {{.*}} 'name' 'const char *'
|
|
// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t {{.*}}'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CallExpr
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept'
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'counterOrderId' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'spaceNo' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ReturnStmt
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// CHECK-COUNTER-HANDLE: CXXMethodDecl {{.*}} __createFromImplicitBindingWithImplicitCounter 'hlsl::[[RESOURCE]]<element_type> (unsigned int, unsigned int, int, unsigned int, const char *, unsigned int)' static
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} orderId 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} spaceNo 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} range 'int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} index 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} name 'const char *'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ParmVarDecl {{.*}} counterOrderId 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CompoundStmt
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclStmt
|
|
// CHECK-COUNTER-HANDLE-NEXT: VarDecl {{.*}} tmp 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t {{.*}}'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CallExpr
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_handlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int, int, unsigned int, const char *) noexcept'
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'orderId' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'spaceNo' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'int' lvalue ParmVar {{.*}} 'range' 'int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'index' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'const char *' lvalue ParmVar {{.*}} 'name' 'const char *'
|
|
// CHECK-COUNTER-HANDLE-NEXT: BinaryOperator {{.*}} '__hlsl_resource_t {{.*}}]]' '='
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__counter_handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CStyleCastExpr {{.*}} '__hlsl_resource_t {{.*}}'
|
|
// CHECK-COUNTER-HANDLE-NEXT: CallExpr
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_counterhandlefromimplicitbinding' '__hlsl_resource_t (__hlsl_resource_t, unsigned int, unsigned int) noexcept'
|
|
// CHECK-COUNTER-HANDLE-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'counterOrderId' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'spaceNo' 'unsigned int'
|
|
// CHECK-COUNTER-HANDLE-NEXT: ReturnStmt
|
|
// CHECK-COUNTER-HANDLE-NEXT: DeclRefExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue Var {{.*}} 'tmp' 'hlsl::[[RESOURCE]]<element_type>'
|
|
// CHECK-COUNTER-HANDLE-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// Subscript operators
|
|
|
|
// CHECK-SUBSCRIPT: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(unsigned int) const'
|
|
// CHECK-SUBSCRIPT-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
|
|
// CHECK-SUBSCRIPT-NEXT: CompoundStmt
|
|
// CHECK-SUBSCRIPT-NEXT: ReturnStmt
|
|
// CHECK-SUBSCRIPT-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
|
|
// CHECK-SUBSCRIPT-NEXT: CStyleCastExpr {{.*}} 'hlsl_device element_type *'
|
|
// CHECK-SUBSCRIPT-NEXT: CallExpr
|
|
// CHECK-SUBSCRIPT-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'
|
|
// CHECK-SUBSCRIPT-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-SUBSCRIPT-SAME{LITERAL}: [[hlsl::resource_class(
|
|
// CHECK-SUBSCRIPT-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-SUBSCRIPT-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
|
|
// CHECK-SUBSCRIPT-SAME: ' lvalue .__handle {{.*}}
|
|
// CHECK-SUBSCRIPT-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-SUBSCRIPT-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'Index' 'unsigned int'
|
|
// CHECK-SUBSCRIPT-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// CHECK-SUBSCRIPT-UAV: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &(unsigned int) const'
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: CompoundStmt
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: ReturnStmt
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: CStyleCastExpr {{.*}} 'hlsl_device element_type *'
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: CallExpr
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-SUBSCRIPT-UAV-SAME{LITERAL}: [[hlsl::resource_class(
|
|
// CHECK-SUBSCRIPT-UAV-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-SUBSCRIPT-UAV-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
|
|
// CHECK-SUBSCRIPT-UAV-SAME: ' lvalue .__handle {{.*}}
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'Index' 'unsigned int'
|
|
// CHECK-SUBSCRIPT-UAV-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(unsigned int) const'
|
|
// CHECK-NOSUBSCRIPT-NOT: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &(unsigned int) const'
|
|
|
|
// Load method
|
|
|
|
// CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int) const'
|
|
// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
|
|
// CHECK-LOAD-NEXT: CompoundStmt
|
|
// CHECK-LOAD-NEXT: ReturnStmt
|
|
// CHECK-LOAD-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
|
|
// CHECK-LOAD-NEXT: CStyleCastExpr {{.*}} 'hlsl_device element_type *'
|
|
// CHECK-LOAD-NEXT: CallExpr
|
|
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'
|
|
// CHECK-LOAD-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-LOAD-SAME{LITERAL}: [[hlsl::resource_class(
|
|
// CHECK-LOAD-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
|
|
// CHECK-LOAD-SAME: ' lvalue .__handle {{.*}}
|
|
// CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'Index' 'unsigned int'
|
|
// CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// Load with status method
|
|
|
|
// CHECK-LOAD: CXXMethodDecl {{.*}} Load 'element_type (unsigned int, out unsigned int) const'
|
|
// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Index 'unsigned int'
|
|
// CHECK-LOAD-NEXT: ParmVarDecl {{.*}} Status 'unsigned int &__restrict'
|
|
// CHECK-LOAD-NEXT: HLSLParamModifierAttr {{.*}} out
|
|
// CHECK-LOAD-NEXT: CompoundStmt
|
|
// CHECK-LOAD-NEXT: ReturnStmt
|
|
// CHECK-LOAD-NEXT: CStyleCastExpr {{.*}} 'element_type'
|
|
// CHECK-LOAD-NEXT: CallExpr
|
|
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_load_with_status' 'void (...) noexcept'
|
|
// CHECK-LOAD-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-LOAD-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-LOAD-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
|
|
// CHECK-LOAD-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
|
|
// CHECK-LOAD-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'Index' 'unsigned int'
|
|
// CHECK-LOAD-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'Status' 'unsigned int &__restrict'
|
|
// CHECK-LOAD-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// IncrementCounter method
|
|
|
|
// CHECK-COUNTER: CXXMethodDecl {{.*}} IncrementCounter 'unsigned int ()'
|
|
// CHECK-COUNTER-NEXT: CompoundStmt
|
|
// CHECK-COUNTER-NEXT: ReturnStmt
|
|
// CHECK-COUNTER-NEXT: CStyleCastExpr {{.*}} 'unsigned int'
|
|
// CHECK-COUNTER-NEXT: CallExpr
|
|
// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'
|
|
// CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle
|
|
// CHECK-COUNTER-NEXT: CXXThisExpr {{.*}} 'hlsl::RWStructuredBuffer<element_type>' lvalue implicit this
|
|
// CHECK-COUNTER-NEXT: IntegerLiteral {{.*}} 'int' 1
|
|
// CHECK-COUNTER-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// DecrementCounter method
|
|
|
|
// CHECK-COUNTER: CXXMethodDecl {{.*}} DecrementCounter 'unsigned int ()'
|
|
// CHECK-COUNTER-NEXT: CompoundStmt
|
|
// CHECK-COUNTER-NEXT: ReturnStmt
|
|
// CHECK-COUNTER-NEXT: CStyleCastExpr {{.*}} 'unsigned int'
|
|
// CHECK-COUNTER-NEXT: CallExpr
|
|
// CHECK-COUNTER-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'
|
|
// CHECK-COUNTER-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-COUNTER-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle
|
|
// CHECK-COUNTER-NEXT: CXXThisExpr {{.*}} 'hlsl::RWStructuredBuffer<element_type>' lvalue implicit this
|
|
// CHECK-COUNTER-NEXT: IntegerLiteral {{.*}} 'int' -1
|
|
// CHECK-COUNTER-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// Append method
|
|
|
|
// CHECK-APPEND: CXXMethodDecl {{.*}} Append 'void (element_type)'
|
|
// CHECK-APPEND-NEXT: ParmVarDecl {{.*}} value 'element_type'
|
|
// CHECK-APPEND-NEXT: CompoundStmt
|
|
// CHECK-APPEND-NEXT: BinaryOperator {{.*}} 'hlsl_device element_type' '='
|
|
// CHECK-APPEND-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
|
|
// CHECK-APPEND-NEXT: CStyleCastExpr {{.*}} 'hlsl_device element_type *'
|
|
// CHECK-APPEND-NEXT: CallExpr
|
|
// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'
|
|
// CHECK-APPEND-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-APPEND-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-APPEND-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-APPEND-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle
|
|
// CHECK-APPEND-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-APPEND-NEXT: CStyleCastExpr {{.*}} 'unsigned int'
|
|
// CHECK-APPEND-NEXT: CallExpr
|
|
// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'
|
|
// CHECK-APPEND-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-APPEND-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-APPEND-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-APPEND-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle
|
|
// CHECK-APPEND-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-APPEND-NEXT: IntegerLiteral {{.*}} 'int' 1
|
|
// CHECK-APPEND-NEXT: DeclRefExpr {{.*}} 'element_type' lvalue ParmVar {{.*}} 'value' 'element_type'
|
|
|
|
// Consume method
|
|
|
|
// CHECK-CONSUME: CXXMethodDecl {{.*}} Consume 'element_type ()'
|
|
// CHECK-CONSUME-NEXT: CompoundStmt
|
|
// CHECK-CONSUME-NEXT: ReturnStmt
|
|
// CHECK-CONSUME-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
|
|
// CHECK-CONSUME-NEXT: CStyleCastExpr {{.*}} 'hlsl_device element_type *'
|
|
// CHECK-CONSUME-NEXT: CallExpr
|
|
// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getpointer' 'void (...) noexcept'
|
|
// CHECK-CONSUME-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__handle
|
|
// CHECK-CONSUME-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-CONSUME-NEXT: CStyleCastExpr {{.*}} 'unsigned int'
|
|
// CHECK-CONSUME-NEXT: CallExpr
|
|
// CHECK-CONSUME-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_buffer_update_counter' 'unsigned int (__hlsl_resource_t, int) noexcept'
|
|
// CHECK-CONSUME-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
|
|
// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-CONSUME-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]' lvalue .__counter_handle
|
|
// CHECK-CONSUME-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-CONSUME-NEXT: IntegerLiteral {{.*}} 'int' -1
|
|
|
|
// GetDimensions method
|
|
|
|
// CHECK: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int, out unsigned int)'
|
|
// CHECK-NEXT: ParmVarDecl {{.*}} numStructs 'unsigned int &__restrict'
|
|
// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
|
|
// CHECK-NEXT: ParmVarDecl {{.*}} stride 'unsigned int &__restrict'
|
|
// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
|
|
// CHECK-NEXT: CompoundStmt
|
|
// CHECK-NEXT: CallExpr
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_x' 'void (__hlsl_resource_t, unsigned int &) noexcept'
|
|
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}}
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'numStructs' 'unsigned int &__restrict'
|
|
// CHECK-NEXT: CallExpr
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getstride' 'void (__hlsl_resource_t, unsigned int &) noexcept'
|
|
// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t {{.*}}' lvalue .__handle {{.*}}
|
|
// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[RESOURCE]]<element_type>' lvalue implicit this
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'stride' 'unsigned int &__restrict'
|
|
// CHECK-NEXT: AlwaysInlineAttr {{.*}} Implicit always_inline
|
|
|
|
// CHECK: ClassTemplateSpecializationDecl {{.*}} class [[RESOURCE]] definition
|
|
// CHECK: TemplateArgument type 'float'
|
|
// CHECK-NEXT: BuiltinType {{.*}} 'float'
|
|
// CHECK-NEXT: FinalAttr {{.*}} Implicit final
|
|
// CHECK-NEXT: FieldDecl {{.*}} implicit referenced __handle '__hlsl_resource_t
|
|
// CHECK-SRV-SAME{LITERAL}: [[hlsl::resource_class(SRV)]]
|
|
// CHECK-UAV-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-ROV-SAME{LITERAL}: [[hlsl::is_rov]]
|
|
// CHECK-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(float)]]
|
|
// CHECK-COUNTER-HANDLE: FieldDecl {{.*}} implicit referenced __counter_handle '__hlsl_resource_t
|
|
// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::resource_class(UAV)]]
|
|
// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::raw_buffer]]
|
|
// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::is_counter]]
|
|
// CHECK-COUNTER-HANDLE-SAME{LITERAL}: [[hlsl::contained_type(float)]]
|