Commit 8aa74a42 by Alexis Hetu Committed by Alexis Hétu

Vulkan image formats

4 basic things here: - Set SwiftShader formats to match the equivalent Vulkan format, when available - Removed SwiftShader formats with no exact match in Vulkan formats - Added all currently unavailable Vulkan formats in comments in the list, possibly to be added later, when necessary - Marked all mandatory sampled formats in the list (in comments) Bug b/118429780 Change-Id: I7d7b661e64cb4aee9eb724c64664cee8271cc48c Reviewed-on: https://swiftshader-review.googlesource.com/c/21808Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 825d344d
......@@ -494,11 +494,6 @@ namespace sw
return COMPARE_BYPASS;
}
if(internalTextureFormat == FORMAT_D32FS8_SHADOW)
{
return COMPARE_LESSEQUAL;
}
return compare;
}
}
......@@ -630,15 +630,11 @@ namespace sw
switch(state.targetFormat[index])
{
case FORMAT_R5G6B5:
case FORMAT_X8R8G8B8:
case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
case FORMAT_G8R8:
case FORMAT_R8:
case FORMAT_A8:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
for(unsigned int q = 0; q < state.multiSample; q++)
......@@ -671,9 +667,7 @@ namespace sw
break;
case FORMAT_R32F:
case FORMAT_G32R32F:
case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_R32I:
case FORMAT_G32R32I:
case FORMAT_A32B32G32R32I:
......@@ -776,13 +770,9 @@ namespace sw
case FORMAT_R5G6B5:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
case FORMAT_X8R8G8B8:
case FORMAT_X8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
case FORMAT_G8R8:
case FORMAT_R8:
case FORMAT_A8:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
oC[index].x = Max(oC[index].x, Float4(0.0f)); oC[index].x = Min(oC[index].x, Float4(1.0f));
......@@ -792,7 +782,6 @@ namespace sw
break;
case FORMAT_R32F:
case FORMAT_G32R32F:
case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
case FORMAT_R32I:
case FORMAT_G32R32I:
......@@ -813,12 +802,6 @@ namespace sw
case FORMAT_G8R8UI:
case FORMAT_A8B8G8R8UI:
break;
case FORMAT_X32B32G32R32F_UNSIGNED:
oC[index].x = Max(oC[index].x, Float4(0.0f));
oC[index].y = Max(oC[index].y, Float4(0.0f));
oC[index].z = Max(oC[index].z, Float4(0.0f));
oC[index].w = Max(oC[index].w, Float4(0.0f));
break;
default:
ASSERT(false);
}
......
......@@ -40,7 +40,7 @@ namespace sw
this->width = width;
this->height = height;
format = FORMAT_X8R8G8B8;
format = FORMAT_A8R8G8B8;
stride = 0;
windowed = !fullscreen || forceWindowed;
......@@ -187,14 +187,12 @@ namespace sw
switch(state.destFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
{
Int x = x0;
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4)
{
......@@ -204,7 +202,6 @@ namespace sw
d += 4 * dBytes;
}
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4)
{
......@@ -252,11 +249,9 @@ namespace sw
{
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
*Pointer<Int>(d) = *Pointer<Int>(s);
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
Int rgba = *Pointer<Int>(s);
......@@ -293,16 +288,13 @@ namespace sw
}
}
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
{
Int x = x0;
switch(state.sourceFormat)
{
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4)
{
......@@ -312,7 +304,6 @@ namespace sw
d += 4 * dBytes;
}
break;
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4)
{
......@@ -361,11 +352,9 @@ namespace sw
{
switch(state.sourceFormat)
{
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
*Pointer<Int>(d) = *Pointer<Int>(s);
break;
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
{
Int bgra = *Pointer<Int>(s);
......@@ -401,55 +390,12 @@ namespace sw
}
}
break;
case FORMAT_R8G8B8:
{
For(Int x = x0, x < width, x++)
{
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 0);
*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 1);
*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 2);
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 2);
*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 1);
*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 0);
break;
case FORMAT_A16B16G16R16:
*Pointer<Byte>(d + 0) = *Pointer<Byte>(s + 5);
*Pointer<Byte>(d + 1) = *Pointer<Byte>(s + 3);
*Pointer<Byte>(d + 2) = *Pointer<Byte>(s + 1);
break;
case FORMAT_R5G6B5:
{
Int rgb = Int(*Pointer<Short>(s));
*Pointer<Byte>(d + 0) = Byte(((rgb & 0x001F) << 3) | ((rgb & 0x001C) >> 2));
*Pointer<Byte>(d + 1) = Byte(((rgb & 0x07E0) << 5) | ((rgb & 0x0600) >> 1));
*Pointer<Byte>(d + 2) = Byte(((rgb & 0xF800) << 8) | ((rgb & 0xE000) << 3));
}
break;
default:
ASSERT(false);
break;
}
s += sBytes;
d += dBytes;
}
}
break;
case FORMAT_R5G6B5:
{
For(Int x = x0, x < width, x++)
{
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
{
Int c = *Pointer<Int>(s);
......@@ -459,7 +405,6 @@ namespace sw
(c & 0x000000F8) >> 3);
}
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
Int c = *Pointer<Int>(s);
......@@ -543,11 +488,9 @@ namespace sw
switch(state.sourceFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
c2 = Unpack(*Pointer<Byte4>(s));
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0xC6);
break;
......@@ -581,13 +524,10 @@ namespace sw
switch(state.destFormat)
{
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
{
c1 = Swizzle(c1, 0xC6);
......@@ -595,15 +535,6 @@ namespace sw
*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
}
break;
case FORMAT_R8G8B8:
{
Int c = Int(As<Int2>(PackUnsigned(c1, c1)));
*Pointer<Byte>(d + 0) = Byte(c >> 0);
*Pointer<Byte>(d + 1) = Byte(c >> 8);
*Pointer<Byte>(d + 2) = Byte(c >> 16);
}
break;
case FORMAT_R5G6B5:
{
Int c = Int(As<Int2>(PackUnsigned(c1, c1)));
......
......@@ -106,8 +106,7 @@ namespace sw
switch(ddsd.ddpfPixelFormat.dwRGBBitCount)
{
case 32: format = FORMAT_X8R8G8B8; break;
case 24: format = FORMAT_R8G8B8; break;
case 32: format = FORMAT_A8R8G8B8; break;
case 16: format = FORMAT_R5G6B5; break;
default: format = FORMAT_NULL; break;
}
......@@ -202,27 +201,21 @@ namespace sw
directDraw->SetCooperativeLevel(windowHandle, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
long result;
long result = DD_FALSE;
do
{
format = FORMAT_X8R8G8B8;
format = FORMAT_A8R8G8B8;
result = directDraw->SetDisplayMode(width, height, 32);
if(result == DDERR_INVALIDMODE)
{
format = FORMAT_R8G8B8;
result = directDraw->SetDisplayMode(width, height, 24);
format = FORMAT_R5G6B5;
result = directDraw->SetDisplayMode(width, height, 16);
if(result == DDERR_INVALIDMODE)
{
format = FORMAT_R5G6B5;
result = directDraw->SetDisplayMode(width, height, 16);
if(result == DDERR_INVALIDMODE)
{
assert(!"Failed to initialize graphics: Display mode not supported.");
}
assert(!"Failed to initialize graphics: Display mode not supported.");
}
}
......
......@@ -37,7 +37,7 @@ namespace sw
init(this->windowHandle);
format = FORMAT_X8R8G8B8;
format = FORMAT_A8R8G8B8;
}
FrameBufferGDI::~FrameBufferGDI()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment