sampler_t.cl 4.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
  2. // RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -DCHECK_SAMPLER_VALUE -Wspir-compat -triple amdgcn--amdhsa
  3. // RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -DCHECK_SAMPLER_VALUE -triple spir-unknown-unknown
  4. // RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only
  5. // RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only -DCHECK_SAMPLER_VALUE -Wspir-compat -triple amdgcn--amdhsa
  6. // RUN: %clang_cc1 %s -cl-std=CL2.0 -verify -pedantic -fsyntax-only -DCHECK_SAMPLER_VALUE -triple spir-unknown-unknown
  7. #define CLK_ADDRESS_CLAMP_TO_EDGE 2
  8. #define CLK_NORMALIZED_COORDS_TRUE 1
  9. #define CLK_FILTER_NEAREST 0x10
  10. #define CLK_FILTER_LINEAR 0x20
  11. typedef float float4 __attribute__((ext_vector_type(4)));
  12. float4 read_imagef(read_only image1d_t, sampler_t, float);
  13. constant sampler_t glb_smp = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
  14. constant sampler_t glb_smp2; // expected-error{{variable in constant address space must be initialized}}
  15. global sampler_t glb_smp3 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_NEAREST; // expected-error{{sampler type cannot be used with the __local and __global address space qualifiers}} expected-error {{global sampler requires a const or constant address space qualifier}}
  16. const global sampler_t glb_smp3_const = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR; // expected-error{{sampler type cannot be used with the __local and __global address space qualifiers}}
  17. constant sampler_t glb_smp4 = 0;
  18. #ifdef CHECK_SAMPLER_VALUE
  19. // expected-warning@-2{{sampler initializer has invalid Filter Mode bits}}
  20. #endif
  21. constant sampler_t glb_smp5 = 0x1f;
  22. #ifdef CHECK_SAMPLER_VALUE
  23. // expected-warning@-2{{sampler initializer has invalid Addressing Mode bits}}
  24. #endif
  25. constant sampler_t glb_smp6 = glb_smp; // expected-error{{initializer element is not a compile-time constant}}
  26. int f(void);
  27. constant sampler_t glb_smp7 = f(); // expected-error{{initializer element is not a compile-time constant}}
  28. constant sampler_t glb_smp8 = 1.0f; // expected-error{{initializing '__constant sampler_t' with an expression of incompatible type 'float'}}
  29. constant sampler_t glb_smp9 = 0x100000000LL; // expected-error{{sampler_t initialization requires 32-bit integer, not 'long long'}}
  30. void foo(sampler_t); // expected-note{{passing argument to parameter here}}
  31. void constant_sampler(constant sampler_t s); // expected-error{{parameter may not be qualified with an address space}}
  32. constant struct sampler_s {
  33. sampler_t smp; // expected-error{{the 'sampler_t' type cannot be used to declare a structure or union field}}
  34. } sampler_str = {0};
  35. sampler_t bad(void); //expected-error{{declaring function return value of type 'sampler_t' is not allowed}}
  36. sampler_t global_nonconst_smp = 0; // expected-error {{global sampler requires a const or constant address space qualifier}}
  37. const sampler_t glb_smp10 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
  38. const constant sampler_t glb_smp11 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
  39. void kernel ker(sampler_t argsmp) {
  40. local sampler_t smp; // expected-error{{sampler type cannot be used with the __local and __global address space qualifiers}}
  41. const sampler_t const_smp5 = 1.0f; // expected-error{{initializing 'const sampler_t' with an expression of incompatible type 'float'}}
  42. const sampler_t const_smp6 = 0x100000000LL; // expected-error{{sampler_t initialization requires 32-bit integer, not 'long long'}}
  43. foo(5.0f); // expected-error {{passing 'float' to parameter of incompatible type 'sampler_t'}}
  44. sampler_t sa[] = {argsmp, glb_smp}; // expected-error {{array of 'sampler_t' type is invalid in OpenCL}}
  45. }
  46. #if __OPENCL_C_VERSION__ == 200
  47. void bad(sampler_t*); // expected-error{{pointer to type '__generic sampler_t' is invalid in OpenCL}}
  48. #else
  49. void bad(sampler_t*); // expected-error{{pointer to type 'sampler_t' is invalid in OpenCL}}
  50. #endif
  51. void bar() {
  52. sampler_t smp1 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_LINEAR;
  53. sampler_t smp2 = CLK_ADDRESS_CLAMP_TO_EDGE | CLK_NORMALIZED_COORDS_TRUE | CLK_FILTER_NEAREST;
  54. smp1=smp2; //expected-error{{invalid operands to binary expression ('sampler_t' and 'sampler_t')}}
  55. smp1+1; //expected-error{{invalid operands to binary expression ('sampler_t' and 'int')}}
  56. &smp1; //expected-error{{invalid argument type 'sampler_t' to unary expression}}
  57. *smp2; //expected-error{{invalid argument type 'sampler_t' to unary expression}}
  58. foo(smp1+1); //expected-error{{invalid operands to binary expression ('sampler_t' and 'int')}}
  59. }
  60. void smp_args(read_only image1d_t image) {
  61. // Test that parentheses around sampler arguments are ignored.
  62. float4 res = read_imagef(image, (glb_smp10), 0.0f);
  63. }