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