1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -o - -fsyntax-only %s -verify 2 3// This test validates the diagnostics that are emitted when a variable with a "resource" type 4// is bound to a register using the register annotation 5 6 7template<typename T> 8struct MyTemplatedSRV { 9 __hlsl_resource_t [[hlsl::resource_class(SRV)]] x; 10}; 11 12struct MySRV { 13 __hlsl_resource_t [[hlsl::resource_class(SRV)]] x; 14}; 15 16struct MySampler { 17 __hlsl_resource_t [[hlsl::resource_class(Sampler)]] x; 18}; 19 20struct MyUAV { 21 __hlsl_resource_t [[hlsl::resource_class(UAV)]] x; 22}; 23 24struct MyCBuffer { 25 __hlsl_resource_t [[hlsl::resource_class(CBuffer)]] x; 26}; 27 28 29// expected-error@+1 {{binding type 'i' ignored. The 'integer constant' binding type is no longer supported}} 30MySRV invalid : register(i2); 31 32// expected-error@+1 {{binding type 't' only applies to SRV resources}} 33MyUAV a : register(t2, space1); 34 35// expected-error@+1 {{binding type 'u' only applies to UAV resources}} 36MySampler b : register(u2, space1); 37 38// expected-error@+1 {{binding type 'b' only applies to constant buffer resources}} 39MyTemplatedSRV<int> c : register(b2); 40 41// expected-error@+1 {{binding type 's' only applies to sampler state}} 42MyUAV d : register(s2, space1); 43 44// empty binding prefix cases: 45// expected-error@+1 {{expected identifier}} 46MyTemplatedSRV<int> e: register(); 47 48// expected-error@+1 {{expected identifier}} 49MyTemplatedSRV<int> f: register(""); 50