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 ...@@ -494,11 +494,6 @@ namespace sw
return COMPARE_BYPASS; return COMPARE_BYPASS;
} }
if(internalTextureFormat == FORMAT_D32FS8_SHADOW)
{
return COMPARE_LESSEQUAL;
}
return compare; return compare;
} }
} }
...@@ -630,15 +630,11 @@ namespace sw ...@@ -630,15 +630,11 @@ namespace sw
switch(state.targetFormat[index]) switch(state.targetFormat[index])
{ {
case FORMAT_R5G6B5: case FORMAT_R5G6B5:
case FORMAT_X8R8G8B8:
case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8: case FORMAT_SRGB8_A8:
case FORMAT_G8R8: case FORMAT_G8R8:
case FORMAT_R8: case FORMAT_R8:
case FORMAT_A8:
case FORMAT_G16R16: case FORMAT_G16R16:
case FORMAT_A16B16G16R16: case FORMAT_A16B16G16R16:
for(unsigned int q = 0; q < state.multiSample; q++) for(unsigned int q = 0; q < state.multiSample; q++)
...@@ -671,9 +667,7 @@ namespace sw ...@@ -671,9 +667,7 @@ namespace sw
break; break;
case FORMAT_R32F: case FORMAT_R32F:
case FORMAT_G32R32F: case FORMAT_G32R32F:
case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F: case FORMAT_A32B32G32R32F:
case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_R32I: case FORMAT_R32I:
case FORMAT_G32R32I: case FORMAT_G32R32I:
case FORMAT_A32B32G32R32I: case FORMAT_A32B32G32R32I:
...@@ -776,13 +770,9 @@ namespace sw ...@@ -776,13 +770,9 @@ namespace sw
case FORMAT_R5G6B5: case FORMAT_R5G6B5:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
case FORMAT_X8R8G8B8:
case FORMAT_X8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8: case FORMAT_SRGB8_A8:
case FORMAT_G8R8: case FORMAT_G8R8:
case FORMAT_R8: case FORMAT_R8:
case FORMAT_A8:
case FORMAT_G16R16: case FORMAT_G16R16:
case FORMAT_A16B16G16R16: case FORMAT_A16B16G16R16:
oC[index].x = Max(oC[index].x, Float4(0.0f)); oC[index].x = Min(oC[index].x, Float4(1.0f)); 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 ...@@ -792,7 +782,6 @@ namespace sw
break; break;
case FORMAT_R32F: case FORMAT_R32F:
case FORMAT_G32R32F: case FORMAT_G32R32F:
case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F: case FORMAT_A32B32G32R32F:
case FORMAT_R32I: case FORMAT_R32I:
case FORMAT_G32R32I: case FORMAT_G32R32I:
...@@ -813,12 +802,6 @@ namespace sw ...@@ -813,12 +802,6 @@ namespace sw
case FORMAT_G8R8UI: case FORMAT_G8R8UI:
case FORMAT_A8B8G8R8UI: case FORMAT_A8B8G8R8UI:
break; 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: default:
ASSERT(false); ASSERT(false);
} }
......
...@@ -40,7 +40,7 @@ namespace sw ...@@ -40,7 +40,7 @@ namespace sw
this->width = width; this->width = width;
this->height = height; this->height = height;
format = FORMAT_X8R8G8B8; format = FORMAT_A8R8G8B8;
stride = 0; stride = 0;
windowed = !fullscreen || forceWindowed; windowed = !fullscreen || forceWindowed;
...@@ -187,14 +187,12 @@ namespace sw ...@@ -187,14 +187,12 @@ namespace sw
switch(state.destFormat) switch(state.destFormat)
{ {
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
{ {
Int x = x0; Int x = x0;
switch(state.sourceFormat) switch(state.sourceFormat)
{ {
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4) For(, x < width - 3, x += 4)
{ {
...@@ -204,7 +202,6 @@ namespace sw ...@@ -204,7 +202,6 @@ namespace sw
d += 4 * dBytes; d += 4 * dBytes;
} }
break; break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4) For(, x < width - 3, x += 4)
{ {
...@@ -252,11 +249,9 @@ namespace sw ...@@ -252,11 +249,9 @@ namespace sw
{ {
switch(state.sourceFormat) switch(state.sourceFormat)
{ {
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
*Pointer<Int>(d) = *Pointer<Int>(s); *Pointer<Int>(d) = *Pointer<Int>(s);
break; break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
{ {
Int rgba = *Pointer<Int>(s); Int rgba = *Pointer<Int>(s);
...@@ -293,16 +288,13 @@ namespace sw ...@@ -293,16 +288,13 @@ namespace sw
} }
} }
break; break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8: case FORMAT_SRGB8_A8:
{ {
Int x = x0; Int x = x0;
switch(state.sourceFormat) switch(state.sourceFormat)
{ {
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4) For(, x < width - 3, x += 4)
{ {
...@@ -312,7 +304,6 @@ namespace sw ...@@ -312,7 +304,6 @@ namespace sw
d += 4 * dBytes; d += 4 * dBytes;
} }
break; break;
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4) For(, x < width - 3, x += 4)
{ {
...@@ -361,11 +352,9 @@ namespace sw ...@@ -361,11 +352,9 @@ namespace sw
{ {
switch(state.sourceFormat) switch(state.sourceFormat)
{ {
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
*Pointer<Int>(d) = *Pointer<Int>(s); *Pointer<Int>(d) = *Pointer<Int>(s);
break; break;
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
{ {
Int bgra = *Pointer<Int>(s); Int bgra = *Pointer<Int>(s);
...@@ -401,55 +390,12 @@ namespace sw ...@@ -401,55 +390,12 @@ namespace sw
} }
} }
break; 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: case FORMAT_R5G6B5:
{ {
For(Int x = x0, x < width, x++) For(Int x = x0, x < width, x++)
{ {
switch(state.sourceFormat) switch(state.sourceFormat)
{ {
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
{ {
Int c = *Pointer<Int>(s); Int c = *Pointer<Int>(s);
...@@ -459,7 +405,6 @@ namespace sw ...@@ -459,7 +405,6 @@ namespace sw
(c & 0x000000F8) >> 3); (c & 0x000000F8) >> 3);
} }
break; break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
{ {
Int c = *Pointer<Int>(s); Int c = *Pointer<Int>(s);
...@@ -543,11 +488,9 @@ namespace sw ...@@ -543,11 +488,9 @@ namespace sw
switch(state.sourceFormat) switch(state.sourceFormat)
{ {
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
c2 = Unpack(*Pointer<Byte4>(s)); c2 = Unpack(*Pointer<Byte4>(s));
break; break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0xC6); c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0xC6);
break; break;
...@@ -581,13 +524,10 @@ namespace sw ...@@ -581,13 +524,10 @@ namespace sw
switch(state.destFormat) switch(state.destFormat)
{ {
case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8: case FORMAT_A8R8G8B8:
*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1)); *Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
break; break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8: case FORMAT_A8B8G8R8:
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8: case FORMAT_SRGB8_A8:
{ {
c1 = Swizzle(c1, 0xC6); c1 = Swizzle(c1, 0xC6);
...@@ -595,15 +535,6 @@ namespace sw ...@@ -595,15 +535,6 @@ namespace sw
*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1)); *Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
} }
break; 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: case FORMAT_R5G6B5:
{ {
Int c = Int(As<Int2>(PackUnsigned(c1, c1))); Int c = Int(As<Int2>(PackUnsigned(c1, c1)));
......
...@@ -106,8 +106,7 @@ namespace sw ...@@ -106,8 +106,7 @@ namespace sw
switch(ddsd.ddpfPixelFormat.dwRGBBitCount) switch(ddsd.ddpfPixelFormat.dwRGBBitCount)
{ {
case 32: format = FORMAT_X8R8G8B8; break; case 32: format = FORMAT_A8R8G8B8; break;
case 24: format = FORMAT_R8G8B8; break;
case 16: format = FORMAT_R5G6B5; break; case 16: format = FORMAT_R5G6B5; break;
default: format = FORMAT_NULL; break; default: format = FORMAT_NULL; break;
} }
...@@ -202,27 +201,21 @@ namespace sw ...@@ -202,27 +201,21 @@ namespace sw
directDraw->SetCooperativeLevel(windowHandle, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN); directDraw->SetCooperativeLevel(windowHandle, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
long result; long result = DD_FALSE;
do do
{ {
format = FORMAT_X8R8G8B8; format = FORMAT_A8R8G8B8;
result = directDraw->SetDisplayMode(width, height, 32); result = directDraw->SetDisplayMode(width, height, 32);
if(result == DDERR_INVALIDMODE) if(result == DDERR_INVALIDMODE)
{ {
format = FORMAT_R8G8B8; format = FORMAT_R5G6B5;
result = directDraw->SetDisplayMode(width, height, 24); result = directDraw->SetDisplayMode(width, height, 16);
if(result == DDERR_INVALIDMODE) if(result == DDERR_INVALIDMODE)
{ {
format = FORMAT_R5G6B5; assert(!"Failed to initialize graphics: Display mode not supported.");
result = directDraw->SetDisplayMode(width, height, 16);
if(result == DDERR_INVALIDMODE)
{
assert(!"Failed to initialize graphics: Display mode not supported.");
}
} }
} }
......
...@@ -37,7 +37,7 @@ namespace sw ...@@ -37,7 +37,7 @@ namespace sw
init(this->windowHandle); init(this->windowHandle);
format = FORMAT_X8R8G8B8; format = FORMAT_A8R8G8B8;
} }
FrameBufferGDI::~FrameBufferGDI() 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