SNORM formats support

Change-Id: I4138a3e96788aab2a8f3af108dcbfa6f81006bf9
This commit is contained in:
Dunajski, Bartosz
2018-01-31 14:01:59 +01:00
parent e719ec4c47
commit 8974af4de8
11 changed files with 267 additions and 319 deletions

2
Jenkinsfile vendored
View File

@@ -2,4 +2,4 @@
neoDependenciesRev='733920-765' neoDependenciesRev='733920-765'
strategy='EQUAL' strategy='EQUAL'
allowedF=47 allowedF=47
allowedCD=364 allowedCD=363

View File

@@ -246,9 +246,9 @@ cl_int Context::getSupportedImageFormats(
cl_image_format *imageFormats, cl_image_format *imageFormats,
cl_uint *numImageFormatsReturned) { cl_uint *numImageFormatsReturned) {
cl_uint numImageFormats = 0; size_t numImageFormats = 0;
cl_uint numDepthFormats = 0; size_t numDepthFormats = 0;
const SurfaceFormatInfo *surfaceFormats = nullptr; const SurfaceFormatInfo *baseSurfaceFormats = nullptr;
const SurfaceFormatInfo *depthFormats = nullptr; const SurfaceFormatInfo *depthFormats = nullptr;
const bool nv12ExtensionEnabled = device->getDeviceInfo().nv12Extension; const bool nv12ExtensionEnabled = device->getDeviceInfo().nv12Extension;
@@ -258,26 +258,26 @@ cl_int Context::getSupportedImageFormats(
bool appendDepthSurfaces = true; bool appendDepthSurfaces = true;
if (flags & CL_MEM_READ_ONLY) { if (flags & CL_MEM_READ_ONLY) {
numImageFormats = static_cast<cl_uint>(numReadOnlySurfaceFormats); numImageFormats = numReadOnlySurfaceFormats;
surfaceFormats = readOnlySurfaceFormats; baseSurfaceFormats = readOnlySurfaceFormats;
depthFormats = readOnlyDepthSurfaceFormats; depthFormats = readOnlyDepthSurfaceFormats;
numDepthFormats = static_cast<cl_uint>(numReadOnlyDepthSurfaceFormats); numDepthFormats = numReadOnlyDepthSurfaceFormats;
appendPlanarYUVSurfaces = true; appendPlanarYUVSurfaces = true;
appendPackedYUVSurfaces = true; appendPackedYUVSurfaces = true;
} else if (flags & CL_MEM_WRITE_ONLY) { } else if (flags & CL_MEM_WRITE_ONLY) {
numImageFormats = static_cast<cl_uint>(numWriteOnlySurfaceFormats); numImageFormats = numWriteOnlySurfaceFormats;
surfaceFormats = writeOnlySurfaceFormats; baseSurfaceFormats = writeOnlySurfaceFormats;
depthFormats = readWriteDepthSurfaceFormats; depthFormats = readWriteDepthSurfaceFormats;
numDepthFormats = static_cast<cl_uint>(numReadWriteDepthSurfaceFormats); numDepthFormats = numReadWriteDepthSurfaceFormats;
} else if (nv12ExtensionEnabled && (flags & CL_MEM_NO_ACCESS_INTEL)) { } else if (nv12ExtensionEnabled && (flags & CL_MEM_NO_ACCESS_INTEL)) {
numImageFormats = static_cast<cl_uint>(numReadOnlySurfaceFormats); numImageFormats = numReadOnlySurfaceFormats;
surfaceFormats = readOnlySurfaceFormats; baseSurfaceFormats = readOnlySurfaceFormats;
appendPlanarYUVSurfaces = true; appendPlanarYUVSurfaces = true;
} else { } else {
numImageFormats = static_cast<cl_uint>(numReadWriteSurfaceFormats); numImageFormats = numReadWriteSurfaceFormats;
surfaceFormats = readWriteSurfaceFormats; baseSurfaceFormats = readWriteSurfaceFormats;
depthFormats = readWriteDepthSurfaceFormats; depthFormats = readWriteDepthSurfaceFormats;
numDepthFormats = static_cast<cl_uint>(numReadWriteDepthSurfaceFormats); numDepthFormats = numReadWriteDepthSurfaceFormats;
} }
if (!Image::isImage2d(imageType)) { if (!Image::isImage2d(imageType)) {
@@ -289,44 +289,40 @@ cl_int Context::getSupportedImageFormats(
} }
if (imageFormats) { if (imageFormats) {
numImageFormats = std::min(numEntries, numImageFormats);
cl_uint entry = 0; cl_uint entry = 0;
for (entry = 0; entry < numImageFormats; ++entry) { auto appendFormats = [&](const SurfaceFormatInfo *srcSurfaceFormats, size_t srcFormatsCount) {
imageFormats[entry] = surfaceFormats[entry].OCLImageFormat; for (size_t srcFormatPos = 0; srcFormatPos < srcFormatsCount && entry < numEntries; ++srcFormatPos, ++entry) {
} imageFormats[entry] = srcSurfaceFormats[srcFormatPos].OCLImageFormat;
}
};
appendFormats(baseSurfaceFormats, numImageFormats);
if (nv12ExtensionEnabled && appendPlanarYUVSurfaces) { if (nv12ExtensionEnabled && appendPlanarYUVSurfaces) {
for (uint32_t planarEntry = 0; planarEntry < numPlanarYuvSurfaceFormats && (entry < numEntries); ++planarEntry, ++entry) { appendFormats(planarYuvSurfaceFormats, numPlanarYuvSurfaceFormats);
imageFormats[entry] = planarYuvSurfaceFormats[planarEntry].OCLImageFormat;
}
} }
if (appendDepthSurfaces) { if (appendDepthSurfaces) {
for (uint32_t depthEntry = 0; depthEntry < numDepthFormats && (entry < numEntries); ++depthEntry, ++entry) { appendFormats(depthFormats, numDepthFormats);
imageFormats[entry] = depthFormats[depthEntry].OCLImageFormat;
}
} }
if (packedYuvExtensionEnabled && appendPackedYUVSurfaces) { if (packedYuvExtensionEnabled && appendPackedYUVSurfaces) {
for (uint32_t packedEntry = 0; packedEntry < numPackedYuvSurfaceFormats && (entry < numEntries); ++packedEntry, ++entry) { appendFormats(packedYuvSurfaceFormats, numPackedYuvSurfaceFormats);
imageFormats[entry] = packedYuvSurfaceFormats[packedEntry].OCLImageFormat;
}
} }
} }
if (numImageFormatsReturned) { if (numImageFormatsReturned) {
if (nv12ExtensionEnabled && appendPlanarYUVSurfaces) { if (nv12ExtensionEnabled && appendPlanarYUVSurfaces) {
numImageFormats += static_cast<cl_uint>(numPlanarYuvSurfaceFormats); numImageFormats += numPlanarYuvSurfaceFormats;
} }
if (packedYuvExtensionEnabled && appendPackedYUVSurfaces) { if (packedYuvExtensionEnabled && appendPackedYUVSurfaces) {
numImageFormats += static_cast<cl_uint>(numPackedYuvSurfaceFormats); numImageFormats += numPackedYuvSurfaceFormats;
} }
if (appendDepthSurfaces) { if (appendDepthSurfaces) {
numImageFormats += numDepthFormats; numImageFormats += numDepthFormats;
} }
*numImageFormatsReturned = numImageFormats; *numImageFormatsReturned = static_cast<cl_uint>(numImageFormats);
} }
return CL_SUCCESS; return CL_SUCCESS;
} }

View File

@@ -28,175 +28,6 @@
namespace OCLRT { namespace OCLRT {
// clang-format off // 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. //Initialize this with the required formats first.
//Append the optional one later //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_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_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}, {{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[] = { 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_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_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}, {{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[] = { 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_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_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}, {{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 #if SUPPORT_YUV
@@ -365,16 +217,5 @@ const size_t numReadOnlySurfaceFormats = ARRAY_COUNT(readOnlySurfaceFormats);
const size_t numWriteOnlySurfaceFormats = ARRAY_COUNT(writeOnlySurfaceFormats); const size_t numWriteOnlySurfaceFormats = ARRAY_COUNT(writeOnlySurfaceFormats);
const size_t numReadWriteSurfaceFormats = ARRAY_COUNT(readWriteSurfaceFormats); 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 // clang-format on
} }

View File

@@ -32,7 +32,175 @@
#include "runtime/gmm_helper/gmm_lib.h" #include "runtime/gmm_helper/gmm_lib.h"
namespace OCLRT { 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 { struct SurfaceFormatInfo {
cl_image_format OCLImageFormat; cl_image_format OCLImageFormat;
@@ -88,6 +256,4 @@ extern const size_t numReadWriteDepthSurfaceFormats;
extern const SurfaceFormatInfo readOnlyDepthSurfaceFormats[]; extern const SurfaceFormatInfo readOnlyDepthSurfaceFormats[];
extern const SurfaceFormatInfo readWriteDepthSurfaceFormats[]; extern const SurfaceFormatInfo readWriteDepthSurfaceFormats[];
extern const size_t numSnormSurfaceFormats;
extern const SurfaceFormatInfo snormSurfaceFormats[];
} // namespace OCLRT } // namespace OCLRT

View File

@@ -966,9 +966,6 @@ const SurfaceFormatInfo *Image::getSurfaceFormatFromTable(cl_mem_flags flags, co
#else #else
return nullptr; return nullptr;
#endif #endif
} else if (isSnormFormat(*imageFormat)) {
surfaceFormatTable = snormSurfaceFormats;
numSurfaceFormats = numSnormSurfaceFormats;
} else if ((flags & CL_MEM_READ_ONLY) == CL_MEM_READ_ONLY) { } else if ((flags & CL_MEM_READ_ONLY) == CL_MEM_READ_ONLY) {
surfaceFormatTable = isDepthFormat ? readOnlyDepthSurfaceFormats : readOnlySurfaceFormats; surfaceFormatTable = isDepthFormat ? readOnlyDepthSurfaceFormats : readOnlySurfaceFormats;
numSurfaceFormats = isDepthFormat ? numReadOnlyDepthSurfaceFormats : numReadOnlySurfaceFormats; numSurfaceFormats = isDepthFormat ? numReadOnlyDepthSurfaceFormats : numReadOnlySurfaceFormats;
@@ -1013,13 +1010,6 @@ bool Image::isDepthFormat(const cl_image_format &imageFormat) {
return false; 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, Image *Image::validateAndCreateImage(Context *context,
cl_mem_flags flags, cl_mem_flags flags,
const cl_image_format *imageFormat, const cl_image_format *imageFormat,

View File

@@ -117,8 +117,6 @@ class Image : public MemObj {
static bool isDepthFormat(const cl_image_format &imageFormat); static bool isDepthFormat(const cl_image_format &imageFormat);
static bool isSnormFormat(const cl_image_format &imageFormat);
cl_int getImageInfo(cl_image_info paramName, cl_int getImageInfo(cl_image_info paramName,
size_t paramValueSize, size_t paramValueSize,
void *paramValue, void *paramValue,

View File

@@ -98,12 +98,6 @@ const SurfaceFormatInfo *D3DSharing<D3D>::findSurfaceFormatInfo(GMM_RESOURCE_FOR
const SurfaceFormatInfo *surfaceFormatInfo = nullptr; const SurfaceFormatInfo *surfaceFormatInfo = nullptr;
size_t numSurfaceFormats = 0; 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) { if ((flags & CL_MEM_READ_ONLY) == CL_MEM_READ_ONLY) {
surfaceFormatTable = readOnlySurfaceFormats; surfaceFormatTable = readOnlySurfaceFormats;
numSurfaceFormats = numReadOnlySurfaceFormats; numSurfaceFormats = numReadOnlySurfaceFormats;

View File

@@ -37,8 +37,8 @@ struct GetSupportedImageFormatsTest : public PlatformFixture,
public ContextFixture, public ContextFixture,
public ::testing::TestWithParam<std::tuple<uint64_t, uint32_t>> { public ::testing::TestWithParam<std::tuple<uint64_t, uint32_t>> {
using PlatformFixture::SetUp;
using ContextFixture::SetUp; using ContextFixture::SetUp;
using PlatformFixture::SetUp;
GetSupportedImageFormatsTest() { GetSupportedImageFormatsTest() {
} }
@@ -102,9 +102,6 @@ TEST_P(GetSupportedImageFormatsTest, retrieveImageFormats) {
for (cl_uint entry = 0; entry < numImageFormats; ++entry) { for (cl_uint entry = 0; entry < numImageFormats; ++entry) {
EXPECT_NE(0u, imageFormatList[entry].image_channel_order); EXPECT_NE(0u, imageFormatList[entry].image_channel_order);
EXPECT_NE(0u, imageFormatList[entry].image_channel_data_type); 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; delete[] imageFormatList;

View File

@@ -768,20 +768,6 @@ TYPED_TEST_P(D3DTests, givenInvalidSubresourceWhenCreateTexture3dIsCalledThenFai
EXPECT_EQ(CL_INVALID_VALUE, retVal); 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<TypeParam>::findSurfaceFormatInfo(snormSurfaceFormats[i].GMMSurfaceFormat, 0);
ASSERT_NE(nullptr, surfaceFormat);
EXPECT_EQ(&snormSurfaceFormats[i], surfaceFormat);
}
}
}
TYPED_TEST_P(D3DTests, givenReadonlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat) { TYPED_TEST_P(D3DTests, givenReadonlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat) {
EXPECT_GT(numReadOnlySurfaceFormats, 0u); EXPECT_GT(numReadOnlySurfaceFormats, 0u);
for (size_t i = 0; i < numReadOnlySurfaceFormats; i++) { for (size_t i = 0; i < numReadOnlySurfaceFormats; i++) {
@@ -1261,7 +1247,6 @@ REGISTER_TYPED_TEST_CASE_P(D3DTests,
givenD3DTextureWithTheSameSubresourceWhenNextCreateIsCalledThenFail, givenD3DTextureWithTheSameSubresourceWhenNextCreateIsCalledThenFail,
givenInvalidSubresourceWhenCreateTexture2dIsCalledThenFail, givenInvalidSubresourceWhenCreateTexture2dIsCalledThenFail,
givenInvalidSubresourceWhenCreateTexture3dIsCalledThenFail, givenInvalidSubresourceWhenCreateTexture3dIsCalledThenFail,
givenSnormFormatWhenLookingForSurfaceFormatThenReturnValidFormat,
givenReadonlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat, givenReadonlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat,
givenWriteOnlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat, givenWriteOnlyFormatWhenLookingForSurfaceFormatThenReturnValidFormat,
givenReadWriteFormatWhenLookingForSurfaceFormatThenReturnValidFormat, givenReadWriteFormatWhenLookingForSurfaceFormatThenReturnValidFormat,

View File

@@ -23,83 +23,66 @@
#include "runtime/helpers/surface_formats.h" #include "runtime/helpers/surface_formats.h"
#include "runtime/mem_obj/image.h" #include "runtime/mem_obj/image.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include <array>
using namespace OCLRT; using namespace OCLRT;
typedef decltype(numSnormSurfaceFormats) SnormSurfaceFormatsCountType; const cl_mem_flags flagsForTests[] = {CL_MEM_READ_ONLY, CL_MEM_WRITE_ONLY, CL_MEM_READ_WRITE};
class GetSurfaceFormatTest : public ::testing::TestWithParam<std::tuple<size_t /*format index*/, uint64_t /*flags*/>> {
public:
void SetUp() override {
size_t index;
std::tie(index, flags) = GetParam();
surfaceFormat = snormSurfaceFormats[index];
}
void compareFormats(const SurfaceFormatInfo *first, const SurfaceFormatInfo *second) { const std::tuple<const SurfaceFormatInfo *, const size_t> paramsForSnormTests[] = {
EXPECT_EQ(first->GenxSurfaceFormat, second->GenxSurfaceFormat); std::make_tuple(readOnlySurfaceFormats, numReadOnlySurfaceFormats),
EXPECT_EQ(first->GMMSurfaceFormat, second->GMMSurfaceFormat); std::make_tuple(writeOnlySurfaceFormats, numWriteOnlySurfaceFormats),
EXPECT_EQ(first->GMMTileWalk, second->GMMTileWalk); std::make_tuple(readWriteSurfaceFormats, numReadWriteSurfaceFormats),
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;
}; };
TEST_P(GetSurfaceFormatTest, givenSnormFormatWhenGetSurfaceFormatFromTableIsCalledThenReturnsCorrectFormat) { const std::array<SurfaceFormatInfo, 6> referenceSnormSurfaceFormats = {{
auto format = Image::getSurfaceFormatFromTable(flags, &surfaceFormat.OCLImageFormat); // clang-format off
EXPECT_NE(nullptr, format); {{CL_R, CL_SNORM_INT8}, GMM_FORMAT_R8_SNORM_TYPE, GFX3DSTATE_SURFACEFORMAT_R8_SNORM, 0, 1, 1, 1},
compareFormats(&surfaceFormat, format); {{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<uint64_t /*flags*/>;
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<std::tuple<const SurfaceFormatInfo *, const size_t>>;
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( INSTANTIATE_TEST_CASE_P(
ImageSnormTests, ImageSnormTests,
GetSurfaceFormatTest, SnormSurfaceFormatAccessFlagsTests,
::testing::Combine( ::testing::ValuesIn(flagsForTests));
::testing::Range(static_cast<SnormSurfaceFormatsCountType>(0u), numSnormSurfaceFormats),
::testing::ValuesIn(flagsForTests)));
class IsSnormFormatTest : public ::testing::TestWithParam<std::tuple<uint32_t /*image data type*/, bool /*expected value*/>> {
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<uint32_t, bool> paramsForSnormTests[] = {
std::make_tuple<uint32_t, bool>(CL_SNORM_INT8, true),
std::make_tuple<uint32_t, bool>(CL_SNORM_INT16, true),
std::make_tuple<uint32_t, bool>(CL_UNORM_INT8, false),
std::make_tuple<uint32_t, bool>(CL_UNORM_INT16, false),
std::make_tuple<uint32_t, bool>(CL_UNORM_SHORT_565, false),
std::make_tuple<uint32_t, bool>(CL_UNORM_SHORT_555, false),
std::make_tuple<uint32_t, bool>(CL_UNORM_INT_101010, false),
std::make_tuple<uint32_t, bool>(CL_SIGNED_INT8, false),
std::make_tuple<uint32_t, bool>(CL_SIGNED_INT16, false),
std::make_tuple<uint32_t, bool>(CL_SIGNED_INT32, false),
std::make_tuple<uint32_t, bool>(CL_UNSIGNED_INT8, false),
std::make_tuple<uint32_t, bool>(CL_UNSIGNED_INT16, false),
std::make_tuple<uint32_t, bool>(CL_UNSIGNED_INT32, false),
std::make_tuple<uint32_t, bool>(CL_HALF_FLOAT, false),
std::make_tuple<uint32_t, bool>(CL_FLOAT, false),
std::make_tuple<uint32_t, bool>(CL_UNORM_INT24, false),
std::make_tuple<uint32_t, bool>(CL_UNORM_INT_101010_2, false)};
INSTANTIATE_TEST_CASE_P( INSTANTIATE_TEST_CASE_P(
ImageSnormTests, ImageSnormTests,
IsSnormFormatTest, SnormSurfaceFormatTests,
::testing::ValuesIn(paramsForSnormTests)); ::testing::ValuesIn(paramsForSnormTests));

View File

@@ -103,8 +103,6 @@ void MockGmmResourceInfo::setSurfaceFormat() {
iterate(readOnlyDepthSurfaceFormats, numReadOnlyDepthSurfaceFormats); iterate(readOnlyDepthSurfaceFormats, numReadOnlyDepthSurfaceFormats);
iterate(readWriteDepthSurfaceFormats, numReadWriteDepthSurfaceFormats); iterate(readWriteDepthSurfaceFormats, numReadWriteDepthSurfaceFormats);
iterate(snormSurfaceFormats, numSnormSurfaceFormats);
ASSERT_NE(nullptr, surfaceFormatInfo); ASSERT_NE(nullptr, surfaceFormatInfo);
} }