xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/d3d10/misc.cpp (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
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