//TEST:SIMPLE(filecheck=CHECK_GLSL): -allow-glsl -stage compute -entry computeMain -target glsl //TEST:SIMPLE(filecheck=CHECK_SPV): -allow-glsl -stage compute -entry computeMain -target spirv -emit-spirv-directly //TEST:SIMPLE(filecheck=CHECK_HLSL): -allow-glsl -stage compute -entry computeMain -target hlsl -DTARGET_HLSL // not testing cuda due to missing impl //DISABLE_TEST:SIMPLE(filecheck=CHECK_CUDA): -allow-glsl -stage compute -entry computeMain -target cuda -DTARGET_CUDA // not testing cpp due to missing impl //DISABLE_TEST:SIMPLE(filecheck=CHECK_CPP): -allow-glsl -stage compute -entry computeMain -target cpp -DTARGET_CPP //TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl //TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=BUF):-vk -compute -entry computeMain -allow-glsl -emit-spirv-directly //TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-wgpu -compute -entry computeMain -allow-glsl -xslang -DWGPU -render-feature half //TEST(compute):COMPARE_COMPUTE(filecheck-buffer=BUF):-metal -compute -entry computeMain -allow-glsl -xslang -DMETAL #version 430 //TEST_INPUT:ubuffer(data=[0], stride=4):out,name=outputBuffer buffer MyBlockName2 { uint data[]; } outputBuffer; layout(local_size_x = 4) in; __generic bool test1QuadX() { return true & subgroupQuadSwapHorizontal(T(2)) == T(2) & subgroupQuadSwapVertical(T(2)) == T(2) & subgroupQuadSwapDiagonal(T(3)) == T(3) // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(T(1), 1) == T(1) #endif ; } __generic bool testVQuadX() { typealias gvec = vector; return true & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3)) // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1)) #endif ; } __generic bool test1QuadX() { return true & subgroupQuadSwapHorizontal(T(2)) == T(2) & subgroupQuadSwapVertical(T(2)) == T(2) & subgroupQuadSwapDiagonal(T(3)) == T(3) // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(T(1), 1) == T(1) #endif ; } __generic bool testVQuadX() { typealias gvec = vector; return true & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2)) & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3)) // subgroupQuadBroadcast is not implemented for WGSL and Metal as their intrinsics only accepts const integers expressions. #if !defined(WGPU) & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1)) #endif ; } bool testQuadSwapX() { return true & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() // Disabled on WGSL and Metal as these built-in types are not supported. #if !defined(WGPU) && !defined(METAL) & test1QuadX() // WARNING: intel GPU's lack FP64 support & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() #endif #if !defined(WGPU) & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() & test1QuadX() & testVQuadX() & testVQuadX() & testVQuadX() #endif ; } void computeMain() { outputBuffer.data[0] = true & testQuadSwapX() ; // CHECK_GLSL: void main( // CHECK_SPV: OpEntryPoint // CHECK_HLSL: void computeMain( // CHECK_CUDA: void computeMain( // CHECK_CPP: void _computeMain( // BUF: 1 }