xref: /aosp_15_r20/external/OpenCL-CTS/test_conformance/d3d11/misc.cpp (revision 6467f958c7de8070b317fc65bcb0f6472e388d82)
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 #define _CRT_SECURE_NO_WARNINGS
17*6467f958SSadaf Ebrahimi #include "harness.h"
18*6467f958SSadaf Ebrahimi 
SubTestMiscMultipleCreates(cl_context context,cl_command_queue command_queue,ID3D11Device * pDevice)19*6467f958SSadaf Ebrahimi void SubTestMiscMultipleCreates(
20*6467f958SSadaf Ebrahimi     cl_context context,
21*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
22*6467f958SSadaf Ebrahimi     ID3D11Device* pDevice)
23*6467f958SSadaf Ebrahimi {
24*6467f958SSadaf Ebrahimi     cl_mem mem[5] = {NULL, NULL, NULL, NULL, NULL};
25*6467f958SSadaf Ebrahimi     ID3D11Buffer* pBuffer = NULL;
26*6467f958SSadaf Ebrahimi     ID3D11Texture2D* pTexture = NULL;
27*6467f958SSadaf Ebrahimi     HRESULT hr = S_OK;
28*6467f958SSadaf Ebrahimi 
29*6467f958SSadaf Ebrahimi     cl_int result = CL_SUCCESS;
30*6467f958SSadaf Ebrahimi 
31*6467f958SSadaf Ebrahimi     HarnessD3D11_TestBegin("Misc: Multiple Creates");
32*6467f958SSadaf Ebrahimi 
33*6467f958SSadaf Ebrahimi     // create the D3D11 resources
34*6467f958SSadaf Ebrahimi     {
35*6467f958SSadaf Ebrahimi         D3D11_TEXTURE2D_DESC desc;
36*6467f958SSadaf Ebrahimi         memset(&desc, 0, sizeof(desc) );
37*6467f958SSadaf Ebrahimi         desc.Width      = 256;
38*6467f958SSadaf Ebrahimi         desc.Height     = 256;
39*6467f958SSadaf Ebrahimi         desc.MipLevels  = 4;
40*6467f958SSadaf Ebrahimi         desc.ArraySize  = 4;
41*6467f958SSadaf Ebrahimi         desc.Format     = DXGI_FORMAT_R32G32B32A32_FLOAT;
42*6467f958SSadaf Ebrahimi         desc.SampleDesc.Count = 1;
43*6467f958SSadaf Ebrahimi         desc.SampleDesc.Quality = 0;
44*6467f958SSadaf Ebrahimi         desc.Usage = D3D11_USAGE_DEFAULT;
45*6467f958SSadaf Ebrahimi         desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
46*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = 0;
47*6467f958SSadaf Ebrahimi         desc.MiscFlags = 0;
48*6467f958SSadaf Ebrahimi 
49*6467f958SSadaf Ebrahimi         hr = pDevice->CreateTexture2D(&desc, NULL, &pTexture);
50*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Failed to create texture.");
51*6467f958SSadaf Ebrahimi     }
52*6467f958SSadaf Ebrahimi 
53*6467f958SSadaf Ebrahimi     // create the D3D11 buffer
54*6467f958SSadaf Ebrahimi     {
55*6467f958SSadaf Ebrahimi         D3D11_BUFFER_DESC desc = {0};
56*6467f958SSadaf Ebrahimi         desc.ByteWidth = 1124;
57*6467f958SSadaf Ebrahimi         desc.Usage = D3D11_USAGE_DEFAULT;
58*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = 0;
59*6467f958SSadaf Ebrahimi         desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
60*6467f958SSadaf Ebrahimi         desc.MiscFlags = 0;
61*6467f958SSadaf Ebrahimi         hr = pDevice->CreateBuffer(&desc, NULL, &pBuffer);
62*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Creating vertex buffer failed!");
63*6467f958SSadaf Ebrahimi     }
64*6467f958SSadaf Ebrahimi 
65*6467f958SSadaf Ebrahimi     mem[0] = clCreateFromD3D11BufferKHR(
66*6467f958SSadaf Ebrahimi         context,
67*6467f958SSadaf Ebrahimi         0,
68*6467f958SSadaf Ebrahimi         pBuffer,
69*6467f958SSadaf Ebrahimi         &result);
70*6467f958SSadaf Ebrahimi     TestRequire(result == CL_SUCCESS, "clCreateFromD3D11BufferKHR");
71*6467f958SSadaf Ebrahimi 
72*6467f958SSadaf Ebrahimi     mem[1] = clCreateFromD3D11BufferKHR(
73*6467f958SSadaf Ebrahimi         context,
74*6467f958SSadaf Ebrahimi         0,
75*6467f958SSadaf Ebrahimi         pBuffer,
76*6467f958SSadaf Ebrahimi         &result);
77*6467f958SSadaf Ebrahimi     TestRequire(result == CL_INVALID_D3D11_RESOURCE_KHR, "clCreateFromD3D11BufferKHR succeeded when it shouldn't");
78*6467f958SSadaf Ebrahimi 
79*6467f958SSadaf Ebrahimi     mem[2] = clCreateFromD3D11Texture2DKHR(
80*6467f958SSadaf Ebrahimi         context,
81*6467f958SSadaf Ebrahimi         0,
82*6467f958SSadaf Ebrahimi         pTexture,
83*6467f958SSadaf Ebrahimi         1,
84*6467f958SSadaf Ebrahimi         &result);
85*6467f958SSadaf Ebrahimi     TestRequire(result == CL_SUCCESS, "clCreateFromD3D11Texture2DKHR failed");
86*6467f958SSadaf Ebrahimi 
87*6467f958SSadaf Ebrahimi     mem[3] = clCreateFromD3D11Texture2DKHR(
88*6467f958SSadaf Ebrahimi         context,
89*6467f958SSadaf Ebrahimi         0,
90*6467f958SSadaf Ebrahimi         pTexture,
91*6467f958SSadaf Ebrahimi         1,
92*6467f958SSadaf Ebrahimi         &result);
93*6467f958SSadaf Ebrahimi     TestRequire(result == CL_INVALID_D3D11_RESOURCE_KHR, "clCreateFromD3D11Texture2DKHR succeeded when it shouldn't");
94*6467f958SSadaf Ebrahimi 
95*6467f958SSadaf Ebrahimi     mem[4] = clCreateFromD3D11Texture2DKHR(
96*6467f958SSadaf Ebrahimi         context,
97*6467f958SSadaf Ebrahimi         0,
98*6467f958SSadaf Ebrahimi         pTexture,
99*6467f958SSadaf Ebrahimi         16,
100*6467f958SSadaf Ebrahimi         &result);
101*6467f958SSadaf Ebrahimi     TestRequire(result == CL_INVALID_VALUE, "clCreateFromD3D11Texture2DKHR succeeded when it shouldn't");
102*6467f958SSadaf Ebrahimi 
103*6467f958SSadaf Ebrahimi 
104*6467f958SSadaf Ebrahimi Cleanup:
105*6467f958SSadaf Ebrahimi 
106*6467f958SSadaf Ebrahimi     for (UINT i = 0; i < 4; ++i)
107*6467f958SSadaf Ebrahimi     {
108*6467f958SSadaf Ebrahimi         if (mem[i])
109*6467f958SSadaf Ebrahimi         {
110*6467f958SSadaf Ebrahimi             clReleaseMemObject(mem[i]);
111*6467f958SSadaf Ebrahimi         }
112*6467f958SSadaf Ebrahimi     }
113*6467f958SSadaf Ebrahimi     if (pBuffer)
114*6467f958SSadaf Ebrahimi     {
115*6467f958SSadaf Ebrahimi         pBuffer->Release();
116*6467f958SSadaf Ebrahimi     }
117*6467f958SSadaf Ebrahimi     if (pTexture)
118*6467f958SSadaf Ebrahimi     {
119*6467f958SSadaf Ebrahimi         pTexture->Release();
120*6467f958SSadaf Ebrahimi     }
121*6467f958SSadaf Ebrahimi 
122*6467f958SSadaf Ebrahimi     HarnessD3D11_TestEnd();
123*6467f958SSadaf Ebrahimi }
124*6467f958SSadaf Ebrahimi 
SubTestMiscAcquireRelease(cl_device_id device,cl_context context,ID3D11Device * pDevice)125*6467f958SSadaf Ebrahimi void SubTestMiscAcquireRelease(
126*6467f958SSadaf Ebrahimi     cl_device_id  device,
127*6467f958SSadaf Ebrahimi     cl_context context,
128*6467f958SSadaf Ebrahimi     ID3D11Device* pDevice)
129*6467f958SSadaf Ebrahimi {
130*6467f958SSadaf Ebrahimi     ID3D11Buffer* pBuffer = NULL;
131*6467f958SSadaf Ebrahimi     ID3D11Texture2D* pTexture = NULL;
132*6467f958SSadaf Ebrahimi     HRESULT hr = S_OK;
133*6467f958SSadaf Ebrahimi 
134*6467f958SSadaf Ebrahimi     cl_int result = CL_SUCCESS;
135*6467f958SSadaf Ebrahimi     cl_mem mem[2] = {NULL, NULL};
136*6467f958SSadaf Ebrahimi 
137*6467f958SSadaf Ebrahimi     HarnessD3D11_TestBegin("Misc: Acquire Release");
138*6467f958SSadaf Ebrahimi 
139*6467f958SSadaf Ebrahimi 
140*6467f958SSadaf Ebrahimi     // create the D3D11 resources
141*6467f958SSadaf Ebrahimi     {
142*6467f958SSadaf Ebrahimi         D3D11_TEXTURE2D_DESC desc;
143*6467f958SSadaf Ebrahimi         memset(&desc, 0, sizeof(desc) );
144*6467f958SSadaf Ebrahimi         desc.Width      = 256;
145*6467f958SSadaf Ebrahimi         desc.Height     = 256;
146*6467f958SSadaf Ebrahimi         desc.MipLevels  = 4;
147*6467f958SSadaf Ebrahimi         desc.ArraySize  = 4;
148*6467f958SSadaf Ebrahimi         desc.Format     = DXGI_FORMAT_R32G32B32A32_FLOAT;
149*6467f958SSadaf Ebrahimi         desc.SampleDesc.Count = 1;
150*6467f958SSadaf Ebrahimi         desc.SampleDesc.Quality = 0;
151*6467f958SSadaf Ebrahimi         desc.Usage = D3D11_USAGE_DEFAULT;
152*6467f958SSadaf Ebrahimi         desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
153*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = 0;
154*6467f958SSadaf Ebrahimi         desc.MiscFlags = 0;
155*6467f958SSadaf Ebrahimi 
156*6467f958SSadaf Ebrahimi         hr = pDevice->CreateTexture2D(&desc, NULL, &pTexture);
157*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Failed to create texture.");
158*6467f958SSadaf Ebrahimi     }
159*6467f958SSadaf Ebrahimi 
160*6467f958SSadaf Ebrahimi     // create the D3D11 buffer
161*6467f958SSadaf Ebrahimi     {
162*6467f958SSadaf Ebrahimi         D3D11_BUFFER_DESC desc = {0};
163*6467f958SSadaf Ebrahimi         desc.ByteWidth = 1124;
164*6467f958SSadaf Ebrahimi         desc.Usage = D3D11_USAGE_DEFAULT;
165*6467f958SSadaf Ebrahimi         desc.CPUAccessFlags = 0;
166*6467f958SSadaf Ebrahimi         desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
167*6467f958SSadaf Ebrahimi         desc.MiscFlags = 0;
168*6467f958SSadaf Ebrahimi         hr = pDevice->CreateBuffer(&desc, NULL, &pBuffer);
169*6467f958SSadaf Ebrahimi         TestRequire(SUCCEEDED(hr), "Creating vertex buffer failed!");
170*6467f958SSadaf Ebrahimi     }
171*6467f958SSadaf Ebrahimi 
172*6467f958SSadaf Ebrahimi     // create cl_mem objects for the resources
173*6467f958SSadaf Ebrahimi     mem[0] = clCreateFromD3D11BufferKHR(
174*6467f958SSadaf Ebrahimi         context,
175*6467f958SSadaf Ebrahimi         0,
176*6467f958SSadaf Ebrahimi         pBuffer,
177*6467f958SSadaf Ebrahimi         &result);
178*6467f958SSadaf Ebrahimi     TestRequire(result == CL_SUCCESS, "clCreateFromD3D11BufferKHR");
179*6467f958SSadaf Ebrahimi     mem[1] = clCreateFromD3D11Texture2DKHR(
180*6467f958SSadaf Ebrahimi         context,
181*6467f958SSadaf Ebrahimi         0,
182*6467f958SSadaf Ebrahimi         pTexture,
183*6467f958SSadaf Ebrahimi         1,
184*6467f958SSadaf Ebrahimi         &result);
185*6467f958SSadaf Ebrahimi     TestRequire(result == CL_SUCCESS, "clCreateFromD3D11Texture2DKHR failed");
186*6467f958SSadaf Ebrahimi 
187*6467f958SSadaf Ebrahimi Cleanup:
188*6467f958SSadaf Ebrahimi     for (UINT i = 0; i < 2; ++i)
189*6467f958SSadaf Ebrahimi     {
190*6467f958SSadaf Ebrahimi         if (mem[i])
191*6467f958SSadaf Ebrahimi         {
192*6467f958SSadaf Ebrahimi             clReleaseMemObject(mem[i]);
193*6467f958SSadaf Ebrahimi         }
194*6467f958SSadaf Ebrahimi     }
195*6467f958SSadaf Ebrahimi     if (pBuffer)
196*6467f958SSadaf Ebrahimi     {
197*6467f958SSadaf Ebrahimi         pBuffer->Release();
198*6467f958SSadaf Ebrahimi     }
199*6467f958SSadaf Ebrahimi     if (pTexture)
200*6467f958SSadaf Ebrahimi     {
201*6467f958SSadaf Ebrahimi         pTexture->Release();
202*6467f958SSadaf Ebrahimi     }
203*6467f958SSadaf Ebrahimi 
204*6467f958SSadaf Ebrahimi     HarnessD3D11_TestEnd();
205*6467f958SSadaf Ebrahimi }
206*6467f958SSadaf Ebrahimi 
TestDeviceMisc(cl_device_id device,cl_context context,cl_command_queue command_queue,ID3D11Device * pDevice)207*6467f958SSadaf Ebrahimi void TestDeviceMisc(
208*6467f958SSadaf Ebrahimi     cl_device_id device,
209*6467f958SSadaf Ebrahimi     cl_context context,
210*6467f958SSadaf Ebrahimi     cl_command_queue command_queue,
211*6467f958SSadaf Ebrahimi     ID3D11Device* pDevice)
212*6467f958SSadaf Ebrahimi {
213*6467f958SSadaf Ebrahimi     SubTestMiscMultipleCreates(
214*6467f958SSadaf Ebrahimi         context,
215*6467f958SSadaf Ebrahimi         command_queue,
216*6467f958SSadaf Ebrahimi         pDevice);
217*6467f958SSadaf Ebrahimi 
218*6467f958SSadaf Ebrahimi     SubTestMiscAcquireRelease(
219*6467f958SSadaf Ebrahimi         device,
220*6467f958SSadaf Ebrahimi         context,
221*6467f958SSadaf Ebrahimi         pDevice);
222*6467f958SSadaf Ebrahimi }
223*6467f958SSadaf Ebrahimi 
224*6467f958SSadaf Ebrahimi 
225