diff --git a/Jenkinsfile b/Jenkinsfile index 29c17dbde2..2980f346cb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,4 +2,4 @@ neoDependenciesRev='733920-765' strategy='EQUAL' allowedF=47 -allowedCD=364 +allowedCD=363 diff --git a/runtime/context/context.cpp b/runtime/context/context.cpp index a32b383876..3e06882d84 100644 --- a/runtime/context/context.cpp +++ b/runtime/context/context.cpp @@ -246,9 +246,9 @@ cl_int Context::getSupportedImageFormats( cl_image_format *imageFormats, cl_uint *numImageFormatsReturned) { - cl_uint numImageFormats = 0; - cl_uint numDepthFormats = 0; - const SurfaceFormatInfo *surfaceFormats = nullptr; + size_t numImageFormats = 0; + size_t numDepthFormats = 0; + const SurfaceFormatInfo *baseSurfaceFormats = nullptr; const SurfaceFormatInfo *depthFormats = nullptr; const bool nv12ExtensionEnabled = device->getDeviceInfo().nv12Extension; @@ -258,26 +258,26 @@ cl_int Context::getSupportedImageFormats( bool appendDepthSurfaces = true; if (flags & CL_MEM_READ_ONLY) { - numImageFormats = static_cast(numReadOnlySurfaceFormats); - surfaceFormats = readOnlySurfaceFormats; + numImageFormats = numReadOnlySurfaceFormats; + baseSurfaceFormats = readOnlySurfaceFormats; depthFormats = readOnlyDepthSurfaceFormats; - numDepthFormats = static_cast(numReadOnlyDepthSurfaceFormats); + numDepthFormats = numReadOnlyDepthSurfaceFormats; appendPlanarYUVSurfaces = true; appendPackedYUVSurfaces = true; } else if (flags & CL_MEM_WRITE_ONLY) { - numImageFormats = static_cast(numWriteOnlySurfaceFormats); - surfaceFormats = writeOnlySurfaceFormats; + numImageFormats = numWriteOnlySurfaceFormats; + baseSurfaceFormats = writeOnlySurfaceFormats; depthFormats = readWriteDepthSurfaceFormats; - numDepthFormats = static_cast(numReadWriteDepthSurfaceFormats); + numDepthFormats = numReadWriteDepthSurfaceFormats; } else if (nv12ExtensionEnabled && (flags & CL_MEM_NO_ACCESS_INTEL)) { - numImageFormats = static_cast(numReadOnlySurfaceFormats); - surfaceFormats = readOnlySurfaceFormats; + numImageFormats = numReadOnlySurfaceFormats; + baseSurfaceFormats = readOnlySurfaceFormats; appendPlanarYUVSurfaces = true; } else { - numImageFormats = static_cast(numReadWriteSurfaceFormats); - surfaceFormats = readWriteSurfaceFormats; + numImageFormats = numReadWriteSurfaceFormats; + baseSurfaceFormats = readWriteSurfaceFormats; depthFormats = readWriteDepthSurfaceFormats; - numDepthFormats = static_cast(numReadWriteDepthSurfaceFormats); + numDepthFormats = numReadWriteDepthSurfaceFormats; } if (!Image::isImage2d(imageType)) { @@ -289,44 +289,40 @@ cl_int Context::getSupportedImageFormats( } if (imageFormats) { - numImageFormats = std::min(numEntries, numImageFormats); - cl_uint entry = 0; - for (entry = 0; entry < numImageFormats; ++entry) { - imageFormats[entry] = surfaceFormats[entry].OCLImageFormat; - } + auto appendFormats = [&](const SurfaceFormatInfo *srcSurfaceFormats, size_t srcFormatsCount) { + for (size_t srcFormatPos = 0; srcFormatPos < srcFormatsCount && entry < numEntries; ++srcFormatPos, ++entry) { + imageFormats[entry] = srcSurfaceFormats[srcFormatPos].OCLImageFormat; + } + }; + + appendFormats(baseSurfaceFormats, numImageFormats); if (nv12ExtensionEnabled && appendPlanarYUVSurfaces) { - for (uint32_t planarEntry = 0; planarEntry < numPlanarYuvSurfaceFormats && (entry < numEntries); ++planarEntry, ++entry) { - imageFormats[entry] = planarYuvSurfaceFormats[planarEntry].OCLImageFormat; - } + appendFormats(planarYuvSurfaceFormats, numPlanarYuvSurfaceFormats); } if (appendDepthSurfaces) { - for (uint32_t depthEntry = 0; depthEntry < numDepthFormats && (entry < numEntries); ++depthEntry, ++entry) { - imageFormats[entry] = depthFormats[depthEntry].OCLImageFormat; - } + appendFormats(depthFormats, numDepthFormats); } if (packedYuvExtensionEnabled && appendPackedYUVSurfaces) { - for (uint32_t packedEntry = 0; packedEntry < numPackedYuvSurfaceFormats && (entry < numEntries); ++packedEntry, ++entry) { - imageFormats[entry] = packedYuvSurfaceFormats[packedEntry].OCLImageFormat; - } + appendFormats(packedYuvSurfaceFormats, numPackedYuvSurfaceFormats); } } if (numImageFormatsReturned) { if (nv12ExtensionEnabled && appendPlanarYUVSurfaces) { - numImageFormats += static_cast(numPlanarYuvSurfaceFormats); + numImageFormats += numPlanarYuvSurfaceFormats; } if (packedYuvExtensionEnabled && appendPackedYUVSurfaces) { - numImageFormats += static_cast(numPackedYuvSurfaceFormats); + numImageFormats += numPackedYuvSurfaceFormats; } if (appendDepthSurfaces) { numImageFormats += numDepthFormats; } - *numImageFormatsReturned = numImageFormats; + *numImageFormatsReturned = static_cast(numImageFormats); } return CL_SUCCESS; } diff --git a/runtime/helpers/surface_formats.cpp b/runtime/helpers/surface_formats.cpp index 6700a34d2c..ac7538d9bf 100644 --- a/runtime/helpers/surface_formats.cpp +++ b/runtime/helpers/surface_formats.cpp @@ -28,175 +28,6 @@ namespace OCLRT { // clang-format off -enum GFX3DSTATE_SURFACEFORMAT : unsigned short { - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_FLOAT = 0x000, - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SINT = 0x001, - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UINT = 0x002, - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UNORM = 0x003, - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SNORM = 0x004, - GFX3DSTATE_SURFACEFORMAT_R64G64_FLOAT = 0x005, - GFX3DSTATE_SURFACEFORMAT_R32G32B32X32_FLOAT = 0x006, - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SSCALED = 0x007, - GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_USCALED = 0x008, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_FLOAT = 0x040, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_SINT = 0x041, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_UINT = 0x042, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_UNORM = 0x043, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_SNORM = 0x044, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_SSCALED = 0x045, - GFX3DSTATE_SURFACEFORMAT_R32G32B32_USCALED = 0x046, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UNORM = 0x080, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM = 0x081, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SINT = 0x082, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UINT = 0x083, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_FLOAT = 0x084, - GFX3DSTATE_SURFACEFORMAT_R32G32_FLOAT = 0x085, - GFX3DSTATE_SURFACEFORMAT_R32G32_SINT = 0x086, - GFX3DSTATE_SURFACEFORMAT_R32G32_UINT = 0x087, - GFX3DSTATE_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS = 0x088, - GFX3DSTATE_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT = 0x089, - GFX3DSTATE_SURFACEFORMAT_L32A32_FLOAT = 0x08A, - GFX3DSTATE_SURFACEFORMAT_R32G32_UNORM = 0x08B, - GFX3DSTATE_SURFACEFORMAT_R32G32_SNORM = 0x08C, - GFX3DSTATE_SURFACEFORMAT_R64_FLOAT = 0x08D, - GFX3DSTATE_SURFACEFORMAT_R16G16B16X16_UNORM = 0x08E, - GFX3DSTATE_SURFACEFORMAT_R16G16B16X16_FLOAT = 0x08F, - GFX3DSTATE_SURFACEFORMAT_A32X32_FLOAT = 0x090, - GFX3DSTATE_SURFACEFORMAT_L32X32_FLOAT = 0x091, - GFX3DSTATE_SURFACEFORMAT_I32X32_FLOAT = 0x092, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SSCALED = 0x093, - GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_USCALED = 0x094, - GFX3DSTATE_SURFACEFORMAT_R32G32_SSCALED = 0x095, - GFX3DSTATE_SURFACEFORMAT_R32G32_USCALED = 0x096, - GFX3DSTATE_SURFACEFORMAT_B8G8R8A8_UNORM = 0x0C0, - GFX3DSTATE_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB = 0x0C1, - GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM = 0x0C2, - GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB = 0x0C3, - GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UINT = 0x0C4, - GFX3DSTATE_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM = 0x0C5, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM = 0x0C7, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB = 0x0C8, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM = 0x0C9, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SINT = 0x0CA, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UINT = 0x0CB, - GFX3DSTATE_SURFACEFORMAT_R16G16_UNORM = 0x0CC, - GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM = 0x0CD, - GFX3DSTATE_SURFACEFORMAT_R16G16_SINT = 0x0CE, - GFX3DSTATE_SURFACEFORMAT_R16G16_UINT = 0x0CF, - GFX3DSTATE_SURFACEFORMAT_R16G16_FLOAT = 0x0D0, - GFX3DSTATE_SURFACEFORMAT_B10G10R10A2_UNORM = 0x0D1, - GFX3DSTATE_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB = 0x0D2, - GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT = 0x0D3, - GFX3DSTATE_SURFACEFORMAT_R32_SINT = 0x0D6, - GFX3DSTATE_SURFACEFORMAT_R32_UINT = 0x0D7, - GFX3DSTATE_SURFACEFORMAT_R32_FLOAT = 0x0D8, - GFX3DSTATE_SURFACEFORMAT_R24_UNORM_X8_TYPELESS = 0x0D9, - GFX3DSTATE_SURFACEFORMAT_X24_TYPELESS_G8_UINT = 0x0DA, - GFX3DSTATE_SURFACEFORMAT_L16A16_UNORM = 0x0DF, - GFX3DSTATE_SURFACEFORMAT_I24X8_UNORM = 0x0E0, - GFX3DSTATE_SURFACEFORMAT_L24X8_UNORM = 0x0E1, - GFX3DSTATE_SURFACEFORMAT_A24X8_UNORM = 0x0E2, - GFX3DSTATE_SURFACEFORMAT_I32_FLOAT = 0x0E3, - GFX3DSTATE_SURFACEFORMAT_L32_FLOAT = 0x0E4, - GFX3DSTATE_SURFACEFORMAT_A32_FLOAT = 0x0E5, - GFX3DSTATE_SURFACEFORMAT_B8G8R8X8_UNORM = 0x0E9, - GFX3DSTATE_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB = 0x0EA, - GFX3DSTATE_SURFACEFORMAT_R8G8B8X8_UNORM = 0x0EB, - GFX3DSTATE_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB = 0x0EC, - GFX3DSTATE_SURFACEFORMAT_R9G9B9E5_SHAREDEXP = 0x0ED, - GFX3DSTATE_SURFACEFORMAT_B10G10R10X2_UNORM = 0x0EE, - GFX3DSTATE_SURFACEFORMAT_L16A16_FLOAT = 0x0F0, - GFX3DSTATE_SURFACEFORMAT_R32_UNORM = 0x0F1, - GFX3DSTATE_SURFACEFORMAT_R32_SNORM = 0x0F2, - GFX3DSTATE_SURFACEFORMAT_R10G10B10X2_USCALED = 0x0F3, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SSCALED = 0x0F4, - GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_USCALED = 0x0F5, - GFX3DSTATE_SURFACEFORMAT_R16G16_SSCALED = 0x0F6, - GFX3DSTATE_SURFACEFORMAT_R16G16_USCALED = 0x0F7, - GFX3DSTATE_SURFACEFORMAT_R32_SSCALED = 0x0F8, - GFX3DSTATE_SURFACEFORMAT_R32_USCALED = 0x0F9, - GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM = 0x100, - GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM_SRGB = 0x101, - GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM = 0x102, - GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB = 0x103, - GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM = 0x104, - GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB = 0x105, - GFX3DSTATE_SURFACEFORMAT_R8G8_UNORM = 0x106, - GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM = 0x107, - GFX3DSTATE_SURFACEFORMAT_R8G8_SINT = 0x108, - GFX3DSTATE_SURFACEFORMAT_R8G8_UINT = 0x109, - GFX3DSTATE_SURFACEFORMAT_R16_UNORM = 0x10A, - GFX3DSTATE_SURFACEFORMAT_R16_SNORM = 0x10B, - GFX3DSTATE_SURFACEFORMAT_R16_SINT = 0x10C, - GFX3DSTATE_SURFACEFORMAT_R16_UINT = 0x10D, - GFX3DSTATE_SURFACEFORMAT_R16_FLOAT = 0x10E, - GFX3DSTATE_SURFACEFORMAT_I16_UNORM = 0x111, - GFX3DSTATE_SURFACEFORMAT_L16_UNORM = 0x112, - GFX3DSTATE_SURFACEFORMAT_A16_UNORM = 0x113, - GFX3DSTATE_SURFACEFORMAT_L8A8_UNORM = 0x114, - GFX3DSTATE_SURFACEFORMAT_I16_FLOAT = 0x115, - GFX3DSTATE_SURFACEFORMAT_L16_FLOAT = 0x116, - GFX3DSTATE_SURFACEFORMAT_A16_FLOAT = 0x117, - GFX3DSTATE_SURFACEFORMAT_L8A8_UNORM_SRGB = 0x118, - GFX3DSTATE_SURFACEFORMAT_R5G5_SNORM_B6_UNORM = 0x119, - GFX3DSTATE_SURFACEFORMAT_B5G5R5X1_UNORM = 0x11A, - GFX3DSTATE_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB = 0x11B, - GFX3DSTATE_SURFACEFORMAT_R8G8_SSCALED = 0x11C, - GFX3DSTATE_SURFACEFORMAT_R8G8_USCALED = 0x11D, - GFX3DSTATE_SURFACEFORMAT_R16_SSCALED = 0x11E, - GFX3DSTATE_SURFACEFORMAT_R16_USCALED = 0x11F, - GFX3DSTATE_SURFACEFORMAT_R8_UNORM = 0x140, - GFX3DSTATE_SURFACEFORMAT_R8_SNORM = 0x141, - GFX3DSTATE_SURFACEFORMAT_R8_SINT = 0x142, - GFX3DSTATE_SURFACEFORMAT_R8_UINT = 0x143, - GFX3DSTATE_SURFACEFORMAT_A8_UNORM = 0x144, - GFX3DSTATE_SURFACEFORMAT_I8_UNORM = 0x145, - GFX3DSTATE_SURFACEFORMAT_L8_UNORM = 0x146, - GFX3DSTATE_SURFACEFORMAT_P4A4_UNORM = 0x147, - GFX3DSTATE_SURFACEFORMAT_A4P4_UNORM = 0x148, - GFX3DSTATE_SURFACEFORMAT_R8_SSCALED = 0x149, - GFX3DSTATE_SURFACEFORMAT_R8_USCALED = 0x14A, - GFX3DSTATE_SURFACEFORMAT_P8_UNORM = 0x14B, - GFX3DSTATE_SURFACEFORMAT_L8_UNORM_SRGB = 0x14C, - GFX3DSTATE_SURFACEFORMAT_DXT1_RGB_SRGB = 0x180, - GFX3DSTATE_SURFACEFORMAT_R1_UINT = 0x181, - GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL = 0x182, - GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY = 0x183, - GFX3DSTATE_SURFACEFORMAT_P2_UNORM = 0x184, - GFX3DSTATE_SURFACEFORMAT_BC1_UNORM = 0x186, - GFX3DSTATE_SURFACEFORMAT_BC2_UNORM = 0x187, - GFX3DSTATE_SURFACEFORMAT_BC3_UNORM = 0x188, - GFX3DSTATE_SURFACEFORMAT_BC4_UNORM = 0x189, - GFX3DSTATE_SURFACEFORMAT_BC5_UNORM = 0x18A, - GFX3DSTATE_SURFACEFORMAT_BC1_UNORM_SRGB = 0x18B, - GFX3DSTATE_SURFACEFORMAT_BC2_UNORM_SRGB = 0x18C, - GFX3DSTATE_SURFACEFORMAT_BC3_UNORM_SRGB = 0x18D, - GFX3DSTATE_SURFACEFORMAT_MONO8 = 0x18E, - GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV = 0x18F, - GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY = 0x190, - GFX3DSTATE_SURFACEFORMAT_DXT1_RGB = 0x191, - GFX3DSTATE_SURFACEFORMAT_FXT1 = 0x192, - GFX3DSTATE_SURFACEFORMAT_R8G8B8_UNORM = 0x193, - GFX3DSTATE_SURFACEFORMAT_R8G8B8_SNORM = 0x194, - GFX3DSTATE_SURFACEFORMAT_R8G8B8_SSCALED = 0x195, - GFX3DSTATE_SURFACEFORMAT_R8G8B8_USCALED = 0x196, - GFX3DSTATE_SURFACEFORMAT_R64G64B64A64_FLOAT = 0x197, - GFX3DSTATE_SURFACEFORMAT_R64G64B64_FLOAT = 0x198, - GFX3DSTATE_SURFACEFORMAT_BC4_SNORM = 0x199, - GFX3DSTATE_SURFACEFORMAT_BC5_SNORM = 0x19A, - GFX3DSTATE_SURFACEFORMAT_R16G16B16_FLOAT = 0x19B, - GFX3DSTATE_SURFACEFORMAT_R16G16B16_UNORM = 0x19C, - GFX3DSTATE_SURFACEFORMAT_R16G16B16_SNORM = 0x19D, - GFX3DSTATE_SURFACEFORMAT_R16G16B16_SSCALED = 0x19E, - GFX3DSTATE_SURFACEFORMAT_R16G16B16_USCALED = 0x19F, - GFX3DSTATE_SURFACEFORMAT_BC6H_SF16 = 0x1A1, - GFX3DSTATE_SURFACEFORMAT_BC7_UNORM = 0x1A2, - GFX3DSTATE_SURFACEFORMAT_BC7_UNORM_SRGB = 0x1A3, - GFX3DSTATE_SURFACEFORMAT_BC6H_UF16 = 0x1A4, - GFX3DSTATE_SURFACEFORMAT_NV12 = 0x1A5, - GFX3DSTATE_SURFACEFORMAT_RAW = 0x1FF, - NUM_GFX3DSTATE_SURFACEFORMATS -}; //Initialize this with the required formats first. //Append the optional one later @@ -247,6 +78,13 @@ const SurfaceFormatInfo readOnlySurfaceFormats[] = { {{CL_RG, CL_FLOAT}, GMM_FORMAT_R32G32_FLOAT_TYPE, GFX3DSTATE_SURFACEFORMAT_R32G32_FLOAT , 0, 2, 4, 8}, {{CL_sRGBA, CL_UNORM_INT8}, GMM_FORMAT_R8G8B8A8_UNORM_SRGB_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB , 0, 4, 1, 4}, {{CL_sBGRA, CL_UNORM_INT8}, GMM_FORMAT_B8G8R8A8_UNORM_SRGB_TYPE, GFX3DSTATE_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB , 0, 4, 1, 4}, + // SNORM formats + {{CL_R, CL_SNORM_INT8}, GMM_FORMAT_R8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8_SNORM , 0, 1, 1, 1}, + {{CL_R, CL_SNORM_INT16}, GMM_FORMAT_R16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16_SNORM , 0, 1, 2, 2}, + {{CL_RG, CL_SNORM_INT8}, GMM_FORMAT_R8G8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM , 0, 2, 1, 2}, + {{CL_RG, CL_SNORM_INT16}, GMM_FORMAT_R16G16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM , 0, 2, 2, 4}, + {{CL_RGBA, CL_SNORM_INT8}, GMM_FORMAT_R8G8B8A8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM , 0, 4, 1, 4}, + {{CL_RGBA, CL_SNORM_INT16}, GMM_FORMAT_R16G16B16A16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM , 0, 4, 2, 8}, }; const SurfaceFormatInfo writeOnlySurfaceFormats[] = { @@ -287,6 +125,13 @@ const SurfaceFormatInfo writeOnlySurfaceFormats[] = { {{CL_LUMINANCE, CL_UNORM_INT16}, GMM_FORMAT_GENERIC_16BIT, GFX3DSTATE_SURFACEFORMAT_R16_UNORM , 0, 1, 2, 2}, {{CL_LUMINANCE, CL_HALF_FLOAT}, GMM_FORMAT_GENERIC_16BIT, GFX3DSTATE_SURFACEFORMAT_R16_FLOAT , 0, 1, 2, 2}, {{CL_LUMINANCE, CL_FLOAT}, GMM_FORMAT_GENERIC_32BIT, GFX3DSTATE_SURFACEFORMAT_R32_FLOAT , 0, 1, 4, 4}, + // SNORM formats + {{CL_R, CL_SNORM_INT8}, GMM_FORMAT_R8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8_SNORM , 0, 1, 1, 1}, + {{CL_R, CL_SNORM_INT16}, GMM_FORMAT_R16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16_SNORM , 0, 1, 2, 2}, + {{CL_RG, CL_SNORM_INT8}, GMM_FORMAT_R8G8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM , 0, 2, 1, 2}, + {{CL_RG, CL_SNORM_INT16}, GMM_FORMAT_R16G16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM , 0, 2, 2, 4}, + {{CL_RGBA, CL_SNORM_INT8}, GMM_FORMAT_R8G8B8A8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM , 0, 4, 1, 4}, + {{CL_RGBA, CL_SNORM_INT16}, GMM_FORMAT_R16G16B16A16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM , 0, 4, 2, 8}, }; const SurfaceFormatInfo readWriteSurfaceFormats[] = { @@ -327,6 +172,13 @@ const SurfaceFormatInfo readWriteSurfaceFormats[] = { {{CL_LUMINANCE, CL_UNORM_INT16}, GMM_FORMAT_GENERIC_16BIT, GFX3DSTATE_SURFACEFORMAT_R16_UNORM , 0, 1, 2, 2}, {{CL_LUMINANCE, CL_HALF_FLOAT}, GMM_FORMAT_GENERIC_16BIT, GFX3DSTATE_SURFACEFORMAT_R16_FLOAT , 0, 1, 2, 2}, {{CL_LUMINANCE, CL_FLOAT}, GMM_FORMAT_GENERIC_32BIT, GFX3DSTATE_SURFACEFORMAT_R32_FLOAT , 0, 1, 4, 4}, + // SNORM formats + {{CL_R, CL_SNORM_INT8}, GMM_FORMAT_R8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8_SNORM , 0, 1, 1, 1}, + {{CL_R, CL_SNORM_INT16}, GMM_FORMAT_R16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16_SNORM , 0, 1, 2, 2}, + {{CL_RG, CL_SNORM_INT8}, GMM_FORMAT_R8G8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM , 0, 2, 1, 2}, + {{CL_RG, CL_SNORM_INT16}, GMM_FORMAT_R16G16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM , 0, 2, 2, 4}, + {{CL_RGBA, CL_SNORM_INT8}, GMM_FORMAT_R8G8B8A8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM , 0, 4, 1, 4}, + {{CL_RGBA, CL_SNORM_INT16}, GMM_FORMAT_R16G16B16A16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM , 0, 4, 2, 8}, }; #if SUPPORT_YUV @@ -365,16 +217,5 @@ const size_t numReadOnlySurfaceFormats = ARRAY_COUNT(readOnlySurfaceFormats); const size_t numWriteOnlySurfaceFormats = ARRAY_COUNT(writeOnlySurfaceFormats); const size_t numReadWriteSurfaceFormats = ARRAY_COUNT(readWriteSurfaceFormats); -const SurfaceFormatInfo snormSurfaceFormats[] = { - {{CL_R, CL_SNORM_INT8}, GMM_FORMAT_R8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8_SNORM , 0, 1, 1, 1}, - {{CL_R, CL_SNORM_INT16}, GMM_FORMAT_R16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16_SNORM , 0, 1, 2, 2}, - {{CL_RG, CL_SNORM_INT8}, GMM_FORMAT_R8G8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM , 0, 2, 1, 2}, - {{CL_RG, CL_SNORM_INT16}, GMM_FORMAT_R16G16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM , 0, 2, 2, 4}, - {{CL_RGBA, CL_SNORM_INT8}, GMM_FORMAT_R8G8B8A8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM , 0, 4, 1, 4}, - {{CL_RGBA, CL_SNORM_INT16}, GMM_FORMAT_R16G16B16A16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM , 0, 4, 2, 8}, -}; - -const size_t numSnormSurfaceFormats = ARRAY_COUNT(snormSurfaceFormats); - // clang-format on } diff --git a/runtime/helpers/surface_formats.h b/runtime/helpers/surface_formats.h index 32dd961c14..125e787db9 100644 --- a/runtime/helpers/surface_formats.h +++ b/runtime/helpers/surface_formats.h @@ -32,7 +32,175 @@ #include "runtime/gmm_helper/gmm_lib.h" namespace OCLRT { -enum GFX3DSTATE_SURFACEFORMAT : unsigned short; +enum GFX3DSTATE_SURFACEFORMAT : unsigned short { + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_FLOAT = 0x000, + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SINT = 0x001, + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UINT = 0x002, + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UNORM = 0x003, + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SNORM = 0x004, + GFX3DSTATE_SURFACEFORMAT_R64G64_FLOAT = 0x005, + GFX3DSTATE_SURFACEFORMAT_R32G32B32X32_FLOAT = 0x006, + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SSCALED = 0x007, + GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_USCALED = 0x008, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_FLOAT = 0x040, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_SINT = 0x041, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_UINT = 0x042, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_UNORM = 0x043, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_SNORM = 0x044, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_SSCALED = 0x045, + GFX3DSTATE_SURFACEFORMAT_R32G32B32_USCALED = 0x046, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UNORM = 0x080, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM = 0x081, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SINT = 0x082, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UINT = 0x083, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_FLOAT = 0x084, + GFX3DSTATE_SURFACEFORMAT_R32G32_FLOAT = 0x085, + GFX3DSTATE_SURFACEFORMAT_R32G32_SINT = 0x086, + GFX3DSTATE_SURFACEFORMAT_R32G32_UINT = 0x087, + GFX3DSTATE_SURFACEFORMAT_R32_FLOAT_X8X24_TYPELESS = 0x088, + GFX3DSTATE_SURFACEFORMAT_X32_TYPELESS_G8X24_UINT = 0x089, + GFX3DSTATE_SURFACEFORMAT_L32A32_FLOAT = 0x08A, + GFX3DSTATE_SURFACEFORMAT_R32G32_UNORM = 0x08B, + GFX3DSTATE_SURFACEFORMAT_R32G32_SNORM = 0x08C, + GFX3DSTATE_SURFACEFORMAT_R64_FLOAT = 0x08D, + GFX3DSTATE_SURFACEFORMAT_R16G16B16X16_UNORM = 0x08E, + GFX3DSTATE_SURFACEFORMAT_R16G16B16X16_FLOAT = 0x08F, + GFX3DSTATE_SURFACEFORMAT_A32X32_FLOAT = 0x090, + GFX3DSTATE_SURFACEFORMAT_L32X32_FLOAT = 0x091, + GFX3DSTATE_SURFACEFORMAT_I32X32_FLOAT = 0x092, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SSCALED = 0x093, + GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_USCALED = 0x094, + GFX3DSTATE_SURFACEFORMAT_R32G32_SSCALED = 0x095, + GFX3DSTATE_SURFACEFORMAT_R32G32_USCALED = 0x096, + GFX3DSTATE_SURFACEFORMAT_B8G8R8A8_UNORM = 0x0C0, + GFX3DSTATE_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB = 0x0C1, + GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM = 0x0C2, + GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM_SRGB = 0x0C3, + GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UINT = 0x0C4, + GFX3DSTATE_SURFACEFORMAT_R10G10B10_SNORM_A2_UNORM = 0x0C5, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM = 0x0C7, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM_SRGB = 0x0C8, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM = 0x0C9, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SINT = 0x0CA, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UINT = 0x0CB, + GFX3DSTATE_SURFACEFORMAT_R16G16_UNORM = 0x0CC, + GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM = 0x0CD, + GFX3DSTATE_SURFACEFORMAT_R16G16_SINT = 0x0CE, + GFX3DSTATE_SURFACEFORMAT_R16G16_UINT = 0x0CF, + GFX3DSTATE_SURFACEFORMAT_R16G16_FLOAT = 0x0D0, + GFX3DSTATE_SURFACEFORMAT_B10G10R10A2_UNORM = 0x0D1, + GFX3DSTATE_SURFACEFORMAT_B10G10R10A2_UNORM_SRGB = 0x0D2, + GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT = 0x0D3, + GFX3DSTATE_SURFACEFORMAT_R32_SINT = 0x0D6, + GFX3DSTATE_SURFACEFORMAT_R32_UINT = 0x0D7, + GFX3DSTATE_SURFACEFORMAT_R32_FLOAT = 0x0D8, + GFX3DSTATE_SURFACEFORMAT_R24_UNORM_X8_TYPELESS = 0x0D9, + GFX3DSTATE_SURFACEFORMAT_X24_TYPELESS_G8_UINT = 0x0DA, + GFX3DSTATE_SURFACEFORMAT_L16A16_UNORM = 0x0DF, + GFX3DSTATE_SURFACEFORMAT_I24X8_UNORM = 0x0E0, + GFX3DSTATE_SURFACEFORMAT_L24X8_UNORM = 0x0E1, + GFX3DSTATE_SURFACEFORMAT_A24X8_UNORM = 0x0E2, + GFX3DSTATE_SURFACEFORMAT_I32_FLOAT = 0x0E3, + GFX3DSTATE_SURFACEFORMAT_L32_FLOAT = 0x0E4, + GFX3DSTATE_SURFACEFORMAT_A32_FLOAT = 0x0E5, + GFX3DSTATE_SURFACEFORMAT_B8G8R8X8_UNORM = 0x0E9, + GFX3DSTATE_SURFACEFORMAT_B8G8R8X8_UNORM_SRGB = 0x0EA, + GFX3DSTATE_SURFACEFORMAT_R8G8B8X8_UNORM = 0x0EB, + GFX3DSTATE_SURFACEFORMAT_R8G8B8X8_UNORM_SRGB = 0x0EC, + GFX3DSTATE_SURFACEFORMAT_R9G9B9E5_SHAREDEXP = 0x0ED, + GFX3DSTATE_SURFACEFORMAT_B10G10R10X2_UNORM = 0x0EE, + GFX3DSTATE_SURFACEFORMAT_L16A16_FLOAT = 0x0F0, + GFX3DSTATE_SURFACEFORMAT_R32_UNORM = 0x0F1, + GFX3DSTATE_SURFACEFORMAT_R32_SNORM = 0x0F2, + GFX3DSTATE_SURFACEFORMAT_R10G10B10X2_USCALED = 0x0F3, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SSCALED = 0x0F4, + GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_USCALED = 0x0F5, + GFX3DSTATE_SURFACEFORMAT_R16G16_SSCALED = 0x0F6, + GFX3DSTATE_SURFACEFORMAT_R16G16_USCALED = 0x0F7, + GFX3DSTATE_SURFACEFORMAT_R32_SSCALED = 0x0F8, + GFX3DSTATE_SURFACEFORMAT_R32_USCALED = 0x0F9, + GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM = 0x100, + GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM_SRGB = 0x101, + GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM = 0x102, + GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM_SRGB = 0x103, + GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM = 0x104, + GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM_SRGB = 0x105, + GFX3DSTATE_SURFACEFORMAT_R8G8_UNORM = 0x106, + GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM = 0x107, + GFX3DSTATE_SURFACEFORMAT_R8G8_SINT = 0x108, + GFX3DSTATE_SURFACEFORMAT_R8G8_UINT = 0x109, + GFX3DSTATE_SURFACEFORMAT_R16_UNORM = 0x10A, + GFX3DSTATE_SURFACEFORMAT_R16_SNORM = 0x10B, + GFX3DSTATE_SURFACEFORMAT_R16_SINT = 0x10C, + GFX3DSTATE_SURFACEFORMAT_R16_UINT = 0x10D, + GFX3DSTATE_SURFACEFORMAT_R16_FLOAT = 0x10E, + GFX3DSTATE_SURFACEFORMAT_I16_UNORM = 0x111, + GFX3DSTATE_SURFACEFORMAT_L16_UNORM = 0x112, + GFX3DSTATE_SURFACEFORMAT_A16_UNORM = 0x113, + GFX3DSTATE_SURFACEFORMAT_L8A8_UNORM = 0x114, + GFX3DSTATE_SURFACEFORMAT_I16_FLOAT = 0x115, + GFX3DSTATE_SURFACEFORMAT_L16_FLOAT = 0x116, + GFX3DSTATE_SURFACEFORMAT_A16_FLOAT = 0x117, + GFX3DSTATE_SURFACEFORMAT_L8A8_UNORM_SRGB = 0x118, + GFX3DSTATE_SURFACEFORMAT_R5G5_SNORM_B6_UNORM = 0x119, + GFX3DSTATE_SURFACEFORMAT_B5G5R5X1_UNORM = 0x11A, + GFX3DSTATE_SURFACEFORMAT_B5G5R5X1_UNORM_SRGB = 0x11B, + GFX3DSTATE_SURFACEFORMAT_R8G8_SSCALED = 0x11C, + GFX3DSTATE_SURFACEFORMAT_R8G8_USCALED = 0x11D, + GFX3DSTATE_SURFACEFORMAT_R16_SSCALED = 0x11E, + GFX3DSTATE_SURFACEFORMAT_R16_USCALED = 0x11F, + GFX3DSTATE_SURFACEFORMAT_R8_UNORM = 0x140, + GFX3DSTATE_SURFACEFORMAT_R8_SNORM = 0x141, + GFX3DSTATE_SURFACEFORMAT_R8_SINT = 0x142, + GFX3DSTATE_SURFACEFORMAT_R8_UINT = 0x143, + GFX3DSTATE_SURFACEFORMAT_A8_UNORM = 0x144, + GFX3DSTATE_SURFACEFORMAT_I8_UNORM = 0x145, + GFX3DSTATE_SURFACEFORMAT_L8_UNORM = 0x146, + GFX3DSTATE_SURFACEFORMAT_P4A4_UNORM = 0x147, + GFX3DSTATE_SURFACEFORMAT_A4P4_UNORM = 0x148, + GFX3DSTATE_SURFACEFORMAT_R8_SSCALED = 0x149, + GFX3DSTATE_SURFACEFORMAT_R8_USCALED = 0x14A, + GFX3DSTATE_SURFACEFORMAT_P8_UNORM = 0x14B, + GFX3DSTATE_SURFACEFORMAT_L8_UNORM_SRGB = 0x14C, + GFX3DSTATE_SURFACEFORMAT_DXT1_RGB_SRGB = 0x180, + GFX3DSTATE_SURFACEFORMAT_R1_UINT = 0x181, + GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL = 0x182, + GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY = 0x183, + GFX3DSTATE_SURFACEFORMAT_P2_UNORM = 0x184, + GFX3DSTATE_SURFACEFORMAT_BC1_UNORM = 0x186, + GFX3DSTATE_SURFACEFORMAT_BC2_UNORM = 0x187, + GFX3DSTATE_SURFACEFORMAT_BC3_UNORM = 0x188, + GFX3DSTATE_SURFACEFORMAT_BC4_UNORM = 0x189, + GFX3DSTATE_SURFACEFORMAT_BC5_UNORM = 0x18A, + GFX3DSTATE_SURFACEFORMAT_BC1_UNORM_SRGB = 0x18B, + GFX3DSTATE_SURFACEFORMAT_BC2_UNORM_SRGB = 0x18C, + GFX3DSTATE_SURFACEFORMAT_BC3_UNORM_SRGB = 0x18D, + GFX3DSTATE_SURFACEFORMAT_MONO8 = 0x18E, + GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV = 0x18F, + GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY = 0x190, + GFX3DSTATE_SURFACEFORMAT_DXT1_RGB = 0x191, + GFX3DSTATE_SURFACEFORMAT_FXT1 = 0x192, + GFX3DSTATE_SURFACEFORMAT_R8G8B8_UNORM = 0x193, + GFX3DSTATE_SURFACEFORMAT_R8G8B8_SNORM = 0x194, + GFX3DSTATE_SURFACEFORMAT_R8G8B8_SSCALED = 0x195, + GFX3DSTATE_SURFACEFORMAT_R8G8B8_USCALED = 0x196, + GFX3DSTATE_SURFACEFORMAT_R64G64B64A64_FLOAT = 0x197, + GFX3DSTATE_SURFACEFORMAT_R64G64B64_FLOAT = 0x198, + GFX3DSTATE_SURFACEFORMAT_BC4_SNORM = 0x199, + GFX3DSTATE_SURFACEFORMAT_BC5_SNORM = 0x19A, + GFX3DSTATE_SURFACEFORMAT_R16G16B16_FLOAT = 0x19B, + GFX3DSTATE_SURFACEFORMAT_R16G16B16_UNORM = 0x19C, + GFX3DSTATE_SURFACEFORMAT_R16G16B16_SNORM = 0x19D, + GFX3DSTATE_SURFACEFORMAT_R16G16B16_SSCALED = 0x19E, + GFX3DSTATE_SURFACEFORMAT_R16G16B16_USCALED = 0x19F, + GFX3DSTATE_SURFACEFORMAT_BC6H_SF16 = 0x1A1, + GFX3DSTATE_SURFACEFORMAT_BC7_UNORM = 0x1A2, + GFX3DSTATE_SURFACEFORMAT_BC7_UNORM_SRGB = 0x1A3, + GFX3DSTATE_SURFACEFORMAT_BC6H_UF16 = 0x1A4, + GFX3DSTATE_SURFACEFORMAT_NV12 = 0x1A5, + GFX3DSTATE_SURFACEFORMAT_RAW = 0x1FF, + NUM_GFX3DSTATE_SURFACEFORMATS +}; struct SurfaceFormatInfo { cl_image_format OCLImageFormat; @@ -88,6 +256,4 @@ extern const size_t numReadWriteDepthSurfaceFormats; extern const SurfaceFormatInfo readOnlyDepthSurfaceFormats[]; extern const SurfaceFormatInfo readWriteDepthSurfaceFormats[]; -extern const size_t numSnormSurfaceFormats; -extern const SurfaceFormatInfo snormSurfaceFormats[]; } // namespace OCLRT diff --git a/runtime/mem_obj/image.cpp b/runtime/mem_obj/image.cpp index c14deeae46..ee7c09392e 100644 --- a/runtime/mem_obj/image.cpp +++ b/runtime/mem_obj/image.cpp @@ -966,9 +966,6 @@ const SurfaceFormatInfo *Image::getSurfaceFormatFromTable(cl_mem_flags flags, co #else return nullptr; #endif - } else if (isSnormFormat(*imageFormat)) { - surfaceFormatTable = snormSurfaceFormats; - numSurfaceFormats = numSnormSurfaceFormats; } else if ((flags & CL_MEM_READ_ONLY) == CL_MEM_READ_ONLY) { surfaceFormatTable = isDepthFormat ? readOnlyDepthSurfaceFormats : readOnlySurfaceFormats; numSurfaceFormats = isDepthFormat ? numReadOnlyDepthSurfaceFormats : numReadOnlySurfaceFormats; @@ -1013,13 +1010,6 @@ bool Image::isDepthFormat(const cl_image_format &imageFormat) { return false; } -bool Image::isSnormFormat(const cl_image_format &imageFormat) { - if (imageFormat.image_channel_data_type == CL_SNORM_INT8 || imageFormat.image_channel_data_type == CL_SNORM_INT16) { - return true; - } - return false; -} - Image *Image::validateAndCreateImage(Context *context, cl_mem_flags flags, const cl_image_format *imageFormat, diff --git a/runtime/mem_obj/image.h b/runtime/mem_obj/image.h index d1c61b5f5c..9d4d0d19ac 100644 --- a/runtime/mem_obj/image.h +++ b/runtime/mem_obj/image.h @@ -117,8 +117,6 @@ class Image : public MemObj { static bool isDepthFormat(const cl_image_format &imageFormat); - static bool isSnormFormat(const cl_image_format &imageFormat); - cl_int getImageInfo(cl_image_info paramName, size_t paramValueSize, void *paramValue, diff --git a/runtime/sharings/d3d/d3d_sharing.cpp b/runtime/sharings/d3d/d3d_sharing.cpp index 5d73130fb3..e28133f32a 100644 --- a/runtime/sharings/d3d/d3d_sharing.cpp +++ b/runtime/sharings/d3d/d3d_sharing.cpp @@ -98,12 +98,6 @@ const SurfaceFormatInfo *D3DSharing::findSurfaceFormatInfo(GMM_RESOURCE_FOR const SurfaceFormatInfo *surfaceFormatInfo = nullptr; size_t numSurfaceFormats = 0; - for (size_t i = 0; i < numSnormSurfaceFormats; i++) { - if (gmmFormat == snormSurfaceFormats[i].GMMSurfaceFormat) { - return &snormSurfaceFormats[i]; - } - } - if ((flags & CL_MEM_READ_ONLY) == CL_MEM_READ_ONLY) { surfaceFormatTable = readOnlySurfaceFormats; numSurfaceFormats = numReadOnlySurfaceFormats; diff --git a/unit_tests/context/get_supported_image_formats_tests.cpp b/unit_tests/context/get_supported_image_formats_tests.cpp index 682c2a3349..f28512249e 100644 --- a/unit_tests/context/get_supported_image_formats_tests.cpp +++ b/unit_tests/context/get_supported_image_formats_tests.cpp @@ -37,8 +37,8 @@ struct GetSupportedImageFormatsTest : public PlatformFixture, public ContextFixture, public ::testing::TestWithParam> { - using PlatformFixture::SetUp; using ContextFixture::SetUp; + using PlatformFixture::SetUp; GetSupportedImageFormatsTest() { } @@ -102,9 +102,6 @@ TEST_P(GetSupportedImageFormatsTest, retrieveImageFormats) { for (cl_uint entry = 0; entry < numImageFormats; ++entry) { EXPECT_NE(0u, imageFormatList[entry].image_channel_order); EXPECT_NE(0u, imageFormatList[entry].image_channel_data_type); - // don't report SNORM - EXPECT_TRUE(CL_SNORM_INT8 != imageFormatList[entry].image_channel_data_type); - EXPECT_TRUE(CL_SNORM_INT16 != imageFormatList[entry].image_channel_data_type); } delete[] imageFormatList; diff --git a/unit_tests/d3d_sharing/d3d_tests.cpp b/unit_tests/d3d_sharing/d3d_tests.cpp index 48e9f0b3ce..fb03d6e0dc 100644 --- a/unit_tests/d3d_sharing/d3d_tests.cpp +++ b/unit_tests/d3d_sharing/d3d_tests.cpp @@ -768,20 +768,6 @@ TYPED_TEST_P(D3DTests, givenInvalidSubresourceWhenCreateTexture3dIsCalledThenFai EXPECT_EQ(CL_INVALID_VALUE, retVal); } -TYPED_TEST_P(D3DTests, givenSnormFormatWhenLookingForSurfaceFormatThenReturnValidFormat) { - EXPECT_GT(numSnormSurfaceFormats, 0u); - for (size_t i = 0; i < numSnormSurfaceFormats; i++) { - if (snormSurfaceFormats[i].OCLImageFormat.image_channel_order == CL_RGBA || - snormSurfaceFormats[i].OCLImageFormat.image_channel_order == CL_BGRA || - snormSurfaceFormats[i].OCLImageFormat.image_channel_order == CL_RG || - snormSurfaceFormats[i].OCLImageFormat.image_channel_order == CL_R) { - auto surfaceFormat = D3DSharing::findSurfaceFormatInfo(snormSurfaceFormats[i].GMMSurfaceFormat, 0); - ASSERT_NE(nullptr, surfaceFormat); - EXPECT_EQ(&snormSurfaceFormats[i], surfaceFormat); - } - } -} - TYPED_TEST_P(D3DTests, givenReadonlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat) { EXPECT_GT(numReadOnlySurfaceFormats, 0u); for (size_t i = 0; i < numReadOnlySurfaceFormats; i++) { @@ -1261,7 +1247,6 @@ REGISTER_TYPED_TEST_CASE_P(D3DTests, givenD3DTextureWithTheSameSubresourceWhenNextCreateIsCalledThenFail, givenInvalidSubresourceWhenCreateTexture2dIsCalledThenFail, givenInvalidSubresourceWhenCreateTexture3dIsCalledThenFail, - givenSnormFormatWhenLookingForSurfaceFormatThenReturnValidFormat, givenReadonlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat, givenWriteOnlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat, givenReadWriteFormatWhenLookingForSurfaceFormatThenReturnValidFormat, diff --git a/unit_tests/mem_obj/image_snorm_tests.cpp b/unit_tests/mem_obj/image_snorm_tests.cpp index be5bb52923..16ce46a125 100644 --- a/unit_tests/mem_obj/image_snorm_tests.cpp +++ b/unit_tests/mem_obj/image_snorm_tests.cpp @@ -23,83 +23,66 @@ #include "runtime/helpers/surface_formats.h" #include "runtime/mem_obj/image.h" #include "gtest/gtest.h" +#include using namespace OCLRT; -typedef decltype(numSnormSurfaceFormats) SnormSurfaceFormatsCountType; -class GetSurfaceFormatTest : public ::testing::TestWithParam> { - public: - void SetUp() override { - size_t index; - std::tie(index, flags) = GetParam(); - surfaceFormat = snormSurfaceFormats[index]; - } +const cl_mem_flags flagsForTests[] = {CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY, CL_MEM_READ_WRITE}; - void compareFormats(const SurfaceFormatInfo *first, const SurfaceFormatInfo *second) { - EXPECT_EQ(first->GenxSurfaceFormat, second->GenxSurfaceFormat); - EXPECT_EQ(first->GMMSurfaceFormat, second->GMMSurfaceFormat); - EXPECT_EQ(first->GMMTileWalk, second->GMMTileWalk); - EXPECT_EQ(first->ImageElementSizeInBytes, second->ImageElementSizeInBytes); - EXPECT_EQ(first->NumChannels, second->NumChannels); - EXPECT_EQ(first->OCLImageFormat.image_channel_data_type, second->OCLImageFormat.image_channel_data_type); - EXPECT_EQ(first->OCLImageFormat.image_channel_order, second->OCLImageFormat.image_channel_order); - EXPECT_EQ(first->PerChannelSizeInBytes, second->PerChannelSizeInBytes); - } - - SurfaceFormatInfo surfaceFormat; - cl_mem_flags flags; +const std::tuple paramsForSnormTests[] = { + std::make_tuple(readOnlySurfaceFormats, numReadOnlySurfaceFormats), + std::make_tuple(writeOnlySurfaceFormats, numWriteOnlySurfaceFormats), + std::make_tuple(readWriteSurfaceFormats, numReadWriteSurfaceFormats), }; -TEST_P(GetSurfaceFormatTest, givenSnormFormatWhenGetSurfaceFormatFromTableIsCalledThenReturnsCorrectFormat) { - auto format = Image::getSurfaceFormatFromTable(flags, &surfaceFormat.OCLImageFormat); - EXPECT_NE(nullptr, format); - compareFormats(&surfaceFormat, format); +const std::array referenceSnormSurfaceFormats = {{ + // clang-format off + {{CL_R, CL_SNORM_INT8}, GMM_FORMAT_R8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8_SNORM, 0, 1, 1, 1}, + {{CL_R, CL_SNORM_INT16}, GMM_FORMAT_R16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16_SNORM, 0, 1, 2, 2}, + {{CL_RG, CL_SNORM_INT8}, GMM_FORMAT_R8G8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM, 0, 2, 1, 2}, + {{CL_RG, CL_SNORM_INT16}, GMM_FORMAT_R16G16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM, 0, 2, 2, 4}, + {{CL_RGBA, CL_SNORM_INT8}, GMM_FORMAT_R8G8B8A8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM, 0, 4, 1, 4}, + {{CL_RGBA, CL_SNORM_INT16}, GMM_FORMAT_R16G16B16A16_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM, 0, 4, 2, 8}, + // clang-format on +}}; + +using SnormSurfaceFormatAccessFlagsTests = ::testing::TestWithParam; + +TEST_P(SnormSurfaceFormatAccessFlagsTests, givenSnormFormatWhenGetSurfaceFormatFromTableIsCalledThenReturnsCorrectFormat) { + EXPECT_EQ(6u, referenceSnormSurfaceFormats.size()); + cl_mem_flags flags = GetParam(); + + for (size_t i = 0u; i < referenceSnormSurfaceFormats.size(); i++) { + const auto &snormSurfaceFormat = referenceSnormSurfaceFormats[i]; + auto format = Image::getSurfaceFormatFromTable(flags, &snormSurfaceFormat.OCLImageFormat); + EXPECT_NE(nullptr, format); + EXPECT_TRUE(memcmp(&snormSurfaceFormat, format, sizeof(SurfaceFormatInfo)) == 0); + } } -cl_mem_flags flagsForTests[] = {CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY, CL_MEM_READ_WRITE}; +using SnormSurfaceFormatTests = ::testing::TestWithParam>; + +TEST_P(SnormSurfaceFormatTests, givenSnormOclFormatWhenCheckingrReadOnlySurfaceFormatsThenFindExactCount) { + const SurfaceFormatInfo *formatsTable = std::get<0>(GetParam()); + size_t formatsTableCount = std::get<1>(GetParam()); + + size_t snormFormatsFound = 0; + for (size_t i = 0; i < formatsTableCount; i++) { + auto oclFormat = formatsTable[i].OCLImageFormat; + if (CL_SNORM_INT8 == oclFormat.image_channel_data_type || CL_SNORM_INT16 == oclFormat.image_channel_data_type) { + EXPECT_TRUE(oclFormat.image_channel_order == CL_R || oclFormat.image_channel_order == CL_RG || oclFormat.image_channel_order == CL_RGBA); + snormFormatsFound++; + } + } + EXPECT_EQ(6u, snormFormatsFound); +} INSTANTIATE_TEST_CASE_P( ImageSnormTests, - GetSurfaceFormatTest, - ::testing::Combine( - ::testing::Range(static_cast(0u), numSnormSurfaceFormats), - ::testing::ValuesIn(flagsForTests))); - -class IsSnormFormatTest : public ::testing::TestWithParam> { - public: - void SetUp() override { - std::tie(format.image_channel_data_type, expectedValue) = GetParam(); - } - - cl_image_format format; - bool expectedValue; -}; - -TEST_P(IsSnormFormatTest, givenSnormFormatWhenGetSurfaceFormatFromTableIsCalledThenReturnsCorrectFormat) { - bool retVal = Image::isSnormFormat(format); - EXPECT_EQ(expectedValue, retVal); -} - -std::tuple paramsForSnormTests[] = { - std::make_tuple(CL_SNORM_INT8, true), - std::make_tuple(CL_SNORM_INT16, true), - std::make_tuple(CL_UNORM_INT8, false), - std::make_tuple(CL_UNORM_INT16, false), - std::make_tuple(CL_UNORM_SHORT_565, false), - std::make_tuple(CL_UNORM_SHORT_555, false), - std::make_tuple(CL_UNORM_INT_101010, false), - std::make_tuple(CL_SIGNED_INT8, false), - std::make_tuple(CL_SIGNED_INT16, false), - std::make_tuple(CL_SIGNED_INT32, false), - std::make_tuple(CL_UNSIGNED_INT8, false), - std::make_tuple(CL_UNSIGNED_INT16, false), - std::make_tuple(CL_UNSIGNED_INT32, false), - std::make_tuple(CL_HALF_FLOAT, false), - std::make_tuple(CL_FLOAT, false), - std::make_tuple(CL_UNORM_INT24, false), - std::make_tuple(CL_UNORM_INT_101010_2, false)}; + SnormSurfaceFormatAccessFlagsTests, + ::testing::ValuesIn(flagsForTests)); INSTANTIATE_TEST_CASE_P( ImageSnormTests, - IsSnormFormatTest, + SnormSurfaceFormatTests, ::testing::ValuesIn(paramsForSnormTests)); diff --git a/unit_tests/mocks/mock_gmm_resource_info.cpp b/unit_tests/mocks/mock_gmm_resource_info.cpp index 45d8f91528..a009641928 100644 --- a/unit_tests/mocks/mock_gmm_resource_info.cpp +++ b/unit_tests/mocks/mock_gmm_resource_info.cpp @@ -103,8 +103,6 @@ void MockGmmResourceInfo::setSurfaceFormat() { iterate(readOnlyDepthSurfaceFormats, numReadOnlyDepthSurfaceFormats); iterate(readWriteDepthSurfaceFormats, numReadWriteDepthSurfaceFormats); - iterate(snormSurfaceFormats, numSnormSurfaceFormats); - ASSERT_NE(nullptr, surfaceFormatInfo); }