-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.cpp
96 lines (83 loc) · 2.82 KB
/
utils.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*****************************************************************************
* Copyright (c) 2013-2016 Intel Corporation
* All rights reserved.
*
* WARRANTY DISCLAIMER
*
* THESE MATERIALS ARE PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THESE
* MATERIALS, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Intel Corporation is the author of the Materials, and requests that all
* problem reports or change requests be submitted to it directly
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <memory.h>
#include <windows.h>
#include "CL\cl.h"
#include "CL\cl_ext.h"
#include "utils.h"
#include <assert.h>
//we want to use POSIX functions
#pragma warning( push )
#pragma warning( disable : 4996 )
void LogInfo(const char* str, ...)
{
if (str)
{
va_list args;
va_start(args, str);
vfprintf(stdout, str, args);
va_end(args);
}
}
void LogError(const char* str, ...)
{
if (str)
{
va_list args;
va_start(args, str);
vfprintf(stderr, str, args);
va_end(args);
}
}
// Upload the OpenCL C source code to output argument source
// The memory resource is implicitly allocated in the function
// and should be deallocated by the caller
int ReadSourceFromFile(const char* fileName, char** source, size_t* sourceSize)
{
int errorCode = CL_SUCCESS;
FILE* fp = NULL;
fopen_s(&fp, fileName, "rb");
if (fp == NULL)
{
LogError("Error: Couldn't find program source file '%s'.\n", fileName);
errorCode = CL_INVALID_VALUE;
}
else {
fseek(fp, 0, SEEK_END);
*sourceSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
*source = new char[*sourceSize];
if (*source == NULL)
{
LogError("Error: Couldn't allocate %d bytes for program source from file '%s'.\n", *sourceSize, fileName);
errorCode = CL_OUT_OF_HOST_MEMORY;
}
else {
fread(*source, 1, *sourceSize, fp);
}
}
return errorCode;
}
#pragma warning( pop )