You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
4.3 KiB
100 lines
4.3 KiB
/******************************************************************
|
|
Copyright (c) 2016 The Khronos Group Inc. All Rights Reserved.
|
|
|
|
This code is protected by copyright laws and contains material proprietary to
|
|
the Khronos Group, Inc. This is UNPUBLISHED PROPRIETARY SOURCE CODE that may not
|
|
be disclosed in whole or in part to third parties, and may not be reproduced,
|
|
republished, distributed, transmitted, displayed, broadcast or otherwise
|
|
exploited in any manner without the express prior written permission of Khronos
|
|
Group. The receipt or possession of this code does not convey any rights to
|
|
reproduce, disclose, or distribute its contents, or to manufacture, use, or sell
|
|
anything that it may describe, in whole or in part other than under the terms of
|
|
the Khronos Adopters Agreement or Khronos Conformance Test Source License
|
|
Agreement as executed between Khronos and the recipient.
|
|
******************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#include "harness/errorHelpers.h"
|
|
#include "harness/kernelHelpers.h"
|
|
#include "harness/typeWrappers.h"
|
|
#include "harness/conversions.h"
|
|
#include "harness/mt19937.h"
|
|
#include "harness/compat.h"
|
|
#include "harness/testHarness.h"
|
|
#include "harness/parseParameters.h"
|
|
|
|
#include <vector>
|
|
|
|
#define SPIRV_CHECK_ERROR(err, fmt, ...) \
|
|
do \
|
|
{ \
|
|
if (err == CL_SUCCESS) break; \
|
|
log_error("%s(%d): Error %d\n" fmt "\n", __FILE__, __LINE__, err, \
|
|
##__VA_ARGS__); \
|
|
return -1; \
|
|
} while (0)
|
|
|
|
|
|
class baseTestClass {
|
|
public:
|
|
baseTestClass() {}
|
|
virtual basefn getFunction() = 0;
|
|
};
|
|
|
|
class spirvTestsRegistry {
|
|
private:
|
|
std::vector<baseTestClass *> testClasses;
|
|
std::vector<test_definition> testDefinitions;
|
|
|
|
public:
|
|
static spirvTestsRegistry &getInstance();
|
|
|
|
test_definition *getTestDefinitions();
|
|
|
|
size_t getNumTests();
|
|
|
|
void addTestClass(baseTestClass *test, const char *testName,
|
|
Version version);
|
|
spirvTestsRegistry() {}
|
|
};
|
|
|
|
template <typename T> T *createAndRegister(const char *name, Version version)
|
|
{
|
|
T *testClass = new T();
|
|
spirvTestsRegistry::getInstance().addTestClass((baseTestClass *)testClass,
|
|
name, version);
|
|
return testClass;
|
|
}
|
|
|
|
#define TEST_SPIRV_FUNC_VERSION(name, version) \
|
|
extern int test_##name(cl_device_id deviceID, cl_context context, \
|
|
cl_command_queue queue, int num_elements); \
|
|
class test_##name##_class : public baseTestClass { \
|
|
private: \
|
|
basefn fn; \
|
|
\
|
|
public: \
|
|
test_##name##_class(): fn(test_##name) {} \
|
|
basefn getFunction() { return fn; } \
|
|
}; \
|
|
test_##name##_class *var_##name = \
|
|
createAndRegister<test_##name##_class>(#name, version); \
|
|
int test_##name(cl_device_id deviceID, cl_context context, \
|
|
cl_command_queue queue, int num_elements)
|
|
|
|
#define TEST_SPIRV_FUNC(name) TEST_SPIRV_FUNC_VERSION(name, Version(1, 2))
|
|
|
|
struct spec_const
|
|
{
|
|
spec_const(cl_int id = 0, size_t sizet = 0, const void *value = NULL)
|
|
: spec_id(id), spec_size(sizet), spec_value(value){};
|
|
cl_int spec_id;
|
|
size_t spec_size;
|
|
const void *spec_value;
|
|
};
|
|
|
|
int get_program_with_il(clProgramWrapper &prog, const cl_device_id deviceID,
|
|
const cl_context context, const char *prog_name,
|
|
spec_const spec_const_def = spec_const());
|
|
std::vector<unsigned char> readSPIRV(const char *file_name); |