mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-26 23:33:20 +08:00
Sharing queries for DX10/DX11
Change-Id: Ia4f176a38bb2dbfe215efe17b13a533ee83510d3
This commit is contained in:
@@ -721,4 +721,14 @@ cl_int CL_API_CALL clGetSupportedDX9MediaSurfaceFormatsINTEL(cl_context context,
|
||||
*numImageFormats = static_cast<cl_uint>(D3DSurface::D3DtoClFormatConversions.size());
|
||||
|
||||
return CL_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
cl_int CL_API_CALL clGetSupportedDX10TextureFormatsINTEL(cl_context context, cl_mem_flags flags, cl_mem_object_type imageType,
|
||||
cl_uint numEntries, DXGI_FORMAT *formats, cl_uint *numImageFormats) {
|
||||
return getSupportedDXTextureFormats<D3DTypesHelper::D3D10>(context, imageType, numEntries, formats, numImageFormats);
|
||||
}
|
||||
|
||||
cl_int CL_API_CALL clGetSupportedDX11TextureFormatsINTEL(cl_context context, cl_mem_flags flags, cl_mem_object_type imageType,
|
||||
cl_uint numEntries, DXGI_FORMAT *formats, cl_uint *numImageFormats) {
|
||||
return getSupportedDXTextureFormats<D3DTypesHelper::D3D11>(context, imageType, numEntries, formats, numImageFormats);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,127 @@ template class D3DSharingFunctions<D3DTypesHelper::D3D11>;
|
||||
const uint32_t D3DSharingFunctions<D3DTypesHelper::D3D10>::sharingId = SharingType::D3D10_SHARING;
|
||||
const uint32_t D3DSharingFunctions<D3DTypesHelper::D3D11>::sharingId = SharingType::D3D11_SHARING;
|
||||
|
||||
static const DXGI_FORMAT DXGIFormats[] = {
|
||||
DXGI_FORMAT_R32G32B32A32_TYPELESS,
|
||||
DXGI_FORMAT_R32G32B32A32_FLOAT,
|
||||
DXGI_FORMAT_R32G32B32A32_UINT,
|
||||
DXGI_FORMAT_R32G32B32A32_SINT,
|
||||
DXGI_FORMAT_R32G32B32_TYPELESS,
|
||||
DXGI_FORMAT_R32G32B32_FLOAT,
|
||||
DXGI_FORMAT_R32G32B32_UINT,
|
||||
DXGI_FORMAT_R32G32B32_SINT,
|
||||
DXGI_FORMAT_R16G16B16A16_TYPELESS,
|
||||
DXGI_FORMAT_R16G16B16A16_FLOAT,
|
||||
DXGI_FORMAT_R16G16B16A16_UNORM,
|
||||
DXGI_FORMAT_R16G16B16A16_UINT,
|
||||
DXGI_FORMAT_R16G16B16A16_SNORM,
|
||||
DXGI_FORMAT_R16G16B16A16_SINT,
|
||||
DXGI_FORMAT_R32G32_TYPELESS,
|
||||
DXGI_FORMAT_R32G32_FLOAT,
|
||||
DXGI_FORMAT_R32G32_UINT,
|
||||
DXGI_FORMAT_R32G32_SINT,
|
||||
DXGI_FORMAT_R32G8X24_TYPELESS,
|
||||
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
|
||||
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
|
||||
DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,
|
||||
DXGI_FORMAT_R10G10B10A2_TYPELESS,
|
||||
DXGI_FORMAT_R10G10B10A2_UNORM,
|
||||
DXGI_FORMAT_R10G10B10A2_UINT,
|
||||
DXGI_FORMAT_R11G11B10_FLOAT,
|
||||
DXGI_FORMAT_R8G8B8A8_TYPELESS,
|
||||
DXGI_FORMAT_R8G8B8A8_UNORM,
|
||||
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
|
||||
DXGI_FORMAT_R8G8B8A8_UINT,
|
||||
DXGI_FORMAT_R8G8B8A8_SNORM,
|
||||
DXGI_FORMAT_R8G8B8A8_SINT,
|
||||
DXGI_FORMAT_R16G16_TYPELESS,
|
||||
DXGI_FORMAT_R16G16_FLOAT,
|
||||
DXGI_FORMAT_R16G16_UNORM,
|
||||
DXGI_FORMAT_R16G16_UINT,
|
||||
DXGI_FORMAT_R16G16_SNORM,
|
||||
DXGI_FORMAT_R16G16_SINT,
|
||||
DXGI_FORMAT_R32_TYPELESS,
|
||||
DXGI_FORMAT_D32_FLOAT,
|
||||
DXGI_FORMAT_R32_FLOAT,
|
||||
DXGI_FORMAT_R32_UINT,
|
||||
DXGI_FORMAT_R32_SINT,
|
||||
DXGI_FORMAT_R24G8_TYPELESS,
|
||||
DXGI_FORMAT_D24_UNORM_S8_UINT,
|
||||
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
|
||||
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
|
||||
DXGI_FORMAT_R8G8_TYPELESS,
|
||||
DXGI_FORMAT_R8G8_UNORM,
|
||||
DXGI_FORMAT_R8G8_UINT,
|
||||
DXGI_FORMAT_R8G8_SNORM,
|
||||
DXGI_FORMAT_R8G8_SINT,
|
||||
DXGI_FORMAT_R16_TYPELESS,
|
||||
DXGI_FORMAT_R16_FLOAT,
|
||||
DXGI_FORMAT_D16_UNORM,
|
||||
DXGI_FORMAT_R16_UNORM,
|
||||
DXGI_FORMAT_R16_UINT,
|
||||
DXGI_FORMAT_R16_SNORM,
|
||||
DXGI_FORMAT_R16_SINT,
|
||||
DXGI_FORMAT_R8_TYPELESS,
|
||||
DXGI_FORMAT_R8_UNORM,
|
||||
DXGI_FORMAT_R8_UINT,
|
||||
DXGI_FORMAT_R8_SNORM,
|
||||
DXGI_FORMAT_R8_SINT,
|
||||
DXGI_FORMAT_A8_UNORM,
|
||||
DXGI_FORMAT_R1_UNORM,
|
||||
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
|
||||
DXGI_FORMAT_R8G8_B8G8_UNORM,
|
||||
DXGI_FORMAT_G8R8_G8B8_UNORM,
|
||||
DXGI_FORMAT_BC1_TYPELESS,
|
||||
DXGI_FORMAT_BC1_UNORM,
|
||||
DXGI_FORMAT_BC1_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC2_TYPELESS,
|
||||
DXGI_FORMAT_BC2_UNORM,
|
||||
DXGI_FORMAT_BC2_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC3_TYPELESS,
|
||||
DXGI_FORMAT_BC3_UNORM,
|
||||
DXGI_FORMAT_BC3_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC4_TYPELESS,
|
||||
DXGI_FORMAT_BC4_UNORM,
|
||||
DXGI_FORMAT_BC4_SNORM,
|
||||
DXGI_FORMAT_BC5_TYPELESS,
|
||||
DXGI_FORMAT_BC5_UNORM,
|
||||
DXGI_FORMAT_BC5_SNORM,
|
||||
DXGI_FORMAT_B5G6R5_UNORM,
|
||||
DXGI_FORMAT_B5G5R5A1_UNORM,
|
||||
DXGI_FORMAT_B8G8R8A8_UNORM,
|
||||
DXGI_FORMAT_B8G8R8X8_UNORM,
|
||||
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,
|
||||
DXGI_FORMAT_B8G8R8A8_TYPELESS,
|
||||
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,
|
||||
DXGI_FORMAT_B8G8R8X8_TYPELESS,
|
||||
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC6H_TYPELESS,
|
||||
DXGI_FORMAT_BC6H_UF16,
|
||||
DXGI_FORMAT_BC6H_SF16,
|
||||
DXGI_FORMAT_BC7_TYPELESS,
|
||||
DXGI_FORMAT_BC7_UNORM,
|
||||
DXGI_FORMAT_BC7_UNORM_SRGB,
|
||||
DXGI_FORMAT_AYUV,
|
||||
DXGI_FORMAT_Y410,
|
||||
DXGI_FORMAT_Y416,
|
||||
DXGI_FORMAT_NV12,
|
||||
DXGI_FORMAT_P010,
|
||||
DXGI_FORMAT_P016,
|
||||
DXGI_FORMAT_420_OPAQUE,
|
||||
DXGI_FORMAT_YUY2,
|
||||
DXGI_FORMAT_Y210,
|
||||
DXGI_FORMAT_Y216,
|
||||
DXGI_FORMAT_NV11,
|
||||
DXGI_FORMAT_AI44,
|
||||
DXGI_FORMAT_IA44,
|
||||
DXGI_FORMAT_P8,
|
||||
DXGI_FORMAT_A8P8,
|
||||
DXGI_FORMAT_B4G4R4A4_UNORM,
|
||||
DXGI_FORMAT_P208,
|
||||
DXGI_FORMAT_V208,
|
||||
DXGI_FORMAT_V408,
|
||||
DXGI_FORMAT_FORCE_UINT};
|
||||
|
||||
template <typename D3D>
|
||||
void D3DSharingFunctions<D3D>::createQuery(D3DQuery **query) {
|
||||
D3DQueryDesc desc = {};
|
||||
@@ -88,6 +209,46 @@ void D3DSharingFunctions<D3D>::createTexture3d(D3DTexture3d **texture, D3DTextur
|
||||
d3dDevice->CreateTexture3D(&stagingDesc, nullptr, texture);
|
||||
}
|
||||
|
||||
template <typename D3D>
|
||||
void D3DSharingFunctions<D3D>::checkFormatSupport(DXGI_FORMAT format, UINT *pFormat) {
|
||||
d3dDevice->CheckFormatSupport(format, pFormat);
|
||||
}
|
||||
|
||||
template <typename D3D>
|
||||
std::vector<DXGI_FORMAT> &D3DSharingFunctions<D3D>::retrieveTextureFormats(cl_mem_object_type imageType) {
|
||||
auto cached = textureFormatCache.find(imageType);
|
||||
if (cached == textureFormatCache.end()) {
|
||||
bool success;
|
||||
std::tie(cached, success) = textureFormatCache.emplace(imageType, std::vector<DXGI_FORMAT>(0));
|
||||
if (!success) {
|
||||
return DXGINoFormats;
|
||||
}
|
||||
std::vector<DXGI_FORMAT> &cached_formats = cached->second;
|
||||
cached_formats.reserve(arrayCount(DXGIFormats));
|
||||
for (auto DXGIFormat : DXGIFormats) {
|
||||
UINT format = 0;
|
||||
checkFormatSupport(DXGIFormat, &format);
|
||||
if (memObjectFormatSupport(imageType, format)) {
|
||||
cached_formats.push_back(DXGIFormat);
|
||||
}
|
||||
}
|
||||
cached_formats.shrink_to_fit();
|
||||
}
|
||||
return cached->second;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool D3DSharingFunctions<D3DTypesHelper::D3D10>::memObjectFormatSupport(cl_mem_object_type objectType, UINT format) {
|
||||
auto d3dformat = static_cast<D3D10_FORMAT_SUPPORT>(format);
|
||||
return ((objectType & CL_MEM_OBJECT_BUFFER) && (d3dformat & D3D10_FORMAT_SUPPORT_BUFFER)) || ((objectType & CL_MEM_OBJECT_IMAGE2D) && (d3dformat & D3D10_FORMAT_SUPPORT_TEXTURE2D)) || ((objectType & CL_MEM_OBJECT_IMAGE3D) && (d3dformat & D3D10_FORMAT_SUPPORT_TEXTURE3D));
|
||||
}
|
||||
|
||||
template <>
|
||||
bool D3DSharingFunctions<D3DTypesHelper::D3D11>::memObjectFormatSupport(cl_mem_object_type objectType, UINT format) {
|
||||
auto d3dformat = static_cast<D3D11_FORMAT_SUPPORT>(format);
|
||||
return ((objectType & CL_MEM_OBJECT_BUFFER) && (d3dformat & D3D11_FORMAT_SUPPORT_BUFFER)) || ((objectType & CL_MEM_OBJECT_IMAGE2D) && (d3dformat & D3D11_FORMAT_SUPPORT_TEXTURE2D)) || ((objectType & CL_MEM_OBJECT_IMAGE3D) && (d3dformat & D3D11_FORMAT_SUPPORT_TEXTURE3D));
|
||||
}
|
||||
|
||||
template <typename D3D>
|
||||
void D3DSharingFunctions<D3D>::getBufferDesc(D3DBufferDesc *bufferDesc, D3DBufferObj *buffer) {
|
||||
buffer->GetDesc(bufferDesc);
|
||||
@@ -139,6 +300,7 @@ void D3DSharingFunctions<D3D>::lockRect(D3DTexture2d *resource, D3DLOCKED_RECT *
|
||||
template <typename D3D>
|
||||
void D3DSharingFunctions<D3D>::unlockRect(D3DTexture2d *resource) {
|
||||
}
|
||||
|
||||
template <typename D3D>
|
||||
void D3DSharingFunctions<D3D>::updateSurface(D3DTexture2d *src, D3DTexture2d *dst) {
|
||||
}
|
||||
|
||||
@@ -29,6 +29,11 @@ template <>
|
||||
void D3DSharingFunctions<D3DTypesHelper::D3D9>::fillCreateBufferDesc(D3DBufferDesc &desc, unsigned int width) {
|
||||
}
|
||||
|
||||
template <>
|
||||
std::vector<DXGI_FORMAT> &D3DSharingFunctions<D3DTypesHelper::D3D9>::retrieveTextureFormats(cl_mem_object_type imageType) {
|
||||
return DXGINoFormats;
|
||||
}
|
||||
|
||||
template <>
|
||||
void D3DSharingFunctions<D3DTypesHelper::D3D9>::fillCreateTexture2dDesc(D3DTexture2dDesc &desc, D3DTexture2dDesc *srcDesc, cl_uint subresource) {
|
||||
}
|
||||
@@ -50,6 +55,15 @@ template <>
|
||||
void D3DSharingFunctions<D3DTypesHelper::D3D9>::createTexture3d(D3DTexture3d **texture, D3DTexture3dDesc *desc, cl_uint subresource) {
|
||||
}
|
||||
|
||||
template <>
|
||||
void D3DSharingFunctions<D3DTypesHelper::D3D9>::checkFormatSupport(DXGI_FORMAT format, UINT *pFormat) {
|
||||
}
|
||||
|
||||
template <>
|
||||
bool D3DSharingFunctions<D3DTypesHelper::D3D9>::memObjectFormatSupport(cl_mem_object_type object, UINT format) {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <>
|
||||
void D3DSharingFunctions<D3DTypesHelper::D3D9>::getBufferDesc(D3DBufferDesc *bufferDesc, D3DBufferObj *buffer) {
|
||||
}
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
#include "runtime/helpers/debug_helpers.h"
|
||||
#include "runtime/sharings/sharing.h"
|
||||
#include "DXGI1_2.h"
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "runtime/helpers/array_count.h"
|
||||
|
||||
namespace OCLRT {
|
||||
namespace D3DTypesHelper {
|
||||
@@ -112,6 +114,8 @@ class D3DSharingFunctions : public SharingFunctions {
|
||||
MOCKABLE_VIRTUAL void getRenderTargetData(D3DTexture2d *renderTarget, D3DTexture2d *dstSurface);
|
||||
MOCKABLE_VIRTUAL void updateSurface(D3DTexture2d *src, D3DTexture2d *dst);
|
||||
MOCKABLE_VIRTUAL void updateDevice(D3DResource *resource);
|
||||
MOCKABLE_VIRTUAL void checkFormatSupport(DXGI_FORMAT format, UINT *pFormat);
|
||||
MOCKABLE_VIRTUAL bool memObjectFormatSupport(cl_mem_object_type object, UINT format);
|
||||
|
||||
GetDxgiDescFcn getDxgiDescFcn = nullptr;
|
||||
|
||||
@@ -136,11 +140,41 @@ class D3DSharingFunctions : public SharingFunctions {
|
||||
void fillCreateTexture2dDesc(D3DTexture2dDesc &desc, D3DTexture2dDesc *srcDesc, cl_uint subresource);
|
||||
void fillCreateTexture3dDesc(D3DTexture3dDesc &desc, D3DTexture3dDesc *srcDesc, cl_uint subresource);
|
||||
|
||||
std::vector<DXGI_FORMAT> &retrieveTextureFormats(cl_mem_object_type imageType);
|
||||
|
||||
protected:
|
||||
D3DDevice *d3dDevice = nullptr;
|
||||
ID3D11DeviceContext *d3d11DeviceContext = nullptr;
|
||||
|
||||
std::vector<DXGI_FORMAT> DXGINoFormats;
|
||||
std::vector<std::pair<D3DResource *, cl_uint>> trackedResources;
|
||||
std::map<cl_mem_object_type, std::vector<DXGI_FORMAT>> textureFormatCache;
|
||||
static void getDxgiDesc(DXGI_ADAPTER_DESC *dxgiDesc, IDXGIAdapter *adapter, D3DDevice *device);
|
||||
};
|
||||
|
||||
template <typename D3DSharing>
|
||||
static inline cl_int getSupportedDXTextureFormats(cl_context context, cl_mem_object_type imageType,
|
||||
cl_uint numEntries, DXGI_FORMAT *formats, cl_uint *numImageFormats) {
|
||||
Context *pContext = castToObject<Context>(context);
|
||||
if (!pContext) {
|
||||
return CL_INVALID_CONTEXT;
|
||||
}
|
||||
|
||||
auto pSharing = pContext->getSharing<D3DSharingFunctions<D3DSharing>>();
|
||||
if (!pSharing) {
|
||||
return CL_INVALID_CONTEXT;
|
||||
}
|
||||
|
||||
auto supported_formats = pSharing->retrieveTextureFormats(imageType);
|
||||
|
||||
if (formats != nullptr) {
|
||||
memcpy(formats, supported_formats.data(), std::min(static_cast<size_t>(numEntries), supported_formats.size()));
|
||||
}
|
||||
|
||||
if (numImageFormats) {
|
||||
*numImageFormats = static_cast<cl_uint>(supported_formats.size());
|
||||
}
|
||||
return CL_SUCCESS;
|
||||
}
|
||||
|
||||
} // namespace OCLRT
|
||||
|
||||
@@ -178,6 +178,26 @@ extern CL_API_ENTRY cl_int CL_API_CALL clEnqueueReleaseD3D11ObjectsKHR(
|
||||
const cl_event *eventWaitList,
|
||||
cl_event *event) CL_API_SUFFIX__VERSION_1_2;
|
||||
|
||||
extern CL_API_ENTRY cl_int CL_API_CALL
|
||||
clGetSupportedDX9MediaSurfaceFormatsINTEL(cl_context context, cl_mem_flags flags, cl_mem_object_type imageType, cl_uint numEntries,
|
||||
D3DFORMAT *dx9Formats, cl_uint *numImageFormats) CL_API_SUFFIX__VERSION_1_2;
|
||||
extern CL_API_ENTRY cl_int CL_API_CALL clGetSupportedDX9MediaSurfaceFormatsINTEL(
|
||||
cl_context context,
|
||||
cl_mem_flags flags,
|
||||
cl_mem_object_type imageType,
|
||||
cl_uint numEntries,
|
||||
D3DFORMAT *dx9Formats,
|
||||
cl_uint *numImageFormats) CL_API_SUFFIX__VERSION_1_2;
|
||||
|
||||
extern CL_API_ENTRY cl_int CL_API_CALL clGetSupportedDX10TextureFormatsINTEL(
|
||||
cl_context context,
|
||||
cl_mem_flags flags,
|
||||
cl_mem_object_type imageType,
|
||||
cl_uint numEntries,
|
||||
DXGI_FORMAT *dx10Formats,
|
||||
cl_uint *numImageFormats) CL_API_SUFFIX__VERSION_1_2;
|
||||
|
||||
extern CL_API_ENTRY cl_int CL_API_CALL clGetSupportedDX11TextureFormatsINTEL(
|
||||
cl_context context,
|
||||
cl_mem_flags flags,
|
||||
cl_mem_object_type imageType,
|
||||
cl_uint numEntries,
|
||||
DXGI_FORMAT *dx11Formats,
|
||||
cl_uint *numImageFormats) CL_API_SUFFIX__VERSION_1_2;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "runtime/sharings/d3d/d3d_buffer.h"
|
||||
#include "runtime/sharings/d3d/d3d_surface.h"
|
||||
#include "runtime/sharings/d3d/d3d_texture.h"
|
||||
#include "runtime/utilities/arrayref.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "gmock/gmock.h"
|
||||
#include "test.h"
|
||||
@@ -1461,4 +1462,249 @@ TEST(D3DSurfaceTest, givenD3DSurfaceWhenInvalidMemObjectIsPassedToValidateUpdate
|
||||
auto result = surface->validateUpdateData(updateData);
|
||||
EXPECT_EQ(CL_INVALID_MEM_OBJECT, result);
|
||||
}
|
||||
|
||||
static const DXGI_FORMAT DXGIformats[] = {
|
||||
DXGI_FORMAT_R32G32B32A32_TYPELESS,
|
||||
DXGI_FORMAT_R32G32B32A32_FLOAT,
|
||||
DXGI_FORMAT_R32G32B32A32_UINT,
|
||||
DXGI_FORMAT_R32G32B32A32_SINT,
|
||||
DXGI_FORMAT_R32G32B32_TYPELESS,
|
||||
DXGI_FORMAT_R32G32B32_FLOAT,
|
||||
DXGI_FORMAT_R32G32B32_UINT,
|
||||
DXGI_FORMAT_R32G32B32_SINT,
|
||||
DXGI_FORMAT_R16G16B16A16_TYPELESS,
|
||||
DXGI_FORMAT_R16G16B16A16_FLOAT,
|
||||
DXGI_FORMAT_R16G16B16A16_UNORM,
|
||||
DXGI_FORMAT_R16G16B16A16_UINT,
|
||||
DXGI_FORMAT_R16G16B16A16_SNORM,
|
||||
DXGI_FORMAT_R16G16B16A16_SINT,
|
||||
DXGI_FORMAT_R32G32_TYPELESS,
|
||||
DXGI_FORMAT_R32G32_FLOAT,
|
||||
DXGI_FORMAT_R32G32_UINT,
|
||||
DXGI_FORMAT_R32G32_SINT,
|
||||
DXGI_FORMAT_R32G8X24_TYPELESS,
|
||||
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
|
||||
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
|
||||
DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,
|
||||
DXGI_FORMAT_R10G10B10A2_TYPELESS,
|
||||
DXGI_FORMAT_R10G10B10A2_UNORM,
|
||||
DXGI_FORMAT_R10G10B10A2_UINT,
|
||||
DXGI_FORMAT_R11G11B10_FLOAT,
|
||||
DXGI_FORMAT_R8G8B8A8_TYPELESS,
|
||||
DXGI_FORMAT_R8G8B8A8_UNORM,
|
||||
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
|
||||
DXGI_FORMAT_R8G8B8A8_UINT,
|
||||
DXGI_FORMAT_R8G8B8A8_SNORM,
|
||||
DXGI_FORMAT_R8G8B8A8_SINT,
|
||||
DXGI_FORMAT_R16G16_TYPELESS,
|
||||
DXGI_FORMAT_R16G16_FLOAT,
|
||||
DXGI_FORMAT_R16G16_UNORM,
|
||||
DXGI_FORMAT_R16G16_UINT,
|
||||
DXGI_FORMAT_R16G16_SNORM,
|
||||
DXGI_FORMAT_R16G16_SINT,
|
||||
DXGI_FORMAT_R32_TYPELESS,
|
||||
DXGI_FORMAT_D32_FLOAT,
|
||||
DXGI_FORMAT_R32_FLOAT,
|
||||
DXGI_FORMAT_R32_UINT,
|
||||
DXGI_FORMAT_R32_SINT,
|
||||
DXGI_FORMAT_R24G8_TYPELESS,
|
||||
DXGI_FORMAT_D24_UNORM_S8_UINT,
|
||||
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
|
||||
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
|
||||
DXGI_FORMAT_R8G8_TYPELESS,
|
||||
DXGI_FORMAT_R8G8_UNORM,
|
||||
DXGI_FORMAT_R8G8_UINT,
|
||||
DXGI_FORMAT_R8G8_SNORM,
|
||||
DXGI_FORMAT_R8G8_SINT,
|
||||
DXGI_FORMAT_R16_TYPELESS,
|
||||
DXGI_FORMAT_R16_FLOAT,
|
||||
DXGI_FORMAT_D16_UNORM,
|
||||
DXGI_FORMAT_R16_UNORM,
|
||||
DXGI_FORMAT_R16_UINT,
|
||||
DXGI_FORMAT_R16_SNORM,
|
||||
DXGI_FORMAT_R16_SINT,
|
||||
DXGI_FORMAT_R8_TYPELESS,
|
||||
DXGI_FORMAT_R8_UNORM,
|
||||
DXGI_FORMAT_R8_UINT,
|
||||
DXGI_FORMAT_R8_SNORM,
|
||||
DXGI_FORMAT_R8_SINT,
|
||||
DXGI_FORMAT_A8_UNORM,
|
||||
DXGI_FORMAT_R1_UNORM,
|
||||
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
|
||||
DXGI_FORMAT_R8G8_B8G8_UNORM,
|
||||
DXGI_FORMAT_G8R8_G8B8_UNORM,
|
||||
DXGI_FORMAT_BC1_TYPELESS,
|
||||
DXGI_FORMAT_BC1_UNORM,
|
||||
DXGI_FORMAT_BC1_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC2_TYPELESS,
|
||||
DXGI_FORMAT_BC2_UNORM,
|
||||
DXGI_FORMAT_BC2_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC3_TYPELESS,
|
||||
DXGI_FORMAT_BC3_UNORM,
|
||||
DXGI_FORMAT_BC3_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC4_TYPELESS,
|
||||
DXGI_FORMAT_BC4_UNORM,
|
||||
DXGI_FORMAT_BC4_SNORM,
|
||||
DXGI_FORMAT_BC5_TYPELESS,
|
||||
DXGI_FORMAT_BC5_UNORM,
|
||||
DXGI_FORMAT_BC5_SNORM,
|
||||
DXGI_FORMAT_B5G6R5_UNORM,
|
||||
DXGI_FORMAT_B5G5R5A1_UNORM,
|
||||
DXGI_FORMAT_B8G8R8A8_UNORM,
|
||||
DXGI_FORMAT_B8G8R8X8_UNORM,
|
||||
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,
|
||||
DXGI_FORMAT_B8G8R8A8_TYPELESS,
|
||||
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,
|
||||
DXGI_FORMAT_B8G8R8X8_TYPELESS,
|
||||
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB,
|
||||
DXGI_FORMAT_BC6H_TYPELESS,
|
||||
DXGI_FORMAT_BC6H_UF16,
|
||||
DXGI_FORMAT_BC6H_SF16,
|
||||
DXGI_FORMAT_BC7_TYPELESS,
|
||||
DXGI_FORMAT_BC7_UNORM,
|
||||
DXGI_FORMAT_BC7_UNORM_SRGB,
|
||||
DXGI_FORMAT_AYUV,
|
||||
DXGI_FORMAT_Y410,
|
||||
DXGI_FORMAT_Y416,
|
||||
DXGI_FORMAT_NV12,
|
||||
DXGI_FORMAT_P010,
|
||||
DXGI_FORMAT_P016,
|
||||
DXGI_FORMAT_420_OPAQUE,
|
||||
DXGI_FORMAT_YUY2,
|
||||
DXGI_FORMAT_Y210,
|
||||
DXGI_FORMAT_Y216,
|
||||
DXGI_FORMAT_NV11,
|
||||
DXGI_FORMAT_AI44,
|
||||
DXGI_FORMAT_IA44,
|
||||
DXGI_FORMAT_P8,
|
||||
DXGI_FORMAT_A8P8,
|
||||
DXGI_FORMAT_B4G4R4A4_UNORM,
|
||||
DXGI_FORMAT_P208,
|
||||
DXGI_FORMAT_V208,
|
||||
DXGI_FORMAT_V408,
|
||||
DXGI_FORMAT_FORCE_UINT};
|
||||
|
||||
template <typename T>
|
||||
struct clIntelSharingFormatQueryDX1X : public PlatformFixture, public ::testing::Test {
|
||||
std::vector<DXGI_FORMAT> retrievedFormats;
|
||||
ArrayRef<const DXGI_FORMAT> availableFormats;
|
||||
|
||||
NiceMock<MockD3DSharingFunctions<T>> *mockSharingFcns;
|
||||
MockContext *context;
|
||||
cl_uint numImageFormats;
|
||||
cl_int retVal;
|
||||
size_t retSize;
|
||||
|
||||
void SetUp() override {
|
||||
PlatformFixture::SetUp();
|
||||
context = new MockContext(pPlatform->getDevice(0));
|
||||
mockSharingFcns = new NiceMock<MockD3DSharingFunctions<T>>();
|
||||
context->setSharingFunctions(mockSharingFcns);
|
||||
|
||||
availableFormats = ArrayRef<const DXGI_FORMAT>(DXGIformats);
|
||||
retrievedFormats.assign(availableFormats.size(), DXGI_FORMAT_UNKNOWN);
|
||||
}
|
||||
void TearDown() override {
|
||||
delete context;
|
||||
PlatformFixture::TearDown();
|
||||
}
|
||||
};
|
||||
|
||||
typedef clIntelSharingFormatQueryDX1X<D3DTypesHelper::D3D10> clIntelSharingFormatQueryDX10;
|
||||
typedef clIntelSharingFormatQueryDX1X<D3DTypesHelper::D3D11> clIntelSharingFormatQueryDX11;
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX10, givenInvalidContextWhenDX10TextureFormatsRequestedThenInvalidContextError) {
|
||||
retVal = clGetSupportedDX10TextureFormatsINTEL(NULL, CL_MEM_READ_WRITE, 0,
|
||||
static_cast<cl_uint>(retrievedFormats.size()),
|
||||
&retrievedFormats[0], &numImageFormats);
|
||||
EXPECT_EQ(CL_INVALID_CONTEXT, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX10, givenValidParametersWhenRequestedDX10TextureFormatsThenTheResultIsASubsetOfKnownFormats) {
|
||||
retVal = clGetSupportedDX10TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D,
|
||||
static_cast<cl_uint>(retrievedFormats.size()),
|
||||
&retrievedFormats[0], &numImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
for (cl_uint i = 0; i < numImageFormats; ++i) {
|
||||
EXPECT_NE(std::find(availableFormats.begin(),
|
||||
availableFormats.end(),
|
||||
retrievedFormats[i]),
|
||||
availableFormats.end());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX10, givenValidParametersWhenRequestedDX10TextureFormatsTwiceThenTheResultsAreTheSame) {
|
||||
retVal = clGetSupportedDX10TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D,
|
||||
static_cast<cl_uint>(retrievedFormats.size()),
|
||||
&retrievedFormats[0], &numImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
std::vector<DXGI_FORMAT> formatsRetrievedForTheSecondTime(availableFormats.size());
|
||||
cl_uint anotherNumImageFormats;
|
||||
retVal = clGetSupportedDX10TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D,
|
||||
static_cast<cl_uint>(formatsRetrievedForTheSecondTime.size()),
|
||||
&formatsRetrievedForTheSecondTime[0], &anotherNumImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
ASSERT_EQ(numImageFormats, anotherNumImageFormats);
|
||||
ASSERT_EQ(memcmp(&retrievedFormats[0], &formatsRetrievedForTheSecondTime[0], numImageFormats * sizeof(DXGI_FORMAT)), 0);
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX10, givenNullFormatsWhenRequestedDX10TextureFormatsThenNumImageFormatsIsSane) {
|
||||
retVal = clGetSupportedDX10TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D, 0, nullptr, &numImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
ASSERT_LE(0U, numImageFormats);
|
||||
ASSERT_LE(numImageFormats, static_cast<cl_uint>(availableFormats.size()));
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX10, givenNullPointersWhenRequestedDX10TextureFormatsThenCLSuccessIsReturned) {
|
||||
retVal = clGetSupportedDX10TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D, static_cast<cl_uint>(retrievedFormats.size()), nullptr, nullptr);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX11, givenInvalidContextWhenDX11TextureFormatsRequestedThenInvalidContextError) {
|
||||
retVal = clGetSupportedDX11TextureFormatsINTEL(nullptr, CL_MEM_READ_WRITE, 0,
|
||||
static_cast<cl_uint>(retrievedFormats.size()),
|
||||
&retrievedFormats[0], &numImageFormats);
|
||||
EXPECT_EQ(CL_INVALID_CONTEXT, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX11, givenValidParametersWhenRequestedDX11TextureFormatsThenTheResultIsASubsetOfKnownFormats) {
|
||||
retVal = clGetSupportedDX11TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D,
|
||||
static_cast<cl_uint>(retrievedFormats.size()),
|
||||
&retrievedFormats[0], &numImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
for (cl_uint i = 0; i < numImageFormats; ++i) {
|
||||
EXPECT_NE(std::find(availableFormats.begin(),
|
||||
availableFormats.end(),
|
||||
retrievedFormats[i]),
|
||||
availableFormats.end());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX11, givenNullFormatsWhenRequestedDX11TextureFormatsThenNumImageFormatsIsSane) {
|
||||
retVal = clGetSupportedDX11TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D, 0, nullptr, &numImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
ASSERT_LE(0U, numImageFormats);
|
||||
ASSERT_LE(numImageFormats, static_cast<cl_uint>(availableFormats.size()));
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX11, givenNullPointersWhenRequestedDX11TextureFormatsThenCLSuccessIsReturned) {
|
||||
retVal = clGetSupportedDX11TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D, static_cast<cl_uint>(retrievedFormats.size()), nullptr, nullptr);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
}
|
||||
|
||||
TEST_F(clIntelSharingFormatQueryDX11, givenValidParametersWhenRequestedDX11TextureFormatsTwiceThenTheResultsAreTheSame) {
|
||||
retVal = clGetSupportedDX11TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D,
|
||||
static_cast<cl_uint>(retrievedFormats.size()),
|
||||
&retrievedFormats[0], &numImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
std::vector<DXGI_FORMAT> formatsRetrievedForTheSecondTime(availableFormats.size());
|
||||
cl_uint anotherNumImageFormats;
|
||||
retVal = clGetSupportedDX11TextureFormatsINTEL(context, CL_MEM_READ_WRITE, CL_MEM_OBJECT_IMAGE2D,
|
||||
static_cast<cl_uint>(formatsRetrievedForTheSecondTime.size()),
|
||||
&formatsRetrievedForTheSecondTime[0], &anotherNumImageFormats);
|
||||
ASSERT_EQ(retVal, CL_SUCCESS);
|
||||
ASSERT_EQ(numImageFormats, anotherNumImageFormats);
|
||||
ASSERT_EQ(memcmp(&retrievedFormats[0], &formatsRetrievedForTheSecondTime[0], numImageFormats * sizeof(DXGI_FORMAT)), 0);
|
||||
}
|
||||
|
||||
} // namespace OCLRT
|
||||
|
||||
@@ -55,6 +55,8 @@ class MockD3DSharingFunctions : public D3DSharingFunctions<D3D> {
|
||||
MOCK_METHOD2_T(getRenderTargetData, void(D3DTexture2d *renderTarget, D3DTexture2d *dstSurface));
|
||||
MOCK_METHOD2_T(updateSurface, void(D3DTexture2d *src, D3DTexture2d *dst));
|
||||
MOCK_METHOD1_T(updateDevice, void(D3DResource *resource));
|
||||
MOCK_METHOD2_T(checkFormatSupport, void(DXGI_FORMAT format, UINT *pFormat));
|
||||
MOCK_METHOD2_T(memObjectFormatSupport, bool(cl_mem_object_type object, UINT format));
|
||||
|
||||
std::vector<std::pair<D3DResource *, cl_uint>> *getTrackedResourcesVector() { return &this->trackedResources; }
|
||||
|
||||
@@ -72,4 +74,4 @@ class MockD3DSharingFunctions : public D3DSharingFunctions<D3D> {
|
||||
*dxgiDesc = mockDxgiDesc;
|
||||
}
|
||||
};
|
||||
} // namespace OCLRT
|
||||
} // namespace OCLRT
|
||||
|
||||
@@ -96,5 +96,4 @@ TEST_F(clIntelSharingFormatQueryDX9, givenValidParametersWhenRequestedMediaSurfa
|
||||
EXPECT_NE(found, retrievedFormats.end());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ULT
|
||||
} // namespace ULT
|
||||
|
||||
Reference in New Issue
Block a user