1 //
2 // Copyright (c) 2017 The Khronos Group Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 #include "harness.h"
17
SubTestMiscMultipleCreates(cl_context context,cl_command_queue command_queue,ID3D10Device * pDevice)18 void SubTestMiscMultipleCreates(
19 cl_context context,
20 cl_command_queue command_queue,
21 ID3D10Device* pDevice)
22 {
23 ID3D10Buffer* pBuffer = NULL;
24 ID3D10Texture2D* pTexture = NULL;
25 HRESULT hr = S_OK;
26 cl_mem mem[5] = {NULL, NULL, NULL, NULL, NULL};
27 cl_int result = CL_SUCCESS;
28
29 HarnessD3D10_TestBegin("Misc: Multiple Creates");
30
31 // create the D3D10 resources
32 {
33 D3D10_TEXTURE2D_DESC desc;
34 memset(&desc, 0, sizeof(desc) );
35 desc.Width = 256;
36 desc.Height = 256;
37 desc.MipLevels = 4;
38 desc.ArraySize = 4;
39 desc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
40 desc.SampleDesc.Count = 1;
41 desc.SampleDesc.Quality = 0;
42 desc.Usage = D3D10_USAGE_DEFAULT;
43 desc.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D10_BIND_RENDER_TARGET;
44 desc.CPUAccessFlags = 0;
45 desc.MiscFlags = 0;
46
47 hr = pDevice->CreateTexture2D(&desc, NULL, &pTexture);
48 TestRequire(SUCCEEDED(hr), "Failed to create texture.");
49 }
50
51 // create the D3D10 buffer
52 {
53 D3D10_BUFFER_DESC desc = {0};
54 desc.ByteWidth = 1024;
55 desc.Usage = D3D10_USAGE_DEFAULT;
56 desc.CPUAccessFlags = 0;
57 desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
58 desc.MiscFlags = 0;
59 hr = pDevice->CreateBuffer(&desc, NULL, &pBuffer);
60 TestRequire(SUCCEEDED(hr), "Creating vertex buffer failed!");
61 }
62
63 mem[0] = clCreateFromD3D10BufferKHR(
64 context,
65 0,
66 pBuffer,
67 &result);
68 TestRequire(result == CL_SUCCESS, "clCreateFromD3D10BufferKHR");
69
70 mem[1] = clCreateFromD3D10BufferKHR(
71 context,
72 0,
73 pBuffer,
74 &result);
75 TestRequire(result == CL_INVALID_D3D10_RESOURCE_KHR, "clCreateFromD3D10BufferKHR succeeded when it shouldn't");
76
77 mem[2] = clCreateFromD3D10Texture2DKHR(
78 context,
79 0,
80 pTexture,
81 1,
82 &result);
83 TestRequire(result == CL_SUCCESS, "clCreateFromD3D10Texture2DKHR failed");
84
85 mem[3] = clCreateFromD3D10Texture2DKHR(
86 context,
87 0,
88 pTexture,
89 1,
90 &result);
91 TestRequire(result == CL_INVALID_D3D10_RESOURCE_KHR, "clCreateFromD3D10Texture2DKHR succeeded when it shouldn't");
92
93 mem[4] = clCreateFromD3D10Texture2DKHR(
94 context,
95 0,
96 pTexture,
97 16,
98 &result);
99 TestRequire(result == CL_INVALID_VALUE, "clCreateFromD3D10Texture2DKHR succeeded when it shouldn't");
100
101
102 Cleanup:
103
104 for (UINT i = 0; i < 4; ++i)
105 {
106 if (mem[i])
107 {
108 clReleaseMemObject(mem[i]);
109 }
110 }
111 if (pBuffer)
112 {
113 pBuffer->Release();
114 }
115 if (pTexture)
116 {
117 pTexture->Release();
118 }
119
120 HarnessD3D10_TestEnd();
121 }
122
SubTestMiscAcquireRelease(cl_context context,cl_command_queue command_queue,ID3D10Device * pDevice)123 void SubTestMiscAcquireRelease(
124 cl_context context,
125 cl_command_queue command_queue,
126 ID3D10Device* pDevice)
127 {
128 ID3D10Buffer* pBuffer = NULL;
129 ID3D10Texture2D* pTexture = NULL;
130 HRESULT hr = S_OK;
131
132 cl_int result = CL_SUCCESS;
133 cl_mem mem[2] = {NULL, NULL};
134
135 HarnessD3D10_TestBegin("Misc: Acquire Release");
136
137 // create the D3D10 resources
138 {
139 D3D10_TEXTURE2D_DESC desc;
140 memset(&desc, 0, sizeof(desc) );
141 desc.Width = 256;
142 desc.Height = 256;
143 desc.MipLevels = 4;
144 desc.ArraySize = 4;
145 desc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
146 desc.SampleDesc.Count = 1;
147 desc.SampleDesc.Quality = 0;
148 desc.Usage = D3D10_USAGE_DEFAULT;
149 desc.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D10_BIND_RENDER_TARGET;
150 desc.CPUAccessFlags = 0;
151 desc.MiscFlags = 0;
152
153 hr = pDevice->CreateTexture2D(&desc, NULL, &pTexture);
154 TestRequire(SUCCEEDED(hr), "Failed to create texture.");
155 }
156
157 // create the D3D10 buffer
158 {
159 D3D10_BUFFER_DESC desc = {0};
160 desc.ByteWidth = 1024;
161 desc.Usage = D3D10_USAGE_DEFAULT;
162 desc.CPUAccessFlags = 0;
163 desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
164 desc.MiscFlags = 0;
165 hr = pDevice->CreateBuffer(&desc, NULL, &pBuffer);
166 TestRequire(SUCCEEDED(hr), "Creating vertex buffer failed!");
167 }
168
169 // create cl_mem objects for the resources
170 mem[0] = clCreateFromD3D10BufferKHR(
171 context,
172 0,
173 pBuffer,
174 &result);
175 TestRequire(result == CL_SUCCESS, "clCreateFromD3D10BufferKHR");
176 mem[1] = clCreateFromD3D10Texture2DKHR(
177 context,
178 0,
179 pTexture,
180 1,
181 &result);
182 TestRequire(result == CL_SUCCESS, "clCreateFromD3D10Texture2DKHR failed");
183
184 // test some acquire/release patterns
185 result = clEnqueueAcquireD3D10ObjectsKHR(
186 command_queue,
187 1,
188 &mem[1],
189 0,
190 NULL,
191 NULL);
192 TestRequire(result == CL_SUCCESS, "clEnqueueAcquireD3D10ObjectsKHR failed.");
193
194 result = clEnqueueAcquireD3D10ObjectsKHR(
195 command_queue,
196 1,
197 &mem[0],
198 0,
199 NULL,
200 NULL);
201 TestRequire(result == CL_SUCCESS, "clEnqueueAcquireD3D10ObjectsKHR failed.");
202
203 result = clEnqueueReleaseD3D10ObjectsKHR(
204 command_queue,
205 1,
206 &mem[1],
207 0,
208 NULL,
209 NULL);
210 TestRequire(result == CL_SUCCESS, "clEnqueueReleaseD3D10ObjectsKHR failed.");
211
212
213 result = clEnqueueReleaseD3D10ObjectsKHR(
214 command_queue,
215 1,
216 &mem[0],
217 0,
218 NULL,
219 NULL);
220 TestRequire(result == CL_SUCCESS, "clEnqueueReleaseD3D10ObjectsKHR failed.");
221
222 Cleanup:
223
224 for (UINT i = 0; i < 2; ++i)
225 {
226 if (mem[i])
227 {
228 clReleaseMemObject(mem[i]);
229 }
230 }
231 if (pBuffer)
232 {
233 pBuffer->Release();
234 }
235 if (pTexture)
236 {
237 pTexture->Release();
238 }
239
240 HarnessD3D10_TestEnd();
241 }
242
TestDeviceMisc(cl_device_id device,cl_context context,cl_command_queue command_queue,ID3D10Device * pDevice)243 void TestDeviceMisc(
244 cl_device_id device,
245 cl_context context,
246 cl_command_queue command_queue,
247 ID3D10Device* pDevice)
248 {
249 SubTestMiscMultipleCreates(
250 context,
251 command_queue,
252 pDevice);
253
254 SubTestMiscAcquireRelease(
255 context,
256 command_queue,
257 pDevice);
258 }
259
260