Skip to content

Commit e0832ac

Browse files
committed
Merge branch 'main' into clSetKernelArg_negative_invalid_sampler
2 parents 01f9e9f + e936977 commit e0832ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1298
-205
lines changed

.github/workflows/presubmit.yml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
matrix:
1111
build-type: [Release]
1212
gl: [0]
13-
os: [ubuntu-22.04, macos-latest, windows-latest]
13+
os: [ubuntu-22.04, macos-latest, windows-latest, windows-11-arm]
1414
include:
1515
- os: ubuntu-22.04
1616
gl: 1
@@ -61,6 +61,10 @@ jobs:
6161
cd OpenCL-Headers
6262
ln -s CL OpenCL # For OSX builds
6363
cd ..
64+
- name: Fetch SPIR-V Headers
65+
shell: bash
66+
run: |
67+
git clone https://github.com/KhronosGroup/SPIRV-Headers.git
6468
- name: Install Vulkan SDK
6569
uses: humbletim/install-vulkan-sdk@main
6670
with:
@@ -69,12 +73,13 @@ jobs:
6973
- name: Install Android NDK
7074
if: ${{ matrix.arch == 'android-arm' || matrix.arch == 'android-aarch64' }}
7175
run: |
72-
wget https://dl.google.com/android/repository/android-ndk-r27c-linux.zip -O android-ndk.zip
76+
wget https://dl.google.com/android/repository/android-ndk-r28c-linux.zip -O android-ndk.zip
7377
unzip android-ndk.zip -d $HOME
74-
export ANDROID_NDK=$HOME/android-ndk-r27c
78+
export ANDROID_NDK=$HOME/android-ndk-r28c
7579
echo "ANDROID_NDK=$ANDROID_NDK" >> $GITHUB_ENV
7680
export ANDROID_ARCH_ABI=${{ matrix.android_arch_abi }}
7781
echo "ANDROID_ARCH_ABI=$ANDROID_ARCH_ABI" >> $GITHUB_ENV
82+
echo "ANDROID_PLATFORM=29" >> $GITHUB_ENV
7883
- name: Prepare CMake Toolchain file
7984
shell: bash
8085
run: |
@@ -107,7 +112,7 @@ jobs:
107112
if: ${{ matrix.arch == 'android-arm' || matrix.arch == 'android-aarch64' }}
108113
shell: bash
109114
run: |
110-
echo "CMAKE_CONFIG_ARGS_ANDROID=-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ARCH_ABI}" >> $GITHUB_ENV
115+
echo "CMAKE_ADDITIONAL_CONFIG_ARGS=-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ARCH_ABI} -DANDROID_PLATFORM=${ANDROID_PLATFORM}" >> $GITHUB_ENV
111116
- name: Fetch and build OpenCL ICD Loader
112117
shell: bash
113118
run: |
@@ -119,7 +124,7 @@ jobs:
119124
-DCMAKE_BUILD_TYPE=Release \
120125
-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
121126
-DOPENCL_ICD_LOADER_HEADERS_DIR='${{ github.workspace }}'/OpenCL-Headers/ \
122-
"${CMAKE_CONFIG_ARGS_ANDROID}"
127+
${CMAKE_ADDITIONAL_CONFIG_ARGS}
123128
cmake --build . --parallel
124129
- name: Fetch Vulkan Headers
125130
shell: bash
@@ -149,6 +154,7 @@ jobs:
149154
cd build
150155
if [[ ${RUNNER_OS} == "Windows" ]]; then
151156
CMAKE_OPENCL_LIBRARIES_OPTION="OpenCL"
157+
CMAKE_ADDITIONAL_CONFIG_ARGS="-DD3D10_IS_SUPPORTED=ON -DD3D11_IS_SUPPORTED=ON"
152158
else
153159
CMAKE_OPENCL_LIBRARIES_OPTION="-lOpenCL"
154160
if [[ '${{ matrix.arch }}' != android-* ]]; then
@@ -157,8 +163,10 @@ jobs:
157163
fi
158164
cmake .. -G Ninja \
159165
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
160-
-DCMAKE_CACHE_OPTIONS="-DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" \
166+
-DCMAKE_C_COMPILER_LAUNCHER=sccache \
167+
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache \
161168
-DCL_INCLUDE_DIR='${{ github.workspace }}'/OpenCL-Headers \
169+
-DSPIRV_INCLUDE_DIR='${{ github.workspace }}'/SPIRV-Headers \
162170
-DCL_LIB_DIR='${{ github.workspace }}'/OpenCL-ICD-Loader/build \
163171
-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} \
164172
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./bin \
@@ -168,7 +176,7 @@ jobs:
168176
-DVULKAN_IS_SUPPORTED=ON \
169177
-DVULKAN_INCLUDE_DIR='${{ github.workspace }}'/Vulkan-Headers/include/ \
170178
-DVULKAN_LIB_DIR='${{ github.workspace }}'/Vulkan-Loader/build/loader/ \
171-
"${CMAKE_CONFIG_ARGS_ANDROID}"
179+
${CMAKE_ADDITIONAL_CONFIG_ARGS}
172180
cmake --build . --parallel
173181
formatcheck:
174182
name: Check code format

CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ else(CL_INCLUDE_DIR AND CL_LIB_DIR)
5959
message(FATAL_ERROR "Either install OpenCL or pass -DCL_INCLUDE_DIR and -DCL_LIB_DIR")
6060
endif(CL_INCLUDE_DIR AND CL_LIB_DIR)
6161

62+
# SPIRV_INCLUDE_DIR - path to dir with SPIR-V headers
63+
if(NOT SPIRV_INCLUDE_DIR)
64+
message(STATUS "SPIR-V headers haven't been found!")
65+
message(FATAL_ERROR "Pass -DSPIRV_INCLUDE_DIR")
66+
endif(NOT SPIRV_INCLUDE_DIR)
67+
6268
# CLConform_GL_LIBRARIES_DIR - path to OpenGL libraries
6369
if(GL_IS_SUPPORTED AND CLConform_GL_LIBRARIES_DIR)
6470
link_directories(${CLConform_GL_LIBRARIES_DIR})
@@ -195,6 +201,7 @@ if(APPLE)
195201
endif(APPLE)
196202

197203
include_directories(SYSTEM ${CL_INCLUDE_DIR})
204+
include_directories(SYSTEM ${SPIRV_INCLUDE_DIR}/include)
198205
include_directories(${CLConform_SOURCE_DIR}/test_common/harness
199206
${CLConform_SOURCE_DIR}/test_common/gles
200207
${CLConform_SOURCE_DIR}/test_common/gl

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Compiling the CTS requires the following CMake configuration options to be set:
1313

1414
* `CL_INCLUDE_DIR` Points to the unified
1515
[OpenCL-Headers](https://github.com/KhronosGroup/OpenCL-Headers).
16+
* `SPIRV_INCLUDE_DIR` Points to the unified
17+
[SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers).
1618
* `CL_LIB_DIR` Directory containing the OpenCL library to build against.
1719
* `SPIRV_TOOLS_DIR` Directory containing the `spirv-as` and `spirv-val` binaries
1820
to be used in the CTS build process. Alternatively, the location to these binaries
@@ -31,6 +33,7 @@ a build, and compile.
3133
```sh
3234
git clone https://github.com/KhronosGroup/OpenCL-CTS.git
3335
git clone https://github.com/KhronosGroup/OpenCL-Headers.git
36+
git clone https://github.com/KhronosGroup/SPIRV-Headers.git
3437
git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader.git
3538
git clone https://github.com/KhronosGroup/SPIRV-Tools.git
3639
git clone https://github.com/KhronosGroup/SPIRV-Headers.git SPIRV-Tools/external/spirv-headers
@@ -50,6 +53,7 @@ cmake --build SPIRV-Tools/build --config Release
5053
mkdir OpenCL-CTS/build
5154
cmake -S OpenCL-CTS -B OpenCL-CTS/build \
5255
-DCL_INCLUDE_DIR=$PWD/OpenCL-Headers \
56+
-DSPIRV_INCLUDE_DIR=$PWD/SPIRV-Headers \
5357
-DCL_LIB_DIR=$PWD/OpenCL-ICD-Loader/build \
5458
-DSPIRV_TOOLS_DIR=$PWD/SPIRV-Tools/build/tools/ \
5559
-DOPENCL_LIBRARIES=OpenCL

test_common/harness/ThreadPool.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,14 @@ void *ThreadPool_WorkerFunc(void *p)
436436

437437
// drop run count to 0
438438
gRunCount = 0;
439+
#if defined(_M_IX86) || defined(_M_X64)
439440
_mm_mfence();
441+
#elif defined(_M_ARM64)
442+
__dmb(_ARM64_BARRIER_ISHST);
443+
#else
444+
#error Architecture needs an implementation
445+
#endif
446+
440447
#else
441448
if (pthread_mutex_lock(&gAtomicLock))
442449
log_error(
@@ -703,7 +710,13 @@ void ThreadPool_Exit(void)
703710
// http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins
704711
__sync_synchronize();
705712
#elif defined(_MSC_VER)
713+
#if defined(_M_IX86) || defined(_M_X64)
706714
_mm_mfence();
715+
#elif defined(_M_ARM64)
716+
__dmb(_ARM64_BARRIER_ISHST);
717+
#else
718+
#error Architecture needs an implementation
719+
#endif
707720
#else
708721
#warning If this is a weakly ordered memory system, please add a memory barrier here to force this and everything else to memory before we proceed
709722
#endif

test_common/harness/conversions.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323

2424
#include <CL/cl_half.h>
2525

26-
#if defined(__SSE__) || defined(_MSC_VER)
26+
#if defined(__SSE__) || _M_IX86_FP == 1
2727
#include <xmmintrin.h>
2828
#endif
29-
#if defined(__SSE2__) || defined(_MSC_VER)
29+
#if defined(__SSE2__) || _M_IX86_FP == 2 || defined(_M_X64)
3030
#include <emmintrin.h>
3131
#endif
3232

@@ -110,7 +110,7 @@ static long lrintf_clamped(float f)
110110
volatile float x = f;
111111
float magicVal = magic[f < 0];
112112

113-
#if defined(__SSE__) || defined(_WIN32)
113+
#if defined(__SSE__) || _M_IX86_FP == 1
114114
// Defeat x87 based arithmetic, which cant do FTZ, and will round this
115115
// incorrectly
116116
__m128 v = _mm_set_ss(x);
@@ -150,7 +150,7 @@ static long lrint_clamped(double f)
150150
{
151151
volatile double x = f;
152152
double magicVal = magic[f < 0];
153-
#if defined(__SSE2__) || (defined(_MSC_VER))
153+
#if defined(__SSE2__) || _M_IX86_FP == 2 || defined(_M_X64)
154154
// Defeat x87 based arithmetic, which cant do FTZ, and will round this
155155
// incorrectly
156156
__m128d v = _mm_set_sd(x);

test_common/harness/fpcontrol.h

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,36 +37,44 @@ typedef int FPU_mode_type;
3737
#else
3838
typedef int64_t FPU_mode_type;
3939
#endif
40-
#if defined(__i386__) || defined(__x86_64__) || defined(_MSC_VER) \
41-
|| defined(__MINGW32__)
40+
#if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) \
41+
|| defined(_M_X64) || defined(__MINGW32__)
4242
#include <xmmintrin.h>
43+
#elif defined(_M_ARM64)
44+
#include <intrin.h>
4345
#elif defined(__PPC__)
4446
#include <fpu_control.h>
4547
extern __thread fpu_control_t fpu_control;
4648
#elif defined(__mips__)
4749
#include "mips/m32c1.h"
4850
#endif
51+
4952
// Set the reference hardware floating point unit to FTZ mode
50-
inline void ForceFTZ(FPU_mode_type *mode)
53+
inline void ForceFTZ(FPU_mode_type *oldMode)
5154
{
52-
#if defined(__i386__) || defined(__x86_64__) || defined(_MSC_VER) \
53-
|| defined(__MINGW32__)
54-
*mode = _mm_getcsr();
55-
_mm_setcsr(*mode | 0x8040);
55+
#if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) \
56+
|| defined(_M_X64) || defined(__MINGW32__)
57+
*oldMode = _mm_getcsr();
58+
_mm_setcsr(*oldMode | 0x8040);
5659
#elif defined(__PPC__)
57-
*mode = fpu_control;
60+
*oldMode = fpu_control;
5861
fpu_control |= _FPU_MASK_NI;
5962
#elif defined(__arm__)
6063
unsigned fpscr;
6164
__asm__ volatile("fmrx %0, fpscr" : "=r"(fpscr));
62-
*mode = fpscr;
65+
*oldMode = fpscr;
6366
__asm__ volatile("fmxr fpscr, %0" ::"r"(fpscr | (1U << 24)));
6467
// Add 64 bit support
65-
#elif defined(__aarch64__)
68+
#elif defined(__aarch64__) // Clang
6669
uint64_t fpscr;
6770
__asm__ volatile("mrs %0, fpcr" : "=r"(fpscr));
68-
*mode = fpscr;
71+
*oldMode = fpscr;
6972
__asm__ volatile("msr fpcr, %0" ::"r"(fpscr | (1U << 24)));
73+
#elif defined(_M_ARM64) // Visual Studio
74+
uint64_t fpscr;
75+
fpscr = _ReadStatusReg(ARM64_FPSR);
76+
*oldMode = fpscr;
77+
_WriteStatusReg(ARM64_FPCR, fpscr | (1U << 24));
7078
#elif defined(__mips__)
7179
fpa_bissr(FPA_CSR_FS);
7280
#else
@@ -75,26 +83,31 @@ inline void ForceFTZ(FPU_mode_type *mode)
7583
}
7684

7785
// Disable the denorm flush to zero
78-
inline void DisableFTZ(FPU_mode_type *mode)
86+
inline void DisableFTZ(FPU_mode_type *oldMode)
7987
{
80-
#if defined(__i386__) || defined(__x86_64__) || defined(_MSC_VER) \
81-
|| defined(__MINGW32__)
82-
*mode = _mm_getcsr();
83-
_mm_setcsr(*mode & ~0x8040);
88+
#if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) \
89+
|| defined(_M_X64) || defined(__MINGW32__)
90+
*oldMode = _mm_getcsr();
91+
_mm_setcsr(*oldMode & ~0x8040);
8492
#elif defined(__PPC__)
8593
*mode = fpu_control;
8694
fpu_control &= ~_FPU_MASK_NI;
8795
#elif defined(__arm__)
8896
unsigned fpscr;
8997
__asm__ volatile("fmrx %0, fpscr" : "=r"(fpscr));
90-
*mode = fpscr;
98+
*oldMode = fpscr;
9199
__asm__ volatile("fmxr fpscr, %0" ::"r"(fpscr & ~(1U << 24)));
92100
// Add 64 bit support
93-
#elif defined(__aarch64__)
101+
#elif defined(__aarch64__) // Clang
94102
uint64_t fpscr;
95103
__asm__ volatile("mrs %0, fpcr" : "=r"(fpscr));
96-
*mode = fpscr;
104+
*oldMode = fpscr;
97105
__asm__ volatile("msr fpcr, %0" ::"r"(fpscr & ~(1U << 24)));
106+
#elif defined(_M_ARM64) // Visual Studio
107+
uint64_t fpscr;
108+
fpscr = _ReadStatusReg(ARM64_FPSR);
109+
*oldMode = fpscr;
110+
_WriteStatusReg(ARM64_FPCR, fpscr & ~(1U << 24));
98111
#elif defined(__mips__)
99112
fpa_bicsr(FPA_CSR_FS);
100113
#else
@@ -105,16 +118,18 @@ inline void DisableFTZ(FPU_mode_type *mode)
105118
// Restore the reference hardware to floating point state indicated by *mode
106119
inline void RestoreFPState(FPU_mode_type *mode)
107120
{
108-
#if defined(__i386__) || defined(__x86_64__) || defined(_MSC_VER) \
109-
|| defined(__MINGW32__)
121+
#if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) \
122+
|| defined(_M_X64) || defined(__MINGW32__)
110123
_mm_setcsr(*mode);
111124
#elif defined(__PPC__)
112125
fpu_control = *mode;
113126
#elif defined(__arm__)
114127
__asm__ volatile("fmxr fpscr, %0" ::"r"(*mode));
115128
// Add 64 bit support
116-
#elif defined(__aarch64__)
129+
#elif defined(__aarch64__) // Clang
117130
__asm__ volatile("msr fpcr, %0" ::"r"(*mode));
131+
#elif defined(_M_ARM64) // Visual Studio
132+
_WriteStatusReg(ARM64_FPCR, *mode);
118133
#elif defined(__mips__)
119134
// Mips runs by default with DAZ=1 FTZ=1
120135
#else
@@ -125,4 +140,4 @@ inline void RestoreFPState(FPU_mode_type *mode)
125140
#error ForceFTZ and RestoreFPState need implentations
126141
#endif
127142

128-
#endif
143+
#endif

test_common/harness/msvc9.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,9 @@ int __builtin_clz(unsigned int pattern)
786786
#endif // !__has_builtin(__builtin_clz)
787787

788788
#include <intrin.h>
789+
#if !defined(_M_ARM64)
789790
#include <emmintrin.h>
791+
#endif
790792

791793
int usleep(int usec)
792794
{

test_common/harness/parseParameters.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ std::string gCompilationProgram = DEFAULT_COMPILATION_PROGRAM;
3535
bool gDisableSPIRVValidation = false;
3636
std::string gSPIRVValidator = DEFAULT_SPIRV_VALIDATOR;
3737
unsigned gNumWorkerThreads;
38+
bool gListTests = false;
3839

3940
void helpInfo()
4041
{
@@ -49,6 +50,8 @@ void helpInfo()
4950
spir-v Use SPIR-V offline compilation
5051
--num-worker-threads <num>
5152
Select parallel execution with the specified number of worker threads.
53+
--list
54+
List sub-tests
5255
5356
For offline compilation (binary and spir-v modes) only:
5457
--compilation-cache-mode <cache-mode>
@@ -104,6 +107,11 @@ int parseCustomParam(int argc, const char *argv[], const char *ignore)
104107
// option and print its own help.
105108
helpInfo();
106109
}
110+
else if (!strcmp(argv[i], "--list") || !strcmp(argv[i], "-list"))
111+
{
112+
delArg++;
113+
gListTests = true;
114+
}
107115
else if (!strcmp(argv[i], "--compilation-mode"))
108116
{
109117
delArg++;

test_common/harness/parseParameters.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ extern std::string gCompilationCachePath;
4040
extern std::string gCompilationProgram;
4141
extern bool gDisableSPIRVValidation;
4242
extern std::string gSPIRVValidator;
43+
extern bool gListTests;
4344

4445
extern int parseCustomParam(int argc, const char *argv[],
4546
const char *ignore = 0);

0 commit comments

Comments
 (0)