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/21808
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index c3b7b08..a4be043 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -67,13 +67,6 @@
((uint16_t)(63 * g + 0.5f) << 5) |
((uint16_t)(31 * r + 0.5f) << 11);
break;
- case FORMAT_X8B8G8R8:
- if((rgbaMask & 0x7) != 0x7) return false;
- packed = ((uint32_t)(255) << 24) |
- ((uint32_t)(255 * b + 0.5f) << 16) |
- ((uint32_t)(255 * g + 0.5f) << 8) |
- ((uint32_t)(255 * r + 0.5f) << 0);
- break;
case FORMAT_A8B8G8R8:
if((rgbaMask & 0xF) != 0xF) return false;
packed = ((uint32_t)(255 * a + 0.5f) << 24) |
@@ -81,13 +74,6 @@
((uint32_t)(255 * g + 0.5f) << 8) |
((uint32_t)(255 * r + 0.5f) << 0);
break;
- case FORMAT_X8R8G8B8:
- if((rgbaMask & 0x7) != 0x7) return false;
- packed = ((uint32_t)(255) << 24) |
- ((uint32_t)(255 * r + 0.5f) << 16) |
- ((uint32_t)(255 * g + 0.5f) << 8) |
- ((uint32_t)(255 * b + 0.5f) << 0);
- break;
case FORMAT_A8R8G8B8:
if((rgbaMask & 0xF) != 0xF) return false;
packed = ((uint32_t)(255 * a + 0.5f) << 24) |
@@ -225,13 +211,6 @@
switch(state.sourceFormat)
{
- case FORMAT_L8:
- c.xyz = Float(Int(*Pointer<Byte>(element)));
- c.w = float(0xFF);
- break;
- case FORMAT_A8:
- c.w = Float(Int(*Pointer<Byte>(element)));
- break;
case FORMAT_R8I:
case FORMAT_R8_SNORM:
c.x = Float(Int(*Pointer<SByte>(element)));
@@ -270,33 +249,6 @@
case FORMAT_SRGB8_A8:
c = Float4(*Pointer<Byte4>(element));
break;
- case FORMAT_X8R8G8B8:
- c = Float4(*Pointer<Byte4>(element)).zyxw;
- c.w = float(0xFF);
- break;
- case FORMAT_R8G8B8:
- c.z = Float(Int(*Pointer<Byte>(element + 0)));
- c.y = Float(Int(*Pointer<Byte>(element + 1)));
- c.x = Float(Int(*Pointer<Byte>(element + 2)));
- c.w = float(0xFF);
- break;
- case FORMAT_B8G8R8:
- c.x = Float(Int(*Pointer<Byte>(element + 0)));
- c.y = Float(Int(*Pointer<Byte>(element + 1)));
- c.z = Float(Int(*Pointer<Byte>(element + 2)));
- c.w = float(0xFF);
- break;
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8_SNORM:
- c = Float4(*Pointer<SByte4>(element));
- c.w = float(0x7F);
- break;
- case FORMAT_X8B8G8R8:
- case FORMAT_X8B8G8R8UI:
- case FORMAT_SRGB8_X8:
- c = Float4(*Pointer<Byte4>(element));
- c.w = float(0xFF);
- break;
case FORMAT_A16B16G16R16I:
c = Float4(*Pointer<Short4>(element));
break;
@@ -304,28 +256,12 @@
case FORMAT_A16B16G16R16UI:
c = Float4(*Pointer<UShort4>(element));
break;
- case FORMAT_X16B16G16R16I:
- c = Float4(*Pointer<Short4>(element));
- c.w = float(0x7FFF);
- break;
- case FORMAT_X16B16G16R16UI:
- c = Float4(*Pointer<UShort4>(element));
- c.w = float(0xFFFF);
- break;
case FORMAT_A32B32G32R32I:
c = Float4(*Pointer<Int4>(element));
break;
case FORMAT_A32B32G32R32UI:
c = Float4(*Pointer<UInt4>(element));
break;
- case FORMAT_X32B32G32R32I:
- c = Float4(*Pointer<Int4>(element));
- c.w = float(0x7FFFFFFF);
- break;
- case FORMAT_X32B32G32R32UI:
- c = Float4(*Pointer<UInt4>(element));
- c.w = float(0xFFFFFFFF);
- break;
case FORMAT_G8R8I:
case FORMAT_G8R8_SNORM:
c.x = Float(Int(*Pointer<SByte>(element + 0)));
@@ -362,10 +298,6 @@
case FORMAT_A32B32G32R32F:
c = *Pointer<Float4>(element);
break;
- case FORMAT_X32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_B32G32R32F:
- c.z = *Pointer<Float>(element + 8);
case FORMAT_G32R32F:
c.x = *Pointer<Float>(element + 0);
c.y = *Pointer<Float>(element + 4);
@@ -392,19 +324,8 @@
case FORMAT_D24X8:
c.x = Float(Int((*Pointer<UInt>(element) & UInt(0xFFFFFF00)) >> 8));
break;
- case FORMAT_D32:
- c.x = Float(Int((*Pointer<UInt>(element))));
- break;
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- c.x = 1.0f - *Pointer<Float>(element);
- break;
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
c.x = *Pointer<Float>(element);
break;
case FORMAT_S8:
@@ -427,12 +348,6 @@
switch(state.destFormat)
{
- case FORMAT_L8:
- *Pointer<Byte>(element) = Byte(RoundInt(Float(c.x)));
- break;
- case FORMAT_A8:
- if(writeA) { *Pointer<Byte>(element) = Byte(RoundInt(Float(c.w))); }
- break;
case FORMAT_A8R8G8B8:
if(writeRGBA)
{
@@ -462,45 +377,6 @@
if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
}
break;
- case FORMAT_X8R8G8B8:
- if(writeRGBA)
- {
- Short4 c0 = RoundShort4(c.zyxw) | Short4(0x0000, 0x0000, 0x0000, 0x00FF);
- *Pointer<Byte4>(element) = Byte4(PackUnsigned(c0, c0));
- }
- else
- {
- if(writeB) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.z))); }
- if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
- if(writeR) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.x))); }
- if(writeA) { *Pointer<Byte>(element + 3) = Byte(0xFF); }
- }
- break;
- case FORMAT_X8B8G8R8:
- case FORMAT_SRGB8_X8:
- if(writeRGBA)
- {
- Short4 c0 = RoundShort4(c) | Short4(0x0000, 0x0000, 0x0000, 0x00FF);
- *Pointer<Byte4>(element) = Byte4(PackUnsigned(c0, c0));
- }
- else
- {
- if(writeR) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.x))); }
- if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
- if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
- if(writeA) { *Pointer<Byte>(element + 3) = Byte(0xFF); }
- }
- break;
- case FORMAT_R8G8B8:
- if(writeR) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.x))); }
- if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
- if(writeB) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.z))); }
- break;
- case FORMAT_B8G8R8:
- if(writeR) { *Pointer<Byte>(element + 0) = Byte(RoundInt(Float(c.x))); }
- if(writeG) { *Pointer<Byte>(element + 1) = Byte(RoundInt(Float(c.y))); }
- if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
- break;
case FORMAT_A32B32G32R32F:
if(writeRGBA)
{
@@ -514,14 +390,6 @@
if(writeA) { *Pointer<Float>(element + 12) = c.w; }
}
break;
- case FORMAT_X32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- if(writeA) { *Pointer<Float>(element + 12) = 1.0f; }
- case FORMAT_B32G32R32F:
- if(writeR) { *Pointer<Float>(element) = c.x; }
- if(writeG) { *Pointer<Float>(element + 4) = c.y; }
- if(writeB) { *Pointer<Float>(element + 8) = c.z; }
- break;
case FORMAT_G32R32F:
if(writeR && writeG)
{
@@ -539,12 +407,6 @@
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8_SNORM:
if(writeA) { *Pointer<SByte>(element + 3) = SByte(RoundInt(Float(c.w))); }
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8_SNORM:
- if(writeA && (state.destFormat == FORMAT_X8B8G8R8I || state.destFormat == FORMAT_X8B8G8R8_SNORM))
- {
- *Pointer<SByte>(element + 3) = SByte(0x7F);
- }
if(writeB) { *Pointer<SByte>(element + 2) = SByte(RoundInt(Float(c.z))); }
case FORMAT_G8R8I:
case FORMAT_G8R8_SNORM:
@@ -555,11 +417,6 @@
break;
case FORMAT_A8B8G8R8UI:
if(writeA) { *Pointer<Byte>(element + 3) = Byte(RoundInt(Float(c.w))); }
- case FORMAT_X8B8G8R8UI:
- if(writeA && (state.destFormat == FORMAT_X8B8G8R8UI))
- {
- *Pointer<Byte>(element + 3) = Byte(0xFF);
- }
if(writeB) { *Pointer<Byte>(element + 2) = Byte(RoundInt(Float(c.z))); }
case FORMAT_G8R8UI:
case FORMAT_G8R8:
@@ -581,19 +438,6 @@
if(writeA) { *Pointer<Short>(element + 6) = Short(RoundInt(Float(c.w))); }
}
break;
- case FORMAT_X16B16G16R16I:
- if(writeRGBA)
- {
- *Pointer<Short4>(element) = Short4(RoundInt(c));
- }
- else
- {
- if(writeR) { *Pointer<Short>(element) = Short(RoundInt(Float(c.x))); }
- if(writeG) { *Pointer<Short>(element + 2) = Short(RoundInt(Float(c.y))); }
- if(writeB) { *Pointer<Short>(element + 4) = Short(RoundInt(Float(c.z))); }
- }
- if(writeA) { *Pointer<Short>(element + 6) = Short(0x7F); }
- break;
case FORMAT_G16R16I:
if(writeR && writeG)
{
@@ -622,19 +466,6 @@
if(writeA) { *Pointer<UShort>(element + 6) = UShort(RoundInt(Float(c.w))); }
}
break;
- case FORMAT_X16B16G16R16UI:
- if(writeRGBA)
- {
- *Pointer<UShort4>(element) = UShort4(RoundInt(c));
- }
- else
- {
- if(writeR) { *Pointer<UShort>(element) = UShort(RoundInt(Float(c.x))); }
- if(writeG) { *Pointer<UShort>(element + 2) = UShort(RoundInt(Float(c.y))); }
- if(writeB) { *Pointer<UShort>(element + 4) = UShort(RoundInt(Float(c.z))); }
- }
- if(writeA) { *Pointer<UShort>(element + 6) = UShort(0xFF); }
- break;
case FORMAT_G16R16UI:
case FORMAT_G16R16:
if(writeR && writeG)
@@ -663,19 +494,6 @@
if(writeA) { *Pointer<Int>(element + 12) = RoundInt(Float(c.w)); }
}
break;
- case FORMAT_X32B32G32R32I:
- if(writeRGBA)
- {
- *Pointer<Int4>(element) = RoundInt(c);
- }
- else
- {
- if(writeR) { *Pointer<Int>(element) = RoundInt(Float(c.x)); }
- if(writeG) { *Pointer<Int>(element + 4) = RoundInt(Float(c.y)); }
- if(writeB) { *Pointer<Int>(element + 8) = RoundInt(Float(c.z)); }
- }
- if(writeA) { *Pointer<Int>(element + 12) = Int(0x7FFFFFFF); }
- break;
case FORMAT_G32R32I:
if(writeG) { *Pointer<Int>(element + 4) = RoundInt(Float(c.y)); }
case FORMAT_R32I:
@@ -694,19 +512,6 @@
if(writeA) { *Pointer<UInt>(element + 12) = As<UInt>(RoundInt(Float(c.w))); }
}
break;
- case FORMAT_X32B32G32R32UI:
- if(writeRGBA)
- {
- *Pointer<UInt4>(element) = UInt4(RoundInt(c));
- }
- else
- {
- if(writeR) { *Pointer<UInt>(element) = As<UInt>(RoundInt(Float(c.x))); }
- if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(RoundInt(Float(c.y))); }
- if(writeB) { *Pointer<UInt>(element + 8) = As<UInt>(RoundInt(Float(c.z))); }
- }
- if(writeA) { *Pointer<UInt4>(element + 12) = UInt4(0xFFFFFFFF); }
- break;
case FORMAT_G32R32UI:
if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(RoundInt(Float(c.y))); }
case FORMAT_R32UI:
@@ -759,19 +564,8 @@
case FORMAT_D24X8:
*Pointer<UInt>(element) = UInt(RoundInt(Float(c.x)) << 8);
break;
- case FORMAT_D32:
- *Pointer<UInt>(element) = UInt(RoundInt(Float(c.x)));
- break;
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- *Pointer<Float>(element) = 1.0f - c.x;
- break;
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
*Pointer<Float>(element) = c.x;
break;
case FORMAT_S8:
@@ -791,8 +585,6 @@
{
case FORMAT_A8B8G8R8I:
c = Insert(c, Int(*Pointer<SByte>(element + 3)), 3);
- case FORMAT_X8B8G8R8I:
- c = Insert(c, Int(*Pointer<SByte>(element + 2)), 2);
case FORMAT_G8R8I:
c = Insert(c, Int(*Pointer<SByte>(element + 1)), 1);
case FORMAT_R8I:
@@ -800,8 +592,6 @@
break;
case FORMAT_A8B8G8R8UI:
c = Insert(c, Int(*Pointer<Byte>(element + 3)), 3);
- case FORMAT_X8B8G8R8UI:
- c = Insert(c, Int(*Pointer<Byte>(element + 2)), 2);
case FORMAT_G8R8UI:
c = Insert(c, Int(*Pointer<Byte>(element + 1)), 1);
case FORMAT_R8UI:
@@ -809,8 +599,6 @@
break;
case FORMAT_A16B16G16R16I:
c = Insert(c, Int(*Pointer<Short>(element + 6)), 3);
- case FORMAT_X16B16G16R16I:
- c = Insert(c, Int(*Pointer<Short>(element + 4)), 2);
case FORMAT_G16R16I:
c = Insert(c, Int(*Pointer<Short>(element + 2)), 1);
case FORMAT_R16I:
@@ -818,8 +606,6 @@
break;
case FORMAT_A16B16G16R16UI:
c = Insert(c, Int(*Pointer<UShort>(element + 6)), 3);
- case FORMAT_X16B16G16R16UI:
- c = Insert(c, Int(*Pointer<UShort>(element + 4)), 2);
case FORMAT_G16R16UI:
c = Insert(c, Int(*Pointer<UShort>(element + 2)), 1);
case FORMAT_R16UI:
@@ -829,9 +615,6 @@
case FORMAT_A32B32G32R32UI:
c = *Pointer<Int4>(element);
break;
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
- c = Insert(c, *Pointer<Int>(element + 8), 2);
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
c = Insert(c, *Pointer<Int>(element + 4), 1);
@@ -858,11 +641,6 @@
{
case FORMAT_A8B8G8R8I:
if(writeA) { *Pointer<SByte>(element + 3) = SByte(Extract(c, 3)); }
- case FORMAT_X8B8G8R8I:
- if(writeA && (state.destFormat != FORMAT_A8B8G8R8I))
- {
- *Pointer<SByte>(element + 3) = SByte(0x7F);
- }
if(writeB) { *Pointer<SByte>(element + 2) = SByte(Extract(c, 2)); }
case FORMAT_G8R8I:
if(writeG) { *Pointer<SByte>(element + 1) = SByte(Extract(c, 1)); }
@@ -871,11 +649,6 @@
break;
case FORMAT_A8B8G8R8UI:
if(writeA) { *Pointer<Byte>(element + 3) = Byte(Extract(c, 3)); }
- case FORMAT_X8B8G8R8UI:
- if(writeA && (state.destFormat != FORMAT_A8B8G8R8UI))
- {
- *Pointer<Byte>(element + 3) = Byte(0xFF);
- }
if(writeB) { *Pointer<Byte>(element + 2) = Byte(Extract(c, 2)); }
case FORMAT_G8R8UI:
if(writeG) { *Pointer<Byte>(element + 1) = Byte(Extract(c, 1)); }
@@ -884,11 +657,6 @@
break;
case FORMAT_A16B16G16R16I:
if(writeA) { *Pointer<Short>(element + 6) = Short(Extract(c, 3)); }
- case FORMAT_X16B16G16R16I:
- if(writeA && (state.destFormat != FORMAT_A16B16G16R16I))
- {
- *Pointer<Short>(element + 6) = Short(0x7FFF);
- }
if(writeB) { *Pointer<Short>(element + 4) = Short(Extract(c, 2)); }
case FORMAT_G16R16I:
if(writeG) { *Pointer<Short>(element + 2) = Short(Extract(c, 1)); }
@@ -897,11 +665,6 @@
break;
case FORMAT_A16B16G16R16UI:
if(writeA) { *Pointer<UShort>(element + 6) = UShort(Extract(c, 3)); }
- case FORMAT_X16B16G16R16UI:
- if(writeA && (state.destFormat != FORMAT_A16B16G16R16UI))
- {
- *Pointer<UShort>(element + 6) = UShort(0xFFFF);
- }
if(writeB) { *Pointer<UShort>(element + 4) = UShort(Extract(c, 2)); }
case FORMAT_G16R16UI:
if(writeG) { *Pointer<UShort>(element + 2) = UShort(Extract(c, 1)); }
@@ -921,19 +684,6 @@
if(writeA) { *Pointer<Int>(element + 12) = Extract(c, 3); }
}
break;
- case FORMAT_X32B32G32R32I:
- if(writeRGBA)
- {
- *Pointer<Int4>(element) = c;
- }
- else
- {
- if(writeR) { *Pointer<Int>(element) = Extract(c, 0); }
- if(writeG) { *Pointer<Int>(element + 4) = Extract(c, 1); }
- if(writeB) { *Pointer<Int>(element + 8) = Extract(c, 2); }
- }
- if(writeA) { *Pointer<Int>(element + 12) = Int(0x7FFFFFFF); }
- break;
case FORMAT_G32R32I:
if(writeR) { *Pointer<Int>(element) = Extract(c, 0); }
if(writeG) { *Pointer<Int>(element + 4) = Extract(c, 1); }
@@ -954,19 +704,6 @@
if(writeA) { *Pointer<UInt>(element + 12) = As<UInt>(Extract(c, 3)); }
}
break;
- case FORMAT_X32B32G32R32UI:
- if(writeRGBA)
- {
- *Pointer<UInt4>(element) = As<UInt4>(c);
- }
- else
- {
- if(writeR) { *Pointer<UInt>(element) = As<UInt>(Extract(c, 0)); }
- if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(Extract(c, 1)); }
- if(writeB) { *Pointer<UInt>(element + 8) = As<UInt>(Extract(c, 2)); }
- }
- if(writeA) { *Pointer<UInt>(element + 3) = UInt(0xFFFFFFFF); }
- break;
case FORMAT_G32R32UI:
if(writeR) { *Pointer<UInt>(element) = As<UInt>(Extract(c, 0)); }
if(writeG) { *Pointer<UInt>(element + 4) = As<UInt>(Extract(c, 1)); }
@@ -985,23 +722,15 @@
{
switch(format)
{
- case FORMAT_L8:
- case FORMAT_A8:
case FORMAT_A8R8G8B8:
- case FORMAT_X8R8G8B8:
case FORMAT_R8:
case FORMAT_G8R8:
- case FORMAT_R8G8B8:
- case FORMAT_B8G8R8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
scale = vector(0xFF, 0xFF, 0xFF, 0xFF);
break;
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
scale = vector(0x7F, 0x7F, 0x7F, 0x7F);
break;
@@ -1012,8 +741,6 @@
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_R16I:
@@ -1021,22 +748,15 @@
case FORMAT_G16R16:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
case FORMAT_R32I:
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_B32G32R32F:
case FORMAT_G32R32F:
case FORMAT_R32F:
case FORMAT_A2B10G10R10UI:
@@ -1055,17 +775,8 @@
case FORMAT_D24X8:
scale = vector(0xFFFFFF, 0.0f, 0.0f, 0.0f);
break;
- case FORMAT_D32:
- scale = vector(static_cast<float>(0xFFFFFFFF), 0.0f, 0.0f, 0.0f);
- break;
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
case FORMAT_S8:
scale = vector(1.0f, 1.0f, 1.0f, 1.0f);
break;
@@ -1122,11 +833,7 @@
value *= Float4(scale.x / unscale.x, scale.y / unscale.y, scale.z / unscale.z, scale.w / unscale.w);
}
- if(state.destFormat == FORMAT_X32B32G32R32F_UNSIGNED)
- {
- value = Max(value, Float4(0.0f)); // TODO: Only necessary if source is signed.
- }
- else if(Surface::isFloatFormat(state.sourceFormat) && !Surface::isFloatFormat(state.destFormat))
+ if(Surface::isFloatFormat(state.sourceFormat) && !Surface::isFloatFormat(state.destFormat))
{
value = Min(value, Float4(scale.x, scale.y, scale.z, scale.w));
diff --git a/src/Device/Sampler.cpp b/src/Device/Sampler.cpp
index 2f33684..2fc1bb1 100644
--- a/src/Device/Sampler.cpp
+++ b/src/Device/Sampler.cpp
@@ -494,11 +494,6 @@
return COMPARE_BYPASS;
}
- if(internalTextureFormat == FORMAT_D32FS8_SHADOW)
- {
- return COMPARE_LESSEQUAL;
- }
-
return compare;
}
}
diff --git a/src/Device/Surface.cpp b/src/Device/Surface.cpp
index 15e1c77..ea3f488 100644
--- a/src/Device/Surface.cpp
+++ b/src/Device/Surface.cpp
@@ -39,9 +39,6 @@
extern bool complementaryDepthBuffer;
extern TranscendentalPrecision logPrecision;
- unsigned int *Surface::palette = 0;
- unsigned int Surface::paletteID = 0;
-
void Surface::Buffer::write(int x, int y, int z, const Color<float> &color)
{
ASSERT((x >= -border) && (x < (width + border)));
@@ -87,9 +84,6 @@
switch(format)
{
- case FORMAT_A8:
- *(unsigned char*)element = unorm<8>(a);
- break;
case FORMAT_R8_SNORM:
*(char*)element = snorm<8>(r);
break;
@@ -114,18 +108,6 @@
case FORMAT_R32UI:
*(unsigned int*)element = static_cast<unsigned int>(r);
break;
- case FORMAT_R3G3B2:
- *(unsigned char*)element = (unorm<3>(r) << 5) | (unorm<3>(g) << 2) | (unorm<2>(b) << 0);
- break;
- case FORMAT_A8R3G3B2:
- *(unsigned short*)element = (unorm<8>(a) << 8) | (unorm<3>(r) << 5) | (unorm<3>(g) << 2) | (unorm<2>(b) << 0);
- break;
- case FORMAT_X4R4G4B4:
- *(unsigned short*)element = 0xF000 | (unorm<4>(r) << 8) | (unorm<4>(g) << 4) | (unorm<4>(b) << 0);
- break;
- case FORMAT_A4R4G4B4:
- *(unsigned short*)element = (unorm<4>(a) << 12) | (unorm<4>(r) << 8) | (unorm<4>(g) << 4) | (unorm<4>(b) << 0);
- break;
case FORMAT_R4G4B4A4:
*(unsigned short*)element = (unorm<4>(r) << 12) | (unorm<4>(g) << 8) | (unorm<4>(b) << 4) | (unorm<4>(a) << 0);
break;
@@ -138,15 +120,9 @@
case FORMAT_R5G5B5A1:
*(unsigned short*)element = (unorm<5>(r) << 11) | (unorm<5>(g) << 6) | (unorm<5>(b) << 1) | (unorm<5>(a) << 0);
break;
- case FORMAT_X1R5G5B5:
- *(unsigned short*)element = 0x8000 | (unorm<5>(r) << 10) | (unorm<5>(g) << 5) | (unorm<5>(b) << 0);
- break;
case FORMAT_A8R8G8B8:
*(unsigned int*)element = (unorm<8>(a) << 24) | (unorm<8>(r) << 16) | (unorm<8>(g) << 8) | (unorm<8>(b) << 0);
break;
- case FORMAT_X8R8G8B8:
- *(unsigned int*)element = 0xFF000000 | (unorm<8>(r) << 16) | (unorm<8>(g) << 8) | (unorm<8>(b) << 0);
- break;
case FORMAT_A8B8G8R8_SNORM:
*(unsigned int*)element = (static_cast<unsigned int>(snorm<8>(a)) << 24) |
(static_cast<unsigned int>(snorm<8>(b)) << 16) |
@@ -166,24 +142,6 @@
case FORMAT_A8B8G8R8UI:
*(unsigned int*)element = (ucast<8>(a) << 24) | (ucast<8>(b) << 16) | (ucast<8>(g) << 8) | (ucast<8>(r) << 0);
break;
- case FORMAT_X8B8G8R8_SNORM:
- *(unsigned int*)element = 0x7F000000 |
- (static_cast<unsigned int>(snorm<8>(b)) << 16) |
- (static_cast<unsigned int>(snorm<8>(g)) << 8) |
- (static_cast<unsigned int>(snorm<8>(r)) << 0);
- break;
- case FORMAT_X8B8G8R8:
- case FORMAT_SRGB8_X8:
- *(unsigned int*)element = 0xFF000000 | (unorm<8>(b) << 16) | (unorm<8>(g) << 8) | (unorm<8>(r) << 0);
- break;
- case FORMAT_X8B8G8R8I:
- *(unsigned int*)element = 0x7F000000 |
- (static_cast<unsigned int>(scast<8>(b)) << 16) |
- (static_cast<unsigned int>(scast<8>(g)) << 8) |
- (static_cast<unsigned int>(scast<8>(r)) << 0);
- case FORMAT_X8B8G8R8UI:
- *(unsigned int*)element = 0xFF000000 | (ucast<8>(b) << 16) | (ucast<8>(g) << 8) | (ucast<8>(r) << 0);
- break;
case FORMAT_A2R10G10B10:
*(unsigned int*)element = (unorm<2>(a) << 30) | (unorm<10>(r) << 20) | (unorm<10>(g) << 10) | (unorm<10>(b) << 0);
break;
@@ -238,16 +196,6 @@
((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(b));
((unsigned short*)element)[3] = static_cast<unsigned short>(ucast<16>(a));
break;
- case FORMAT_X16B16G16R16I:
- ((unsigned short*)element)[0] = static_cast<unsigned short>(scast<16>(r));
- ((unsigned short*)element)[1] = static_cast<unsigned short>(scast<16>(g));
- ((unsigned short*)element)[2] = static_cast<unsigned short>(scast<16>(b));
- break;
- case FORMAT_X16B16G16R16UI:
- ((unsigned short*)element)[0] = static_cast<unsigned short>(ucast<16>(r));
- ((unsigned short*)element)[1] = static_cast<unsigned short>(ucast<16>(g));
- ((unsigned short*)element)[2] = static_cast<unsigned short>(ucast<16>(b));
- break;
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
((unsigned int*)element)[0] = static_cast<unsigned int>(r);
@@ -255,82 +203,19 @@
((unsigned int*)element)[2] = static_cast<unsigned int>(b);
((unsigned int*)element)[3] = static_cast<unsigned int>(a);
break;
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
- ((unsigned int*)element)[0] = static_cast<unsigned int>(r);
- ((unsigned int*)element)[1] = static_cast<unsigned int>(g);
- ((unsigned int*)element)[2] = static_cast<unsigned int>(b);
- break;
- case FORMAT_V8U8:
- *(unsigned short*)element = (snorm<8>(g) << 8) | (snorm<8>(r) << 0);
- break;
- case FORMAT_L6V5U5:
- *(unsigned short*)element = (unorm<6>(b) << 10) | (snorm<5>(g) << 5) | (snorm<5>(r) << 0);
- break;
- case FORMAT_Q8W8V8U8:
- *(unsigned int*)element = (snorm<8>(a) << 24) | (snorm<8>(b) << 16) | (snorm<8>(g) << 8) | (snorm<8>(r) << 0);
- break;
- case FORMAT_X8L8V8U8:
- *(unsigned int*)element = 0xFF000000 | (unorm<8>(b) << 16) | (snorm<8>(g) << 8) | (snorm<8>(r) << 0);
- break;
- case FORMAT_V16U16:
- *(unsigned int*)element = (snorm<16>(g) << 16) | (snorm<16>(r) << 0);
- break;
- case FORMAT_A2W10V10U10:
- *(unsigned int*)element = (unorm<2>(a) << 30) | (snorm<10>(b) << 20) | (snorm<10>(g) << 10) | (snorm<10>(r) << 0);
- break;
- case FORMAT_A16W16V16U16:
- ((unsigned short*)element)[0] = snorm<16>(r);
- ((unsigned short*)element)[1] = snorm<16>(g);
- ((unsigned short*)element)[2] = snorm<16>(b);
- ((unsigned short*)element)[3] = unorm<16>(a);
- break;
- case FORMAT_Q16W16V16U16:
- ((unsigned short*)element)[0] = snorm<16>(r);
- ((unsigned short*)element)[1] = snorm<16>(g);
- ((unsigned short*)element)[2] = snorm<16>(b);
- ((unsigned short*)element)[3] = snorm<16>(a);
- break;
- case FORMAT_R8G8B8:
- ((unsigned char*)element)[0] = unorm<8>(b);
- ((unsigned char*)element)[1] = unorm<8>(g);
- ((unsigned char*)element)[2] = unorm<8>(r);
- break;
- case FORMAT_B8G8R8:
- ((unsigned char*)element)[0] = unorm<8>(r);
- ((unsigned char*)element)[1] = unorm<8>(g);
- ((unsigned char*)element)[2] = unorm<8>(b);
- break;
case FORMAT_R16F:
*(half*)element = (half)r;
break;
- case FORMAT_A16F:
- *(half*)element = (half)a;
- break;
case FORMAT_G16R16F:
((half*)element)[0] = (half)r;
((half*)element)[1] = (half)g;
break;
- case FORMAT_X16B16G16R16F_UNSIGNED:
- r = max(r, 0.0f); g = max(g, 0.0f); b = max(b, 0.0f);
- // Fall through to FORMAT_X16B16G16R16F.
- case FORMAT_X16B16G16R16F:
- ((half*)element)[3] = 1.0f;
- // Fall through to FORMAT_B16G16R16F.
- case FORMAT_B16G16R16F:
- ((half*)element)[0] = (half)r;
- ((half*)element)[1] = (half)g;
- ((half*)element)[2] = (half)b;
- break;
case FORMAT_A16B16G16R16F:
((half*)element)[0] = (half)r;
((half*)element)[1] = (half)g;
((half*)element)[2] = (half)b;
((half*)element)[3] = (half)a;
break;
- case FORMAT_A32F:
- *(float*)element = a;
- break;
case FORMAT_R32F:
*(float*)element = r;
break;
@@ -338,17 +223,6 @@
((float*)element)[0] = r;
((float*)element)[1] = g;
break;
- case FORMAT_X32B32G32R32F_UNSIGNED:
- r = max(r, 0.0f); g = max(g, 0.0f); b = max(b, 0.0f);
- // Fall through to FORMAT_X32B32G32R32F.
- case FORMAT_X32B32G32R32F:
- ((float*)element)[3] = 1.0f;
- // Fall through to FORMAT_B32G32R32F.
- case FORMAT_B32G32R32F:
- ((float*)element)[0] = r;
- ((float*)element)[1] = g;
- ((float*)element)[2] = b;
- break;
case FORMAT_A32B32G32R32F:
((float*)element)[0] = r;
((float*)element)[1] = g;
@@ -357,45 +231,11 @@
break;
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
*((float*)element) = r;
break;
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- *((float*)element) = 1 - r;
- break;
case FORMAT_S8:
*((unsigned char*)element) = unorm<8>(r);
break;
- case FORMAT_L8:
- *(unsigned char*)element = unorm<8>(r);
- break;
- case FORMAT_A4L4:
- *(unsigned char*)element = (unorm<4>(a) << 4) | (unorm<4>(r) << 0);
- break;
- case FORMAT_L16:
- *(unsigned short*)element = unorm<16>(r);
- break;
- case FORMAT_A8L8:
- *(unsigned short*)element = (unorm<8>(a) << 8) | (unorm<8>(r) << 0);
- break;
- case FORMAT_L16F:
- *(half*)element = (half)r;
- break;
- case FORMAT_A16L16F:
- ((half*)element)[0] = (half)r;
- ((half*)element)[1] = (half)a;
- break;
- case FORMAT_L32F:
- *(float*)element = r;
- break;
- case FORMAT_A32L32F:
- ((float*)element)[0] = r;
- ((float*)element)[1] = a;
- break;
default:
ASSERT(false);
}
@@ -431,36 +271,6 @@
switch(format)
{
- case FORMAT_P8:
- {
- ASSERT(palette);
-
- unsigned int abgr = palette[*(unsigned char*)element];
-
- r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);
- g = (abgr & 0x0000FF00) * (1.0f / 0x0000FF00);
- b = (abgr & 0x00FF0000) * (1.0f / 0x00FF0000);
- a = (abgr & 0xFF000000) * (1.0f / 0xFF000000);
- }
- break;
- case FORMAT_A8P8:
- {
- ASSERT(palette);
-
- unsigned int bgr = palette[((unsigned char*)element)[0]];
-
- r = (bgr & 0x000000FF) * (1.0f / 0x000000FF);
- g = (bgr & 0x0000FF00) * (1.0f / 0x0000FF00);
- b = (bgr & 0x00FF0000) * (1.0f / 0x00FF0000);
- a = ((unsigned char*)element)[1] * (1.0f / 0xFF);
- }
- break;
- case FORMAT_A8:
- r = 0;
- g = 0;
- b = 0;
- a = *(unsigned char*)element * (1.0f / 0xFF);
- break;
case FORMAT_R8_SNORM:
r = max((*(signed char*)element) * (1.0f / 0x7F), -1.0f);
break;
@@ -473,44 +283,6 @@
case FORMAT_R8UI:
r = *(unsigned char*)element;
break;
- case FORMAT_R3G3B2:
- {
- unsigned char rgb = *(unsigned char*)element;
-
- r = (rgb & 0xE0) * (1.0f / 0xE0);
- g = (rgb & 0x1C) * (1.0f / 0x1C);
- b = (rgb & 0x03) * (1.0f / 0x03);
- }
- break;
- case FORMAT_A8R3G3B2:
- {
- unsigned short argb = *(unsigned short*)element;
-
- a = (argb & 0xFF00) * (1.0f / 0xFF00);
- r = (argb & 0x00E0) * (1.0f / 0x00E0);
- g = (argb & 0x001C) * (1.0f / 0x001C);
- b = (argb & 0x0003) * (1.0f / 0x0003);
- }
- break;
- case FORMAT_X4R4G4B4:
- {
- unsigned short rgb = *(unsigned short*)element;
-
- r = (rgb & 0x0F00) * (1.0f / 0x0F00);
- g = (rgb & 0x00F0) * (1.0f / 0x00F0);
- b = (rgb & 0x000F) * (1.0f / 0x000F);
- }
- break;
- case FORMAT_A4R4G4B4:
- {
- unsigned short argb = *(unsigned short*)element;
-
- a = (argb & 0xF000) * (1.0f / 0xF000);
- r = (argb & 0x0F00) * (1.0f / 0x0F00);
- g = (argb & 0x00F0) * (1.0f / 0x00F0);
- b = (argb & 0x000F) * (1.0f / 0x000F);
- }
- break;
case FORMAT_R4G4B4A4:
{
unsigned short rgba = *(unsigned short*)element;
@@ -550,15 +322,6 @@
a = (rgba & 0x0001) * (1.0f / 0x0001);
}
break;
- case FORMAT_X1R5G5B5:
- {
- unsigned short xrgb = *(unsigned short*)element;
-
- r = (xrgb & 0x7C00) * (1.0f / 0x7C00);
- g = (xrgb & 0x03E0) * (1.0f / 0x03E0);
- b = (xrgb & 0x001F) * (1.0f / 0x001F);
- }
- break;
case FORMAT_A8R8G8B8:
{
unsigned int argb = *(unsigned int*)element;
@@ -569,15 +332,6 @@
b = (argb & 0x000000FF) * (1.0f / 0x000000FF);
}
break;
- case FORMAT_X8R8G8B8:
- {
- unsigned int xrgb = *(unsigned int*)element;
-
- r = (xrgb & 0x00FF0000) * (1.0f / 0x00FF0000);
- g = (xrgb & 0x0000FF00) * (1.0f / 0x0000FF00);
- b = (xrgb & 0x000000FF) * (1.0f / 0x000000FF);
- }
- break;
case FORMAT_A8B8G8R8_SNORM:
{
signed char* abgr = (signed char*)element;
@@ -619,43 +373,6 @@
a = abgr[3];
}
break;
- case FORMAT_X8B8G8R8_SNORM:
- {
- signed char* bgr = (signed char*)element;
-
- r = max(bgr[0] * (1.0f / 0x7F), -1.0f);
- g = max(bgr[1] * (1.0f / 0x7F), -1.0f);
- b = max(bgr[2] * (1.0f / 0x7F), -1.0f);
- }
- break;
- case FORMAT_X8B8G8R8:
- case FORMAT_SRGB8_X8:
- {
- unsigned int xbgr = *(unsigned int*)element;
-
- b = (xbgr & 0x00FF0000) * (1.0f / 0x00FF0000);
- g = (xbgr & 0x0000FF00) * (1.0f / 0x0000FF00);
- r = (xbgr & 0x000000FF) * (1.0f / 0x000000FF);
- }
- break;
- case FORMAT_X8B8G8R8I:
- {
- signed char* bgr = (signed char*)element;
-
- r = bgr[0];
- g = bgr[1];
- b = bgr[2];
- }
- break;
- case FORMAT_X8B8G8R8UI:
- {
- unsigned char* bgr = (unsigned char*)element;
-
- r = bgr[0];
- g = bgr[1];
- b = bgr[2];
- }
- break;
case FORMAT_G8R8_SNORM:
{
signed char* gr = (signed char*)element;
@@ -774,24 +491,6 @@
a = abgr[3];
}
break;
- case FORMAT_X16B16G16R16I:
- {
- short* bgr = (short*)element;
-
- r = bgr[0];
- g = bgr[1];
- b = bgr[2];
- }
- break;
- case FORMAT_X16B16G16R16UI:
- {
- unsigned short* bgr = (unsigned short*)element;
-
- r = bgr[0];
- g = bgr[1];
- b = bgr[2];
- }
- break;
case FORMAT_A32B32G32R32I:
{
int* abgr = (int*)element;
@@ -812,24 +511,6 @@
a = static_cast<float>(abgr[3]);
}
break;
- case FORMAT_X32B32G32R32I:
- {
- int* bgr = (int*)element;
-
- r = static_cast<float>(bgr[0]);
- g = static_cast<float>(bgr[1]);
- b = static_cast<float>(bgr[2]);
- }
- break;
- case FORMAT_X32B32G32R32UI:
- {
- unsigned int* bgr = (unsigned int*)element;
-
- r = static_cast<float>(bgr[0]);
- g = static_cast<float>(bgr[1]);
- b = static_cast<float>(bgr[2]);
- }
- break;
case FORMAT_G32R32I:
{
int* gr = (int*)element;
@@ -852,133 +533,6 @@
case FORMAT_R32UI:
r = static_cast<float>(*((unsigned int*)element));
break;
- case FORMAT_V8U8:
- {
- unsigned short vu = *(unsigned short*)element;
-
- r = ((int)(vu & 0x00FF) << 24) * (1.0f / 0x7F000000);
- g = ((int)(vu & 0xFF00) << 16) * (1.0f / 0x7F000000);
- }
- break;
- case FORMAT_L6V5U5:
- {
- unsigned short lvu = *(unsigned short*)element;
-
- r = ((int)(lvu & 0x001F) << 27) * (1.0f / 0x78000000);
- g = ((int)(lvu & 0x03E0) << 22) * (1.0f / 0x78000000);
- b = (lvu & 0xFC00) * (1.0f / 0xFC00);
- }
- break;
- case FORMAT_Q8W8V8U8:
- {
- unsigned int qwvu = *(unsigned int*)element;
-
- r = ((int)(qwvu & 0x000000FF) << 24) * (1.0f / 0x7F000000);
- g = ((int)(qwvu & 0x0000FF00) << 16) * (1.0f / 0x7F000000);
- b = ((int)(qwvu & 0x00FF0000) << 8) * (1.0f / 0x7F000000);
- a = ((int)(qwvu & 0xFF000000) << 0) * (1.0f / 0x7F000000);
- }
- break;
- case FORMAT_X8L8V8U8:
- {
- unsigned int xlvu = *(unsigned int*)element;
-
- r = ((int)(xlvu & 0x000000FF) << 24) * (1.0f / 0x7F000000);
- g = ((int)(xlvu & 0x0000FF00) << 16) * (1.0f / 0x7F000000);
- b = (xlvu & 0x00FF0000) * (1.0f / 0x00FF0000);
- }
- break;
- case FORMAT_R8G8B8:
- r = ((unsigned char*)element)[2] * (1.0f / 0xFF);
- g = ((unsigned char*)element)[1] * (1.0f / 0xFF);
- b = ((unsigned char*)element)[0] * (1.0f / 0xFF);
- break;
- case FORMAT_B8G8R8:
- r = ((unsigned char*)element)[0] * (1.0f / 0xFF);
- g = ((unsigned char*)element)[1] * (1.0f / 0xFF);
- b = ((unsigned char*)element)[2] * (1.0f / 0xFF);
- break;
- case FORMAT_V16U16:
- {
- unsigned int vu = *(unsigned int*)element;
-
- r = ((int)(vu & 0x0000FFFF) << 16) * (1.0f / 0x7FFF0000);
- g = ((int)(vu & 0xFFFF0000) << 0) * (1.0f / 0x7FFF0000);
- }
- break;
- case FORMAT_A2W10V10U10:
- {
- unsigned int awvu = *(unsigned int*)element;
-
- r = ((int)(awvu & 0x000003FF) << 22) * (1.0f / 0x7FC00000);
- g = ((int)(awvu & 0x000FFC00) << 12) * (1.0f / 0x7FC00000);
- b = ((int)(awvu & 0x3FF00000) << 2) * (1.0f / 0x7FC00000);
- a = (awvu & 0xC0000000) * (1.0f / 0xC0000000);
- }
- break;
- case FORMAT_A16W16V16U16:
- r = ((signed short*)element)[0] * (1.0f / 0x7FFF);
- g = ((signed short*)element)[1] * (1.0f / 0x7FFF);
- b = ((signed short*)element)[2] * (1.0f / 0x7FFF);
- a = ((unsigned short*)element)[3] * (1.0f / 0xFFFF);
- break;
- case FORMAT_Q16W16V16U16:
- r = ((signed short*)element)[0] * (1.0f / 0x7FFF);
- g = ((signed short*)element)[1] * (1.0f / 0x7FFF);
- b = ((signed short*)element)[2] * (1.0f / 0x7FFF);
- a = ((signed short*)element)[3] * (1.0f / 0x7FFF);
- break;
- case FORMAT_L8:
- r =
- g =
- b = *(unsigned char*)element * (1.0f / 0xFF);
- break;
- case FORMAT_A4L4:
- {
- unsigned char al = *(unsigned char*)element;
-
- r =
- g =
- b = (al & 0x0F) * (1.0f / 0x0F);
- a = (al & 0xF0) * (1.0f / 0xF0);
- }
- break;
- case FORMAT_L16:
- r =
- g =
- b = *(unsigned short*)element * (1.0f / 0xFFFF);
- break;
- case FORMAT_A8L8:
- r =
- g =
- b = ((unsigned char*)element)[0] * (1.0f / 0xFF);
- a = ((unsigned char*)element)[1] * (1.0f / 0xFF);
- break;
- case FORMAT_L16F:
- r =
- g =
- b = *(half*)element;
- break;
- case FORMAT_A16L16F:
- r =
- g =
- b = ((half*)element)[0];
- a = ((half*)element)[1];
- break;
- case FORMAT_L32F:
- r =
- g =
- b = *(float*)element;
- break;
- case FORMAT_A32L32F:
- r =
- g =
- b = ((float*)element)[0];
- a = ((float*)element)[1];
- break;
- case FORMAT_A16F:
- a = *(half*)element;
- break;
case FORMAT_R16F:
r = *(half*)element;
break;
@@ -986,22 +540,12 @@
r = ((half*)element)[0];
g = ((half*)element)[1];
break;
- case FORMAT_X16B16G16R16F:
- case FORMAT_X16B16G16R16F_UNSIGNED:
- case FORMAT_B16G16R16F:
- r = ((half*)element)[0];
- g = ((half*)element)[1];
- b = ((half*)element)[2];
- break;
case FORMAT_A16B16G16R16F:
r = ((half*)element)[0];
g = ((half*)element)[1];
b = ((half*)element)[2];
a = ((half*)element)[3];
break;
- case FORMAT_A32F:
- a = *(float*)element;
- break;
case FORMAT_R32F:
r = *(float*)element;
break;
@@ -1009,13 +553,6 @@
r = ((float*)element)[0];
g = ((float*)element)[1];
break;
- case FORMAT_X32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_B32G32R32F:
- r = ((float*)element)[0];
- g = ((float*)element)[1];
- b = ((float*)element)[2];
- break;
case FORMAT_A32B32G32R32F:
r = ((float*)element)[0];
g = ((float*)element)[1];
@@ -1024,22 +561,11 @@
break;
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
r = *(float*)element;
g = r;
b = r;
a = r;
break;
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- r = 1.0f - *(float*)element;
- g = r;
- b = r;
- a = r;
- break;
case FORMAT_S8:
r = *(unsigned char*)element * (1.0f / 0xFF);
break;
@@ -1150,9 +676,6 @@
switch(format)
{
- case FORMAT_DXT1:
- case FORMAT_ATI1:
- case FORMAT_ETC1:
case FORMAT_R11_EAC:
case FORMAT_SIGNED_R11_EAC:
case FORMAT_RGB8_ETC2:
@@ -1206,10 +729,6 @@
case FORMAT_RGBA_ASTC_12x12_KHR:
case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
return (unsigned char*)buffer + 16 * (x / 12) + (y / 12) * pitchB + z * sliceB;
- case FORMAT_DXT3:
- case FORMAT_DXT5:
- case FORMAT_ATI2:
- return (unsigned char*)buffer + 16 * (x / 4) + (y / 4) * pitchB + z * sliceB;
default:
return (unsigned char*)buffer + x * bytes + y * pitchB + z * samples * sliceB;
}
@@ -1306,7 +825,6 @@
stencil.dirty = false;
dirtyContents = true;
- paletteUsed = 0;
}
Surface::Surface(Resource *texture, int width, int height, int depth, int border, int samples, Format format, bool lockable, bool renderTarget, int pitchPprovided) : lockable(lockable), renderTarget(renderTarget)
@@ -1363,7 +881,6 @@
stencil.dirty = false;
dirtyContents = true;
- paletteUsed = 0;
}
Surface::~Surface()
@@ -1471,8 +988,6 @@
{
switch(external.format)
{
- case FORMAT_R3G3B2:
- case FORMAT_A8R3G3B2:
case FORMAT_A1R5G5B5:
case FORMAT_A2R10G10B10:
case FORMAT_A2B10G10R10:
@@ -1487,7 +1002,7 @@
}
}
- if(external.dirty || (isPalette(external.format) && paletteUsed != Surface::paletteID))
+ if(external.dirty)
{
if(lock != LOCK_DISCARD)
{
@@ -1495,7 +1010,6 @@
}
external.dirty = false;
- paletteUsed = Surface::paletteID;
}
switch(lock)
@@ -1556,44 +1070,26 @@
switch(format)
{
case FORMAT_NULL: return 0;
- case FORMAT_P8: return 1;
- case FORMAT_A8P8: return 2;
- case FORMAT_A8: return 1;
case FORMAT_R8I: return 1;
case FORMAT_R8: return 1;
- case FORMAT_R3G3B2: return 1;
case FORMAT_R16I: return 2;
case FORMAT_R16UI: return 2;
- case FORMAT_A8R3G3B2: return 2;
case FORMAT_R5G6B5: return 2;
case FORMAT_A1R5G5B5: return 2;
- case FORMAT_X1R5G5B5: return 2;
- case FORMAT_R5G5B5A1: return 2;
- case FORMAT_X4R4G4B4: return 2;
- case FORMAT_A4R4G4B4: return 2;
- case FORMAT_R4G4B4A4: return 2;
- case FORMAT_R8G8B8: return 3;
- case FORMAT_B8G8R8: return 3;
+ case FORMAT_R5G5B5A1: return 2;
+ case FORMAT_R4G4B4A4: return 2;
case FORMAT_R32I: return 4;
case FORMAT_R32UI: return 4;
- case FORMAT_X8R8G8B8: return 4;
- // case FORMAT_X8G8R8B8Q: return 4;
case FORMAT_A8R8G8B8: return 4;
- // case FORMAT_A8G8R8B8Q: return 4;
- case FORMAT_X8B8G8R8I: return 4;
- case FORMAT_X8B8G8R8: return 4;
- case FORMAT_SRGB8_X8: return 4;
case FORMAT_SRGB8_A8: return 4;
case FORMAT_A8B8G8R8I: return 4;
case FORMAT_R8UI: return 1;
case FORMAT_G8R8UI: return 2;
- case FORMAT_X8B8G8R8UI: return 4;
case FORMAT_A8B8G8R8UI: return 4;
case FORMAT_A8B8G8R8: return 4;
case FORMAT_R8_SNORM: return 1;
- case FORMAT_G8R8_SNORM: return 2;
- case FORMAT_X8B8G8R8_SNORM: return 4;
- case FORMAT_A8B8G8R8_SNORM: return 4;
+ case FORMAT_G8R8_SNORM: return 2;
+ case FORMAT_A8B8G8R8_SNORM: return 4;
case FORMAT_A2R10G10B10: return 4;
case FORMAT_A2B10G10R10: return 4;
case FORMAT_A2B10G10R10UI: return 4;
@@ -1604,22 +1100,12 @@
case FORMAT_G16R16: return 4;
case FORMAT_G32R32I: return 8;
case FORMAT_G32R32UI: return 8;
- case FORMAT_X16B16G16R16I: return 8;
- case FORMAT_X16B16G16R16UI: return 8;
case FORMAT_A16B16G16R16I: return 8;
case FORMAT_A16B16G16R16UI: return 8;
case FORMAT_A16B16G16R16: return 8;
- case FORMAT_X32B32G32R32I: return 16;
- case FORMAT_X32B32G32R32UI: return 16;
case FORMAT_A32B32G32R32I: return 16;
case FORMAT_A32B32G32R32UI: return 16;
// Compressed formats
- case FORMAT_DXT1: return 2; // Column of four pixels
- case FORMAT_DXT3: return 4; // Column of four pixels
- case FORMAT_DXT5: return 4; // Column of four pixels
- case FORMAT_ATI1: return 2; // Column of four pixels
- case FORMAT_ATI2: return 4; // Column of four pixels
- case FORMAT_ETC1: return 2; // Column of four pixels
case FORMAT_R11_EAC: return 2;
case FORMAT_SIGNED_R11_EAC: return 2;
case FORMAT_RG11_EAC: return 4;
@@ -1658,56 +1144,19 @@
case FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR:
case FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR:
case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR: return 0; // FIXME
- // Bumpmap formats
- case FORMAT_V8U8: return 2;
- case FORMAT_L6V5U5: return 2;
- case FORMAT_Q8W8V8U8: return 4;
- case FORMAT_X8L8V8U8: return 4;
- case FORMAT_A2W10V10U10: return 4;
- case FORMAT_V16U16: return 4;
- case FORMAT_A16W16V16U16: return 8;
- case FORMAT_Q16W16V16U16: return 8;
- // Luminance formats
- case FORMAT_L8: return 1;
- case FORMAT_A4L4: return 1;
- case FORMAT_L16: return 2;
- case FORMAT_A8L8: return 2;
- case FORMAT_L16F: return 2;
- case FORMAT_A16L16F: return 4;
- case FORMAT_L32F: return 4;
- case FORMAT_A32L32F: return 8;
// Floating-point formats
- case FORMAT_A16F: return 2;
case FORMAT_R16F: return 2;
case FORMAT_G16R16F: return 4;
- case FORMAT_B16G16R16F: return 6;
- case FORMAT_X16B16G16R16F: return 8;
case FORMAT_A16B16G16R16F: return 8;
- case FORMAT_X16B16G16R16F_UNSIGNED: return 8;
- case FORMAT_A32F: return 4;
case FORMAT_R32F: return 4;
case FORMAT_G32R32F: return 8;
- case FORMAT_B32G32R32F: return 12;
- case FORMAT_X32B32G32R32F: return 16;
case FORMAT_A32B32G32R32F: return 16;
- case FORMAT_X32B32G32R32F_UNSIGNED: return 16;
// Depth/stencil formats
case FORMAT_D16: return 2;
- case FORMAT_D32: return 4;
case FORMAT_D24X8: return 4;
case FORMAT_D24S8: return 4;
- case FORMAT_D24FS8: return 4;
case FORMAT_D32F: return 4;
case FORMAT_D32FS8: return 4;
- case FORMAT_D32F_COMPLEMENTARY: return 4;
- case FORMAT_D32FS8_COMPLEMENTARY: return 4;
- case FORMAT_D32F_LOCKABLE: return 4;
- case FORMAT_D32FS8_TEXTURE: return 4;
- case FORMAT_D32F_SHADOW: return 4;
- case FORMAT_D32FS8_SHADOW: return 4;
- case FORMAT_DF24S8: return 4;
- case FORMAT_DF16S8: return 2;
- case FORMAT_INTZ: return 4;
case FORMAT_S8: return 1;
case FORMAT_YV12_BT601: return 1; // Y plane only
case FORMAT_YV12_BT709: return 1; // Y plane only
@@ -1731,8 +1180,6 @@
switch(format)
{
- case FORMAT_DXT1:
- case FORMAT_ETC1:
case FORMAT_R11_EAC:
case FORMAT_SIGNED_R11_EAC:
case FORMAT_RGB8_ETC2:
@@ -1778,13 +1225,6 @@
case FORMAT_RGBA_ASTC_12x12_KHR:
case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
return 16 * ((width + 11) / 12);
- case FORMAT_DXT3:
- case FORMAT_DXT5:
- return 16 * ((width + 3) / 4); // 128 bit per 4x4 block, computed per 4 rows
- case FORMAT_ATI1:
- return 2 * ((width + 3) / 4); // 64 bit per 4x4 block, computed per row
- case FORMAT_ATI2:
- return 4 * ((width + 3) / 4); // 128 bit per 4x4 block, computed per row
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
@@ -1813,10 +1253,6 @@
switch(format)
{
- case FORMAT_DXT1:
- case FORMAT_DXT3:
- case FORMAT_DXT5:
- case FORMAT_ETC1:
case FORMAT_R11_EAC:
case FORMAT_SIGNED_R11_EAC:
case FORMAT_RG11_EAC:
@@ -1861,9 +1297,6 @@
case FORMAT_RGBA_ASTC_12x12_KHR:
case FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR:
return pitchB(width, border, format, target) * ((height + 11) / 12); // Pitch computed per 12 rows
- case FORMAT_ATI1:
- case FORMAT_ATI2:
- return pitchB(width, border, format, target) * align<4>(height); // Pitch computed per row
default:
return pitchB(width, border, format, target) * height; // Pitch computed per row
}
@@ -1887,22 +1320,10 @@
switch(source.format)
{
- case FORMAT_R8G8B8: decodeR8G8B8(destination, source); break; // FIXME: Check destination format
- case FORMAT_X1R5G5B5: decodeX1R5G5B5(destination, source); break; // FIXME: Check destination format
- case FORMAT_A1R5G5B5: decodeA1R5G5B5(destination, source); break; // FIXME: Check destination format
- case FORMAT_X4R4G4B4: decodeX4R4G4B4(destination, source); break; // FIXME: Check destination format
- case FORMAT_A4R4G4B4: decodeA4R4G4B4(destination, source); break; // FIXME: Check destination format
- case FORMAT_P8: decodeP8(destination, source); break; // FIXME: Check destination format
- case FORMAT_DXT1: decodeDXT1(destination, source); break; // FIXME: Check destination format
- case FORMAT_DXT3: decodeDXT3(destination, source); break; // FIXME: Check destination format
- case FORMAT_DXT5: decodeDXT5(destination, source); break; // FIXME: Check destination format
- case FORMAT_ATI1: decodeATI1(destination, source); break; // FIXME: Check destination format
- case FORMAT_ATI2: decodeATI2(destination, source); break; // FIXME: Check destination format
case FORMAT_R11_EAC: decodeEAC(destination, source, 1, false); break; // FIXME: Check destination format
case FORMAT_SIGNED_R11_EAC: decodeEAC(destination, source, 1, true); break; // FIXME: Check destination format
case FORMAT_RG11_EAC: decodeEAC(destination, source, 2, false); break; // FIXME: Check destination format
case FORMAT_SIGNED_RG11_EAC: decodeEAC(destination, source, 2, true); break; // FIXME: Check destination format
- case FORMAT_ETC1:
case FORMAT_RGB8_ETC2: decodeETC2(destination, source, 0, false); break; // FIXME: Check destination format
case FORMAT_SRGB8_ETC2: decodeETC2(destination, source, 0, true); break; // FIXME: Check destination format
case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: decodeETC2(destination, source, 1, false); break; // FIXME: Check destination format
@@ -1990,277 +1411,6 @@
destination.unlockRect();
}
- void Surface::decodeR8G8B8(Buffer &destination, Buffer &source)
- {
- unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
- unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
- int depth = min(destination.depth, source.depth);
- int height = min(destination.height, source.height);
- int width = min(destination.width, source.width);
-
- for(int z = 0; z < depth; z++)
- {
- unsigned char *sourceRow = sourceSlice;
- unsigned char *destinationRow = destinationSlice;
-
- for(int y = 0; y < height; y++)
- {
- unsigned char *sourceElement = sourceRow;
- unsigned char *destinationElement = destinationRow;
-
- for(int x = 0; x < width; x++)
- {
- unsigned int b = sourceElement[0];
- unsigned int g = sourceElement[1];
- unsigned int r = sourceElement[2];
-
- *(unsigned int*)destinationElement = 0xFF000000 | (r << 16) | (g << 8) | (b << 0);
-
- sourceElement += source.bytes;
- destinationElement += destination.bytes;
- }
-
- sourceRow += source.pitchB;
- destinationRow += destination.pitchB;
- }
-
- sourceSlice += source.sliceB;
- destinationSlice += destination.sliceB;
- }
-
- source.unlockRect();
- destination.unlockRect();
- }
-
- void Surface::decodeX1R5G5B5(Buffer &destination, Buffer &source)
- {
- unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
- unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
- int depth = min(destination.depth, source.depth);
- int height = min(destination.height, source.height);
- int width = min(destination.width, source.width);
-
- for(int z = 0; z < depth; z++)
- {
- unsigned char *sourceRow = sourceSlice;
- unsigned char *destinationRow = destinationSlice;
-
- for(int y = 0; y < height; y++)
- {
- unsigned char *sourceElement = sourceRow;
- unsigned char *destinationElement = destinationRow;
-
- for(int x = 0; x < width; x++)
- {
- unsigned int xrgb = *(unsigned short*)sourceElement;
-
- unsigned int r = (((xrgb & 0x7C00) * 134771 + 0x800000) >> 8) & 0x00FF0000;
- unsigned int g = (((xrgb & 0x03E0) * 16846 + 0x8000) >> 8) & 0x0000FF00;
- unsigned int b = (((xrgb & 0x001F) * 2106 + 0x80) >> 8);
-
- *(unsigned int*)destinationElement = 0xFF000000 | r | g | b;
-
- sourceElement += source.bytes;
- destinationElement += destination.bytes;
- }
-
- sourceRow += source.pitchB;
- destinationRow += destination.pitchB;
- }
-
- sourceSlice += source.sliceB;
- destinationSlice += destination.sliceB;
- }
-
- source.unlockRect();
- destination.unlockRect();
- }
-
- void Surface::decodeA1R5G5B5(Buffer &destination, Buffer &source)
- {
- unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
- unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
- int depth = min(destination.depth, source.depth);
- int height = min(destination.height, source.height);
- int width = min(destination.width, source.width);
-
- for(int z = 0; z < depth; z++)
- {
- unsigned char *sourceRow = sourceSlice;
- unsigned char *destinationRow = destinationSlice;
-
- for(int y = 0; y < height; y++)
- {
- unsigned char *sourceElement = sourceRow;
- unsigned char *destinationElement = destinationRow;
-
- for(int x = 0; x < width; x++)
- {
- unsigned int argb = *(unsigned short*)sourceElement;
-
- unsigned int a = (argb & 0x8000) * 130560;
- unsigned int r = (((argb & 0x7C00) * 134771 + 0x800000) >> 8) & 0x00FF0000;
- unsigned int g = (((argb & 0x03E0) * 16846 + 0x8000) >> 8) & 0x0000FF00;
- unsigned int b = (((argb & 0x001F) * 2106 + 0x80) >> 8);
-
- *(unsigned int*)destinationElement = a | r | g | b;
-
- sourceElement += source.bytes;
- destinationElement += destination.bytes;
- }
-
- sourceRow += source.pitchB;
- destinationRow += destination.pitchB;
- }
-
- sourceSlice += source.sliceB;
- destinationSlice += destination.sliceB;
- }
-
- source.unlockRect();
- destination.unlockRect();
- }
-
- void Surface::decodeX4R4G4B4(Buffer &destination, Buffer &source)
- {
- unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
- unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
- int depth = min(destination.depth, source.depth);
- int height = min(destination.height, source.height);
- int width = min(destination.width, source.width);
-
- for(int z = 0; z < depth; z++)
- {
- unsigned char *sourceRow = sourceSlice;
- unsigned char *destinationRow = destinationSlice;
-
- for(int y = 0; y < height; y++)
- {
- unsigned char *sourceElement = sourceRow;
- unsigned char *destinationElement = destinationRow;
-
- for(int x = 0; x < width; x++)
- {
- unsigned int xrgb = *(unsigned short*)sourceElement;
-
- unsigned int r = ((xrgb & 0x0F00) * 0x00001100) & 0x00FF0000;
- unsigned int g = ((xrgb & 0x00F0) * 0x00000110) & 0x0000FF00;
- unsigned int b = (xrgb & 0x000F) * 0x00000011;
-
- *(unsigned int*)destinationElement = 0xFF000000 | r | g | b;
-
- sourceElement += source.bytes;
- destinationElement += destination.bytes;
- }
-
- sourceRow += source.pitchB;
- destinationRow += destination.pitchB;
- }
-
- sourceSlice += source.sliceB;
- destinationSlice += destination.sliceB;
- }
-
- source.unlockRect();
- destination.unlockRect();
- }
-
- void Surface::decodeA4R4G4B4(Buffer &destination, Buffer &source)
- {
- unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
- unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
- int depth = min(destination.depth, source.depth);
- int height = min(destination.height, source.height);
- int width = min(destination.width, source.width);
-
- for(int z = 0; z < depth; z++)
- {
- unsigned char *sourceRow = sourceSlice;
- unsigned char *destinationRow = destinationSlice;
-
- for(int y = 0; y < height; y++)
- {
- unsigned char *sourceElement = sourceRow;
- unsigned char *destinationElement = destinationRow;
-
- for(int x = 0; x < width; x++)
- {
- unsigned int argb = *(unsigned short*)sourceElement;
-
- unsigned int a = ((argb & 0xF000) * 0x00011000) & 0xFF000000;
- unsigned int r = ((argb & 0x0F00) * 0x00001100) & 0x00FF0000;
- unsigned int g = ((argb & 0x00F0) * 0x00000110) & 0x0000FF00;
- unsigned int b = (argb & 0x000F) * 0x00000011;
-
- *(unsigned int*)destinationElement = a | r | g | b;
-
- sourceElement += source.bytes;
- destinationElement += destination.bytes;
- }
-
- sourceRow += source.pitchB;
- destinationRow += destination.pitchB;
- }
-
- sourceSlice += source.sliceB;
- destinationSlice += destination.sliceB;
- }
-
- source.unlockRect();
- destination.unlockRect();
- }
-
- void Surface::decodeP8(Buffer &destination, Buffer &source)
- {
- unsigned char *sourceSlice = (unsigned char*)source.lockRect(0, 0, 0, sw::LOCK_READONLY);
- unsigned char *destinationSlice = (unsigned char*)destination.lockRect(0, 0, 0, sw::LOCK_UPDATE);
-
- int depth = min(destination.depth, source.depth);
- int height = min(destination.height, source.height);
- int width = min(destination.width, source.width);
-
- for(int z = 0; z < depth; z++)
- {
- unsigned char *sourceRow = sourceSlice;
- unsigned char *destinationRow = destinationSlice;
-
- for(int y = 0; y < height; y++)
- {
- unsigned char *sourceElement = sourceRow;
- unsigned char *destinationElement = destinationRow;
-
- for(int x = 0; x < width; x++)
- {
- unsigned int abgr = palette[*(unsigned char*)sourceElement];
-
- unsigned int r = (abgr & 0x000000FF) << 16;
- unsigned int g = (abgr & 0x0000FF00) << 0;
- unsigned int b = (abgr & 0x00FF0000) >> 16;
- unsigned int a = (abgr & 0xFF000000) >> 0;
-
- *(unsigned int*)destinationElement = a | r | g | b;
-
- sourceElement += source.bytes;
- destinationElement += destination.bytes;
- }
-
- sourceRow += source.pitchB;
- destinationRow += destination.pitchB;
- }
-
- sourceSlice += source.sliceB;
- destinationSlice += destination.sliceB;
- }
-
- source.unlockRect();
- destination.unlockRect();
- }
-
void Surface::decodeDXT1(Buffer &internal, Buffer &external)
{
unsigned int *destSlice = (unsigned int*)internal.lockRect(0, 0, 0, LOCK_UPDATE);
@@ -2670,13 +1820,13 @@
{
uint64_t size = (uint64_t)sliceB(width, height, border, format, true) * depth * samples;
- // FIXME: Unpacking byte4 to short4 in the sampler currently involves reading 8 bytes,
- // and stencil operations also read 8 bytes per four 8-bit stencil values,
- // so we have to allocate 4 extra bytes to avoid buffer overruns.
+ // FIXME: Unpacking byte4 to short4 in the sampler currently involves reading 8 bytes,
+ // and stencil operations also read 8 bytes per four 8-bit stencil values,
+ // so we have to allocate 4 extra bytes to avoid buffer overruns.
size += 4;
- // We can only sample buffers smaller than 2 GiB.
- // Force an out-of-memory if larger, or let the caller report an error.
+ // We can only sample buffers smaller than 2 GiB.
+ // Force an out-of-memory if larger, or let the caller report an error.
return size < 0x80000000u ? (size_t)size : std::numeric_limits<size_t>::max();
}
case FORMAT_YV12_BT601:
@@ -2700,24 +1850,13 @@
{
switch(format)
{
- case FORMAT_D32:
case FORMAT_D16:
case FORMAT_D24X8:
case FORMAT_D32F:
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32F_SHADOW:
return false;
case FORMAT_D24S8:
- case FORMAT_D24FS8:
case FORMAT_S8:
- case FORMAT_DF24S8:
- case FORMAT_DF16S8:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32FS8_SHADOW:
case FORMAT_D32FS8:
- case FORMAT_D32FS8_COMPLEMENTARY:
- case FORMAT_INTZ:
return true;
default:
return false;
@@ -2728,22 +1867,11 @@
{
switch(format)
{
- case FORMAT_D32:
case FORMAT_D16:
case FORMAT_D24X8:
case FORMAT_D24S8:
- case FORMAT_D24FS8:
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_DF24S8:
- case FORMAT_DF16S8:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- case FORMAT_INTZ:
return true;
case FORMAT_S8:
return false;
@@ -2756,26 +1884,13 @@
{
switch(format)
{
- case FORMAT_D32:
case FORMAT_D16:
case FORMAT_D24X8:
case FORMAT_D24S8:
- case FORMAT_D24FS8:
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- case FORMAT_DF24S8:
- case FORMAT_DF16S8:
- case FORMAT_INTZ:
case FORMAT_S8:
- case FORMAT_A8G8R8B8Q:
- case FORMAT_X8G8R8B8Q:
return true;
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
default:
break;
}
@@ -2783,35 +1898,16 @@
return false;
}
- bool Surface::isPalette(Format format)
- {
- switch(format)
- {
- case FORMAT_P8:
- case FORMAT_A8P8:
- return true;
- default:
- return false;
- }
- }
-
bool Surface::isFloatFormat(Format format)
{
switch(format)
{
case FORMAT_R5G6B5:
- case FORMAT_R8G8B8:
- case FORMAT_B8G8R8:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
case FORMAT_A8B8G8R8I:
case FORMAT_R8UI:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8UI:
case FORMAT_A8B8G8R8:
case FORMAT_G8R8I:
@@ -2820,31 +1916,18 @@
case FORMAT_A2B10G10R10UI:
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R16I:
case FORMAT_R16UI:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
case FORMAT_G16R16:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
case FORMAT_A16B16G16R16:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
- case FORMAT_A8:
case FORMAT_R8I:
case FORMAT_R8:
case FORMAT_S8:
- case FORMAT_L8:
- case FORMAT_L16:
- case FORMAT_A8L8:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
@@ -2852,35 +1935,17 @@
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
return false;
case FORMAT_R16F:
case FORMAT_G16R16F:
- case FORMAT_B16G16R16F:
- case FORMAT_X16B16G16R16F:
case FORMAT_A16B16G16R16F:
- case FORMAT_X16B16G16R16F_UNSIGNED:
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_B32G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- case FORMAT_L16F:
- case FORMAT_A16L16F:
- case FORMAT_L32F:
- case FORMAT_A32L32F:
return true;
default:
ASSERT(false);
@@ -2895,13 +1960,8 @@
{
case FORMAT_NULL:
case FORMAT_R5G6B5:
- case FORMAT_R8G8B8:
- case FORMAT_B8G8R8:
- 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_A2B10G10R10:
@@ -2909,31 +1969,17 @@
case FORMAT_R16UI:
case FORMAT_G16R16:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16:
case FORMAT_A16B16G16R16UI:
case FORMAT_R32UI:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32UI:
- case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_R8UI:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8UI:
case FORMAT_D32F:
case FORMAT_D32FS8:
- case FORMAT_D32F_COMPLEMENTARY:
- case FORMAT_D32FS8_COMPLEMENTARY:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- case FORMAT_A8:
case FORMAT_R8:
- case FORMAT_L8:
- case FORMAT_L16:
- case FORMAT_A8L8:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
@@ -2942,8 +1988,6 @@
case FORMAT_A16B16G16R16I:
case FORMAT_A32B32G32R32I:
case FORMAT_A8B8G8R8_SNORM:
- case FORMAT_Q8W8V8U8:
- case FORMAT_Q16W16V16U16:
case FORMAT_A32B32G32R32F:
return false;
case FORMAT_R32F:
@@ -2952,23 +1996,12 @@
case FORMAT_R32I:
case FORMAT_R8_SNORM:
return component >= 1;
- case FORMAT_V8U8:
- case FORMAT_X8L8V8U8:
- case FORMAT_V16U16:
case FORMAT_G32R32F:
case FORMAT_G8R8I:
case FORMAT_G16R16I:
case FORMAT_G32R32I:
case FORMAT_G8R8_SNORM:
return component >= 2;
- case FORMAT_A16W16V16U16:
- case FORMAT_B32G32R32F:
- case FORMAT_X32B32G32R32F:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X8B8G8R8_SNORM:
- return component >= 3;
default:
ASSERT(false);
}
@@ -2981,24 +2014,11 @@
// Keep in sync with Capabilities::isSRGBreadable
switch(format)
{
- case FORMAT_L8:
- case FORMAT_A8L8:
- case FORMAT_R8G8B8:
case FORMAT_A8R8G8B8:
- case FORMAT_X8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_X8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
case FORMAT_R5G6B5:
- case FORMAT_X1R5G5B5:
case FORMAT_A1R5G5B5:
- case FORMAT_A4R4G4B4:
- case FORMAT_DXT1:
- case FORMAT_DXT3:
- case FORMAT_DXT5:
- case FORMAT_ATI1:
- case FORMAT_ATI2:
return true;
default:
return false;
@@ -3012,10 +2032,7 @@
{
case FORMAT_NULL:
case FORMAT_A8R8G8B8:
- case FORMAT_X8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_X8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
case FORMAT_R5G6B5:
return true;
@@ -3028,7 +2045,6 @@
{
switch(format)
{
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
return true;
default:
@@ -3040,12 +2056,6 @@
{
switch(format)
{
- case FORMAT_DXT1:
- case FORMAT_DXT3:
- case FORMAT_DXT5:
- case FORMAT_ATI1:
- case FORMAT_ATI2:
- case FORMAT_ETC1:
case FORMAT_R11_EAC:
case FORMAT_SIGNED_R11_EAC:
case FORMAT_RG11_EAC:
@@ -3095,15 +2105,12 @@
switch(format)
{
case FORMAT_A8B8G8R8I:
- case FORMAT_X8B8G8R8I:
case FORMAT_G8R8I:
case FORMAT_R8I:
case FORMAT_A16B16G16R16I:
- case FORMAT_X16B16G16R16I:
case FORMAT_G16R16I:
case FORMAT_R16I:
case FORMAT_A32B32G32R32I:
- case FORMAT_X32B32G32R32I:
case FORMAT_G32R32I:
case FORMAT_R32I:
return true;
@@ -3117,15 +2124,12 @@
switch(format)
{
case FORMAT_A8B8G8R8UI:
- case FORMAT_X8B8G8R8UI:
case FORMAT_G8R8UI:
case FORMAT_R8UI:
case FORMAT_A16B16G16R16UI:
- case FORMAT_X16B16G16R16UI:
case FORMAT_G16R16UI:
case FORMAT_R16UI:
case FORMAT_A32B32G32R32UI:
- case FORMAT_X32B32G32R32UI:
case FORMAT_G32R32UI:
case FORMAT_R32UI:
return true;
@@ -3154,11 +2158,7 @@
switch(format)
{
case FORMAT_R5G6B5: return 3;
- case FORMAT_X8R8G8B8: return 3;
- case FORMAT_X8B8G8R8I: return 3;
- case FORMAT_X8B8G8R8: return 3;
case FORMAT_A8R8G8B8: return 4;
- case FORMAT_SRGB8_X8: return 3;
case FORMAT_SRGB8_A8: return 4;
case FORMAT_A8B8G8R8I: return 4;
case FORMAT_A8B8G8R8: return 4;
@@ -3166,11 +2166,9 @@
case FORMAT_G8R8: return 2;
case FORMAT_R8_SNORM: return 1;
case FORMAT_G8R8_SNORM: return 2;
- case FORMAT_X8B8G8R8_SNORM:return 3;
case FORMAT_A8B8G8R8_SNORM:return 4;
case FORMAT_R8UI: return 1;
case FORMAT_G8R8UI: return 2;
- case FORMAT_X8B8G8R8UI: return 3;
case FORMAT_A8B8G8R8UI: return 4;
case FORMAT_A2B10G10R10: return 4;
case FORMAT_A2B10G10R10UI: return 4;
@@ -3179,42 +2177,22 @@
case FORMAT_G16R16: return 2;
case FORMAT_G32R32I: return 2;
case FORMAT_G32R32UI: return 2;
- case FORMAT_X16B16G16R16I: return 3;
- case FORMAT_X16B16G16R16UI: return 3;
case FORMAT_A16B16G16R16I: return 4;
case FORMAT_A16B16G16R16UI: return 4;
case FORMAT_A16B16G16R16: return 4;
- case FORMAT_X32B32G32R32I: return 3;
- case FORMAT_X32B32G32R32UI: return 3;
case FORMAT_A32B32G32R32I: return 4;
case FORMAT_A32B32G32R32UI: return 4;
- case FORMAT_V8U8: return 2;
- case FORMAT_Q8W8V8U8: return 4;
- case FORMAT_X8L8V8U8: return 3;
- case FORMAT_V16U16: return 2;
- case FORMAT_A16W16V16U16: return 4;
- case FORMAT_Q16W16V16U16: return 4;
case FORMAT_R32F: return 1;
case FORMAT_G32R32F: return 2;
- case FORMAT_X32B32G32R32F: return 3;
case FORMAT_A32B32G32R32F: return 4;
- case FORMAT_X32B32G32R32F_UNSIGNED: return 3;
case FORMAT_D32F: return 1;
case FORMAT_D32FS8: return 1;
- case FORMAT_D32F_LOCKABLE: return 1;
- case FORMAT_D32FS8_TEXTURE: return 1;
- case FORMAT_D32F_SHADOW: return 1;
- case FORMAT_D32FS8_SHADOW: return 1;
- case FORMAT_A8: return 1;
case FORMAT_R8I: return 1;
case FORMAT_R8: return 1;
case FORMAT_R16I: return 1;
case FORMAT_R16UI: return 1;
case FORMAT_R32I: return 1;
case FORMAT_R32UI: return 1;
- case FORMAT_L8: return 1;
- case FORMAT_L16: return 1;
- case FORMAT_A8L8: return 2;
case FORMAT_YV12_BT601: return 3;
case FORMAT_YV12_BT709: return 3;
case FORMAT_YV12_JFIF: return 3;
@@ -3704,11 +2682,6 @@
return isDepth(external.format);
}
- bool Surface::hasPalette() const
- {
- return isPalette(external.format);
- }
-
bool Surface::isRenderTarget() const
{
return renderTarget;
@@ -3747,14 +2720,8 @@
{
case FORMAT_NULL:
return FORMAT_NULL;
- case FORMAT_P8:
- case FORMAT_A8P8:
- case FORMAT_A4R4G4B4:
case FORMAT_A1R5G5B5:
- case FORMAT_A8R3G3B2:
return FORMAT_A8R8G8B8;
- case FORMAT_A8:
- return FORMAT_A8;
case FORMAT_R8I:
return FORMAT_R8I;
case FORMAT_R8UI:
@@ -3771,12 +2738,8 @@
return FORMAT_R32I;
case FORMAT_R32UI:
return FORMAT_R32UI;
- case FORMAT_X16B16G16R16I:
- return FORMAT_X16B16G16R16I;
case FORMAT_A16B16G16R16I:
return FORMAT_A16B16G16R16I;
- case FORMAT_X16B16G16R16UI:
- return FORMAT_X16B16G16R16UI;
case FORMAT_A16B16G16R16UI:
return FORMAT_A16B16G16R16UI;
case FORMAT_A2R10G10B10:
@@ -3785,12 +2748,8 @@
return FORMAT_A16B16G16R16;
case FORMAT_A2B10G10R10UI:
return FORMAT_A16B16G16R16UI;
- case FORMAT_X32B32G32R32I:
- return FORMAT_X32B32G32R32I;
case FORMAT_A32B32G32R32I:
return FORMAT_A32B32G32R32I;
- case FORMAT_X32B32G32R32UI:
- return FORMAT_X32B32G32R32UI;
case FORMAT_A32B32G32R32UI:
return FORMAT_A32B32G32R32UI;
case FORMAT_G8R8I:
@@ -3812,14 +2771,7 @@
case FORMAT_G32R32UI:
return FORMAT_G32R32UI;
case FORMAT_A8R8G8B8:
- if(lockable || !quadLayoutEnabled)
- {
- return FORMAT_A8R8G8B8;
- }
- else
- {
- return FORMAT_A8G8R8B8Q;
- }
+ return FORMAT_A8R8G8B8;
case FORMAT_A8B8G8R8I:
return FORMAT_A8B8G8R8I;
case FORMAT_A8B8G8R8UI:
@@ -3832,36 +2784,9 @@
return FORMAT_A8B8G8R8;
case FORMAT_R5G6B5:
return FORMAT_R5G6B5;
- case FORMAT_R3G3B2:
- case FORMAT_R8G8B8:
- case FORMAT_X4R4G4B4:
- case FORMAT_X1R5G5B5:
- case FORMAT_X8R8G8B8:
- if(lockable || !quadLayoutEnabled)
- {
- return FORMAT_X8R8G8B8;
- }
- else
- {
- return FORMAT_X8G8R8B8Q;
- }
- case FORMAT_X8B8G8R8I:
- return FORMAT_X8B8G8R8I;
- case FORMAT_X8B8G8R8UI:
- return FORMAT_X8B8G8R8UI;
- case FORMAT_X8B8G8R8_SNORM:
- return FORMAT_X8B8G8R8_SNORM;
- case FORMAT_B8G8R8:
- case FORMAT_X8B8G8R8:
- return FORMAT_X8B8G8R8;
- case FORMAT_SRGB8_X8:
- return FORMAT_SRGB8_X8;
case FORMAT_SRGB8_A8:
return FORMAT_SRGB8_A8;
// Compressed formats
- case FORMAT_DXT1:
- case FORMAT_DXT3:
- case FORMAT_DXT5:
case FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
case FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
case FORMAT_RGBA8_ETC2_EAC:
@@ -3897,89 +2822,30 @@
case FORMAT_RGBA_ASTC_12x12_KHR:
// ASTC supports HDR, so a floating point format is required to represent it properly
return FORMAT_A32B32G32R32F; // FIXME: 16FP is probably sufficient, but it's currently unsupported
- case FORMAT_ATI1:
- return FORMAT_R8;
case FORMAT_R11_EAC:
case FORMAT_SIGNED_R11_EAC:
return FORMAT_R32F; // FIXME: Signed 8bit format would be sufficient
- case FORMAT_ATI2:
- return FORMAT_G8R8;
case FORMAT_RG11_EAC:
case FORMAT_SIGNED_RG11_EAC:
return FORMAT_G32R32F; // FIXME: Signed 8bit format would be sufficient
- case FORMAT_ETC1:
case FORMAT_RGB8_ETC2:
case FORMAT_SRGB8_ETC2:
- return FORMAT_X8R8G8B8;
- // Bumpmap formats
- case FORMAT_V8U8: return FORMAT_V8U8;
- case FORMAT_L6V5U5: return FORMAT_X8L8V8U8;
- case FORMAT_Q8W8V8U8: return FORMAT_Q8W8V8U8;
- case FORMAT_X8L8V8U8: return FORMAT_X8L8V8U8;
- case FORMAT_V16U16: return FORMAT_V16U16;
- case FORMAT_A2W10V10U10: return FORMAT_A16W16V16U16;
- case FORMAT_Q16W16V16U16: return FORMAT_Q16W16V16U16;
+ return FORMAT_A8R8G8B8;
// Floating-point formats
- case FORMAT_A16F: return FORMAT_A32B32G32R32F;
case FORMAT_R16F: return FORMAT_R32F;
case FORMAT_G16R16F: return FORMAT_G32R32F;
- case FORMAT_B16G16R16F: return FORMAT_X32B32G32R32F;
- case FORMAT_X16B16G16R16F: return FORMAT_X32B32G32R32F;
case FORMAT_A16B16G16R16F: return FORMAT_A32B32G32R32F;
- case FORMAT_X16B16G16R16F_UNSIGNED: return FORMAT_X32B32G32R32F_UNSIGNED;
- case FORMAT_A32F: return FORMAT_A32B32G32R32F;
case FORMAT_R32F: return FORMAT_R32F;
case FORMAT_G32R32F: return FORMAT_G32R32F;
- case FORMAT_B32G32R32F: return FORMAT_X32B32G32R32F;
- case FORMAT_X32B32G32R32F: return FORMAT_X32B32G32R32F;
case FORMAT_A32B32G32R32F: return FORMAT_A32B32G32R32F;
- case FORMAT_X32B32G32R32F_UNSIGNED: return FORMAT_X32B32G32R32F_UNSIGNED;
- // Luminance formats
- case FORMAT_L8: return FORMAT_L8;
- case FORMAT_A4L4: return FORMAT_A8L8;
- case FORMAT_L16: return FORMAT_L16;
- case FORMAT_A8L8: return FORMAT_A8L8;
- case FORMAT_L16F: return FORMAT_X32B32G32R32F;
- case FORMAT_A16L16F: return FORMAT_A32B32G32R32F;
- case FORMAT_L32F: return FORMAT_X32B32G32R32F;
- case FORMAT_A32L32F: return FORMAT_A32B32G32R32F;
// Depth/stencil formats
case FORMAT_D16:
- case FORMAT_D32:
case FORMAT_D24X8:
- if(hasParent) // Texture
- {
- return FORMAT_D32F_SHADOW;
- }
- else if(complementaryDepthBuffer)
- {
- return FORMAT_D32F_COMPLEMENTARY;
- }
- else
- {
- return FORMAT_D32F;
- }
+ return FORMAT_D32F;
case FORMAT_D24S8:
- case FORMAT_D24FS8:
- if(hasParent) // Texture
- {
- return FORMAT_D32FS8_SHADOW;
- }
- else if(complementaryDepthBuffer)
- {
- return FORMAT_D32FS8_COMPLEMENTARY;
- }
- else
- {
- return FORMAT_D32FS8;
- }
+ return FORMAT_D32FS8;
case FORMAT_D32F: return FORMAT_D32F;
case FORMAT_D32FS8: return FORMAT_D32FS8;
- case FORMAT_D32F_LOCKABLE: return FORMAT_D32F_LOCKABLE;
- case FORMAT_D32FS8_TEXTURE: return FORMAT_D32FS8_TEXTURE;
- case FORMAT_INTZ: return FORMAT_D32FS8_TEXTURE;
- case FORMAT_DF24S8: return FORMAT_D32FS8_SHADOW;
- case FORMAT_DF16S8: return FORMAT_D32FS8_SHADOW;
case FORMAT_S8: return FORMAT_S8;
// YUV formats
case FORMAT_YV12_BT601: return FORMAT_YV12_BT601;
@@ -3992,12 +2858,6 @@
return FORMAT_NULL;
}
- void Surface::setTexturePalette(unsigned int *palette)
- {
- Surface::palette = palette;
- Surface::paletteID++;
- }
-
void Surface::resolve()
{
if(internal.samples <= 1 || !internal.dirty || !renderTarget || internal.format == FORMAT_NULL)
@@ -4031,9 +2891,9 @@
unsigned char *sourceE = sourceD + slice;
unsigned char *sourceF = sourceE + slice;
- if(internal.format == FORMAT_X8R8G8B8 || internal.format == FORMAT_A8R8G8B8 ||
- internal.format == FORMAT_X8B8G8R8 || internal.format == FORMAT_A8B8G8R8 ||
- internal.format == FORMAT_SRGB8_X8 || internal.format == FORMAT_SRGB8_A8)
+ if(internal.format == FORMAT_A8R8G8B8 ||
+ internal.format == FORMAT_A8B8G8R8 ||
+ internal.format == FORMAT_SRGB8_A8)
{
#if defined(__i386__) || defined(__x86_64__)
if(CPUID::supportsSSE2() && (width % 4) == 0)
@@ -5507,9 +4367,7 @@
else ASSERT(false);
}
}
- else if(internal.format == FORMAT_A32B32G32R32F ||
- internal.format == FORMAT_X32B32G32R32F ||
- internal.format == FORMAT_X32B32G32R32F_UNSIGNED)
+ else if(internal.format == FORMAT_A32B32G32R32F)
{
#if defined(__i386__) || defined(__x86_64__)
if(CPUID::supportsSSE())
diff --git a/src/Device/Surface.hpp b/src/Device/Surface.hpp
index 5b5ee68..c24c57b 100644
--- a/src/Device/Surface.hpp
+++ b/src/Device/Surface.hpp
@@ -18,6 +18,7 @@
#include "Color.hpp"
#include "Device/Config.hpp"
#include "System/Resource.hpp"
+#include <vulkan/vulkan.h>
namespace sw
{
@@ -62,167 +63,244 @@
enum Format : unsigned char
{
- FORMAT_NULL,
+ FORMAT_NULL = VK_FORMAT_UNDEFINED,
+ // VK_FORMAT_R4G4_UNORM_PACK8,
+ // VK_FORMAT_R4G4B4A4_UNORM_PACK16,
+ FORMAT_R4G4B4A4 = VK_FORMAT_B4G4R4A4_UNORM_PACK16, // Mandatory
+ FORMAT_R5G6B5 = VK_FORMAT_R5G6B5_UNORM_PACK16, // Mandatory
+ // VK_FORMAT_B5G6R5_UNORM_PACK16,
+ FORMAT_R5G5B5A1 = VK_FORMAT_R5G5B5A1_UNORM_PACK16,
+ // VK_FORMAT_B5G5R5A1_UNORM_PACK16,
+ FORMAT_A1R5G5B5 = VK_FORMAT_A1R5G5B5_UNORM_PACK16, // Mandatory
+ FORMAT_R8 = VK_FORMAT_R8_UNORM, // Mandatory
+ FORMAT_R8_SNORM = VK_FORMAT_R8_SNORM, // Mandatory
+ // VK_FORMAT_R8_USCALED,
+ // VK_FORMAT_R8_SSCALED,
+ FORMAT_R8UI = VK_FORMAT_R8_UINT, // Mandatory
+ FORMAT_R8I = VK_FORMAT_R8_SINT, // Mandatory
+ // VK_FORMAT_R8_SRGB,
+ FORMAT_G8R8 = VK_FORMAT_R8G8_UNORM, // Mandatory
+ FORMAT_G8R8_SNORM = VK_FORMAT_R8G8_SNORM, // Mandatory
+ // VK_FORMAT_R8G8_USCALED,
+ // VK_FORMAT_R8G8_SSCALED,
+ FORMAT_G8R8UI = VK_FORMAT_R8G8_UINT, // Mandatory
+ FORMAT_G8R8I = VK_FORMAT_R8G8_SINT, // Mandatory
+ // VK_FORMAT_R8G8_SRGB,
+ // VK_FORMAT_R8G8B8_UNORM,
+ // VK_FORMAT_R8G8B8_SNORM,
+ // VK_FORMAT_R8G8B8_USCALED,
+ // VK_FORMAT_R8G8B8_SSCALED,
+ // VK_FORMAT_R8G8B8_UINT,
+ // VK_FORMAT_R8G8B8_SINT,
+ // VK_FORMAT_R8G8B8_SRGB,
+ // VK_FORMAT_B8G8R8_UNORM,
+ // VK_FORMAT_B8G8R8_SNORM,
+ // VK_FORMAT_B8G8R8_USCALED,
+ // VK_FORMAT_B8G8R8_SSCALED,
+ // VK_FORMAT_B8G8R8_UINT,
+ // VK_FORMAT_B8G8R8_SINT,
+ // VK_FORMAT_B8G8R8_SRGB,
+ FORMAT_A8B8G8R8 = VK_FORMAT_R8G8B8A8_UNORM, // Mandatory
+ FORMAT_A8B8G8R8_SNORM = VK_FORMAT_R8G8B8A8_SNORM, // Mandatory
+ // VK_FORMAT_R8G8B8A8_USCALED,
+ // VK_FORMAT_R8G8B8A8_SSCALED,
+ FORMAT_A8B8G8R8UI = VK_FORMAT_R8G8B8A8_UINT, // Mandatory
+ FORMAT_A8B8G8R8I = VK_FORMAT_R8G8B8A8_SINT, // Mandatory
+ FORMAT_SRGB8_A8 = VK_FORMAT_R8G8B8A8_SRGB, // Mandatory
+ FORMAT_A8R8G8B8 = VK_FORMAT_B8G8R8A8_UNORM, // Mandatory
+ // VK_FORMAT_B8G8R8A8_SNORM,
+ // VK_FORMAT_B8G8R8A8_USCALED,
+ // VK_FORMAT_B8G8R8A8_SSCALED,
+ // VK_FORMAT_B8G8R8A8_UINT,
+ // VK_FORMAT_B8G8R8A8_SINT,
+ // VK_FORMAT_B8G8R8A8_SRGB, // TODO: Mandatory
+ // VK_FORMAT_A8B8G8R8_UNORM_PACK32, // TODO: Mandatory
+ // VK_FORMAT_A8B8G8R8_SNORM_PACK32, // TODO: Mandatory
+ // VK_FORMAT_A8B8G8R8_USCALED_PACK32,
+ // VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
+ // VK_FORMAT_A8B8G8R8_UINT_PACK32, // TODO: Mandatory
+ // VK_FORMAT_A8B8G8R8_SINT_PACK32, // TODO: Mandatory
+ // VK_FORMAT_A8B8G8R8_SRGB_PACK32, // TODO: Mandatory
+ FORMAT_A2R10G10B10 = VK_FORMAT_A2R10G10B10_UNORM_PACK32,
+ // VK_FORMAT_A2R10G10B10_SNORM_PACK32,
+ // VK_FORMAT_A2R10G10B10_USCALED_PACK32,
+ // VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
+ // VK_FORMAT_A2R10G10B10_UINT_PACK32,
+ // VK_FORMAT_A2R10G10B10_SINT_PACK32,
+ FORMAT_A2B10G10R10 = VK_FORMAT_A2B10G10R10_UNORM_PACK32, // Mandatory
+ // VK_FORMAT_A2B10G10R10_SNORM_PACK32,
+ // VK_FORMAT_A2B10G10R10_USCALED_PACK32,
+ // VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
+ FORMAT_A2B10G10R10UI = VK_FORMAT_A2B10G10R10_UINT_PACK32, // Mandatory
+ // VK_FORMAT_A2B10G10R10_SINT_PACK32,
+ // VK_FORMAT_R16_UNORM, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R16_SNORM, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R16_USCALED,
+ // VK_FORMAT_R16_SSCALED,
+ FORMAT_R16UI = VK_FORMAT_R16_UINT, // Mandatory
+ FORMAT_R16I = VK_FORMAT_R16_SINT, // Mandatory
+ FORMAT_R16F = VK_FORMAT_R16_SFLOAT, // Mandatory
+ FORMAT_G16R16 = VK_FORMAT_R16G16_UNORM, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R16G16_SNORM, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R16G16_USCALED,
+ // VK_FORMAT_R16G16_SSCALED,
+ FORMAT_G16R16UI = VK_FORMAT_R16G16_UINT, // Mandatory
+ FORMAT_G16R16I = VK_FORMAT_R16G16_SINT, // Mandatory
+ FORMAT_G16R16F = VK_FORMAT_R16G16_SFLOAT, // Mandatory
+ // VK_FORMAT_R16G16B16_UNORM,
+ // VK_FORMAT_R16G16B16_SNORM,
+ // VK_FORMAT_R16G16B16_USCALED,
+ // VK_FORMAT_R16G16B16_SSCALED,
+ // VK_FORMAT_R16G16B16_UINT,
+ // VK_FORMAT_R16G16B16_SINT,
+ // VK_FORMAT_R16G16B16_SFLOAT,
+ FORMAT_A16B16G16R16 = VK_FORMAT_R16G16B16A16_UNORM, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R16G16B16A16_SNORM, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R16G16B16A16_USCALED,
+ // VK_FORMAT_R16G16B16A16_SSCALED,
+ FORMAT_A16B16G16R16UI = VK_FORMAT_R16G16B16A16_UINT, // Mandatory
+ FORMAT_A16B16G16R16I = VK_FORMAT_R16G16B16A16_SINT, // Mandatory
+ FORMAT_A16B16G16R16F = VK_FORMAT_R16G16B16A16_SFLOAT, // Mandatory
+ FORMAT_R32UI = VK_FORMAT_R32_UINT, // Mandatory
+ FORMAT_R32I = VK_FORMAT_R32_SINT, // Mandatory
+ FORMAT_R32F = VK_FORMAT_R32_SFLOAT, // Mandatory
+ FORMAT_G32R32UI = VK_FORMAT_R32G32_UINT, // Mandatory
+ FORMAT_G32R32I = VK_FORMAT_R32G32_SINT, // Mandatory
+ FORMAT_G32R32F = VK_FORMAT_R32G32_SFLOAT, // Mandatory
+ // VK_FORMAT_R32G32B32_UINT, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R32G32B32_SINT, // Mandatory (Vertex buffer only)
+ // VK_FORMAT_R32G32B32_SFLOAT, // Mandatory (Vertex buffer only)
+ FORMAT_A32B32G32R32UI = VK_FORMAT_R32G32B32A32_UINT, // Mandatory
+ FORMAT_A32B32G32R32I = VK_FORMAT_R32G32B32A32_SINT, // Mandatory
+ FORMAT_A32B32G32R32F = VK_FORMAT_R32G32B32A32_SFLOAT, // Mandatory
+ // VK_FORMAT_R64_UINT,
+ // VK_FORMAT_R64_SINT,
+ // VK_FORMAT_R64_SFLOAT,
+ // VK_FORMAT_R64G64_UINT,
+ // VK_FORMAT_R64G64_SINT,
+ // VK_FORMAT_R64G64_SFLOAT,
+ // VK_FORMAT_R64G64B64_UINT,
+ // VK_FORMAT_R64G64B64_SINT,
+ // VK_FORMAT_R64G64B64_SFLOAT,
+ // VK_FORMAT_R64G64B64A64_UINT,
+ // VK_FORMAT_R64G64B64A64_SINT,
+ // VK_FORMAT_R64G64B64A64_SFLOAT,
+ // VK_FORMAT_B10G11R11_UFLOAT_PACK32, // TODO: Mandatory
+ // VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, // TODO: Mandatory
+ FORMAT_D16 = VK_FORMAT_D16_UNORM, // Mandatory
+ FORMAT_D24X8 = VK_FORMAT_X8_D24_UNORM_PACK32, // Feature specific
+ FORMAT_D32F = VK_FORMAT_D32_SFLOAT, // Mandatory
+ FORMAT_S8 = VK_FORMAT_S8_UINT,
+ // VK_FORMAT_D16_UNORM_S8_UINT,
+ FORMAT_D24S8 = VK_FORMAT_D24_UNORM_S8_UINT, // Feature specific
+ FORMAT_D32FS8 = VK_FORMAT_D32_SFLOAT_S8_UINT, // Feature specific
+ // VK_FORMAT_BC1_RGB_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC1_RGB_SRGB_BLOCK, // Feature specific
+ // VK_FORMAT_BC1_RGBA_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC1_RGBA_SRGB_BLOCK, // Feature specific
+ // VK_FORMAT_BC2_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC2_SRGB_BLOCK, // Feature specific
+ // VK_FORMAT_BC3_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC3_SRGB_BLOCK, // Feature specific
+ // VK_FORMAT_BC4_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC4_SNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC5_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC5_SNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC6H_UFLOAT_BLOCK, // Feature specific
+ // VK_FORMAT_BC6H_SFLOAT_BLOCK, // Feature specific
+ // VK_FORMAT_BC7_UNORM_BLOCK, // Feature specific
+ // VK_FORMAT_BC7_SRGB_BLOCK, // Feature specific
+ FORMAT_RGB8_ETC2 = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ETC2 = VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, // Feature specific
+ FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA8_ETC2_EAC = VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ETC2_EAC = VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, // Feature specific
+ FORMAT_R11_EAC = VK_FORMAT_EAC_R11_UNORM_BLOCK, // Feature specific
+ FORMAT_SIGNED_R11_EAC = VK_FORMAT_EAC_R11_SNORM_BLOCK, // Feature specific
+ FORMAT_RG11_EAC = VK_FORMAT_EAC_R11G11_UNORM_BLOCK, // Feature specific
+ FORMAT_SIGNED_RG11_EAC = VK_FORMAT_EAC_R11G11_SNORM_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_4x4_KHR = VK_FORMAT_ASTC_4x4_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR = VK_FORMAT_ASTC_4x4_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_5x4_KHR = VK_FORMAT_ASTC_5x4_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR = VK_FORMAT_ASTC_5x4_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_5x5_KHR = VK_FORMAT_ASTC_5x5_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR = VK_FORMAT_ASTC_5x5_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_6x5_KHR = VK_FORMAT_ASTC_6x5_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR = VK_FORMAT_ASTC_6x5_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_6x6_KHR = VK_FORMAT_ASTC_6x6_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR = VK_FORMAT_ASTC_6x6_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_8x5_KHR = VK_FORMAT_ASTC_8x5_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR = VK_FORMAT_ASTC_8x5_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_8x6_KHR = VK_FORMAT_ASTC_8x6_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR = VK_FORMAT_ASTC_8x6_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_8x8_KHR = VK_FORMAT_ASTC_8x8_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR = VK_FORMAT_ASTC_8x8_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_10x5_KHR = VK_FORMAT_ASTC_10x5_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR = VK_FORMAT_ASTC_10x5_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_10x6_KHR = VK_FORMAT_ASTC_10x6_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR = VK_FORMAT_ASTC_10x6_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_10x8_KHR = VK_FORMAT_ASTC_10x8_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR = VK_FORMAT_ASTC_10x8_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_10x10_KHR = VK_FORMAT_ASTC_10x10_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR = VK_FORMAT_ASTC_10x10_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_12x10_KHR = VK_FORMAT_ASTC_12x10_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR = VK_FORMAT_ASTC_12x10_SRGB_BLOCK, // Feature specific
+ FORMAT_RGBA_ASTC_12x12_KHR = VK_FORMAT_ASTC_12x12_UNORM_BLOCK, // Feature specific
+ FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR = VK_FORMAT_ASTC_12x12_SRGB_BLOCK, // Feature specific
- FORMAT_A8,
- FORMAT_R8I,
- FORMAT_R8UI,
- FORMAT_R8_SNORM,
- FORMAT_R8,
- FORMAT_R16I,
- FORMAT_R16UI,
- FORMAT_R32I,
- FORMAT_R32UI,
- FORMAT_R3G3B2,
- FORMAT_A8R3G3B2,
- FORMAT_X4R4G4B4,
- FORMAT_A4R4G4B4,
- FORMAT_R4G4B4A4,
- FORMAT_R5G6B5,
- FORMAT_R8G8B8,
- FORMAT_B8G8R8,
- FORMAT_X8R8G8B8,
- FORMAT_A8R8G8B8,
- FORMAT_X8B8G8R8I,
- FORMAT_X8B8G8R8UI,
- FORMAT_X8B8G8R8_SNORM,
- FORMAT_X8B8G8R8,
- FORMAT_A8B8G8R8I,
- FORMAT_A8B8G8R8UI,
- FORMAT_A8B8G8R8_SNORM,
- FORMAT_A8B8G8R8,
- FORMAT_SRGB8_X8,
- FORMAT_SRGB8_A8,
- FORMAT_X1R5G5B5,
- FORMAT_A1R5G5B5,
- FORMAT_R5G5B5A1,
- FORMAT_G8R8I,
- FORMAT_G8R8UI,
- FORMAT_G8R8_SNORM,
- FORMAT_G8R8,
- FORMAT_G16R16,
- FORMAT_G16R16I,
- FORMAT_G16R16UI,
- FORMAT_G32R32I,
- FORMAT_G32R32UI,
- FORMAT_A2R10G10B10,
- FORMAT_A2B10G10R10,
- FORMAT_A2B10G10R10UI,
- FORMAT_A16B16G16R16,
- FORMAT_X16B16G16R16I,
- FORMAT_X16B16G16R16UI,
- FORMAT_A16B16G16R16I,
- FORMAT_A16B16G16R16UI,
- FORMAT_X32B32G32R32I,
- FORMAT_X32B32G32R32UI,
- FORMAT_A32B32G32R32I,
- FORMAT_A32B32G32R32UI,
- // Paletted formats
- FORMAT_P8,
- FORMAT_A8P8,
- // Compressed formats
- FORMAT_DXT1,
- FORMAT_DXT3,
- FORMAT_DXT5,
- FORMAT_ATI1,
- FORMAT_ATI2,
- FORMAT_ETC1,
- FORMAT_R11_EAC,
- FORMAT_SIGNED_R11_EAC,
- FORMAT_RG11_EAC,
- FORMAT_SIGNED_RG11_EAC,
- FORMAT_RGB8_ETC2,
- FORMAT_SRGB8_ETC2,
- FORMAT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
- FORMAT_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
- FORMAT_RGBA8_ETC2_EAC,
- FORMAT_SRGB8_ALPHA8_ETC2_EAC,
- FORMAT_RGBA_ASTC_4x4_KHR,
- FORMAT_RGBA_ASTC_5x4_KHR,
- FORMAT_RGBA_ASTC_5x5_KHR,
- FORMAT_RGBA_ASTC_6x5_KHR,
- FORMAT_RGBA_ASTC_6x6_KHR,
- FORMAT_RGBA_ASTC_8x5_KHR,
- FORMAT_RGBA_ASTC_8x6_KHR,
- FORMAT_RGBA_ASTC_8x8_KHR,
- FORMAT_RGBA_ASTC_10x5_KHR,
- FORMAT_RGBA_ASTC_10x6_KHR,
- FORMAT_RGBA_ASTC_10x8_KHR,
- FORMAT_RGBA_ASTC_10x10_KHR,
- FORMAT_RGBA_ASTC_12x10_KHR,
- FORMAT_RGBA_ASTC_12x12_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_4x4_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_5x4_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_5x5_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_6x5_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_6x6_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_8x5_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_8x6_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_8x8_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_10x5_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_10x6_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_10x8_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_10x10_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_12x10_KHR,
- FORMAT_SRGB8_ALPHA8_ASTC_12x12_KHR,
- // Floating-point formats
- FORMAT_A16F,
- FORMAT_R16F,
- FORMAT_G16R16F,
- FORMAT_B16G16R16F,
- FORMAT_X16B16G16R16F,
- FORMAT_A16B16G16R16F,
- FORMAT_X16B16G16R16F_UNSIGNED,
- FORMAT_A32F,
- FORMAT_R32F,
- FORMAT_G32R32F,
- FORMAT_B32G32R32F,
- FORMAT_X32B32G32R32F,
- FORMAT_A32B32G32R32F,
- FORMAT_X32B32G32R32F_UNSIGNED,
- // Bump map formats
- FORMAT_V8U8,
- FORMAT_L6V5U5,
- FORMAT_Q8W8V8U8,
- FORMAT_X8L8V8U8,
- FORMAT_A2W10V10U10,
- FORMAT_V16U16,
- FORMAT_A16W16V16U16,
- FORMAT_Q16W16V16U16,
- // Luminance formats
- FORMAT_L8,
- FORMAT_A4L4,
- FORMAT_L16,
- FORMAT_A8L8,
- FORMAT_L16F,
- FORMAT_A16L16F,
- FORMAT_L32F,
- FORMAT_A32L32F,
- // Depth/stencil formats
- FORMAT_D16,
- FORMAT_D32,
- FORMAT_D24X8,
- FORMAT_D24S8,
- FORMAT_D24FS8,
- FORMAT_D32F, // Quad layout
- FORMAT_D32FS8, // Quad layout
- FORMAT_D32F_COMPLEMENTARY, // Quad layout, 1 - z
- FORMAT_D32FS8_COMPLEMENTARY, // Quad layout, 1 - z
- FORMAT_D32F_LOCKABLE, // Linear layout
- FORMAT_D32FS8_TEXTURE, // Linear layout, no PCF
- FORMAT_D32F_SHADOW, // Linear layout, PCF
- FORMAT_D32FS8_SHADOW, // Linear layout, PCF
- FORMAT_DF24S8,
- FORMAT_DF16S8,
- FORMAT_INTZ,
- FORMAT_S8,
- // Quad layout framebuffer
- FORMAT_X8G8R8B8Q,
- FORMAT_A8G8R8B8Q,
+ // EXTENSION FORMATS:
+ // IMPORTANT: if any of these formats are added, this enum needs
+ // to go from "unsigned char" to "unsigned int" and FORMAT_LAST
+ // below needs to be updated to take extensions into account.
+
+ // VK_FORMAT_G8B8G8R8_422_UNORM,
+ // VK_FORMAT_B8G8R8G8_422_UNORM,
+ // VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, // TODO: Mandatory
+ // VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, // TODO: Mandatory
+ // VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
+ // VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
+ // VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
+ // VK_FORMAT_R10X6_UNORM_PACK16,
+ // VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
+ // VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
+ // VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
+ // VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
+ // VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
+ // VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
+ // VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
+ // VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
+ // VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
+ // VK_FORMAT_R12X4_UNORM_PACK16,
+ // VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
+ // VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
+ // VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
+ // VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
+ // VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
+ // VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
+ // VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
+ // VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
+ // VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
+ // VK_FORMAT_G16B16G16R16_422_UNORM,
+ // VK_FORMAT_B16G16R16G16_422_UNORM,
+ // VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
+ // VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
+ // VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
+ // VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
+ // VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+ // VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
+ // VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
+ // VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
+ // VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG,
+ // VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG,
+ // VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
+ // VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
+ // VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
+
// YUV formats
- FORMAT_YV12_BT601,
- FORMAT_YV12_BT709,
- FORMAT_YV12_JFIF, // Full-swing BT.601
+ FORMAT_YV12_BT601 = VK_FORMAT_END_RANGE + 1, // TODO: VK_FORMAT_G8_B8R8_2PLANE_420_UNORM + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+ FORMAT_YV12_BT709, // TODO: VK_FORMAT_G8_B8R8_2PLANE_420_UNORM + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+ FORMAT_YV12_JFIF, // TODO: VK_FORMAT_G8_B8R8_2PLANE_420_UNORM + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
FORMAT_LAST = FORMAT_YV12_JFIF
};
@@ -350,7 +428,6 @@
bool hasStencil() const;
bool hasDepth() const;
- bool hasPalette() const;
bool isRenderTarget() const;
bool hasDirtyContents() const;
@@ -368,7 +445,6 @@
static bool isStencil(Format format);
static bool isDepth(Format format);
static bool hasQuadLayout(Format format);
- static bool isPalette(Format format);
static bool isFloatFormat(Format format);
static bool isUnsignedComponent(Format format, int component);
@@ -382,8 +458,6 @@
static bool isNormalizedInteger(Format format);
static int componentCount(Format format);
- static void setTexturePalette(unsigned int *palette);
-
private:
sw::Resource *resource;
@@ -465,13 +539,6 @@
};
};
- static void decodeR8G8B8(Buffer &destination, Buffer &source);
- static void decodeX1R5G5B5(Buffer &destination, Buffer &source);
- static void decodeA1R5G5B5(Buffer &destination, Buffer &source);
- static void decodeX4R4G4B4(Buffer &destination, Buffer &source);
- static void decodeA4R4G4B4(Buffer &destination, Buffer &source);
- static void decodeP8(Buffer &destination, Buffer &source);
-
static void decodeDXT1(Buffer &internal, Buffer &external);
static void decodeDXT3(Buffer &internal, Buffer &external);
static void decodeDXT5(Buffer &internal, Buffer &external);
@@ -499,10 +566,6 @@
const bool renderTarget;
bool dirtyContents; // Sibling surfaces need updating (mipmaps / cube borders).
- unsigned int paletteUsed;
-
- static unsigned int *palette; // FIXME: Not multi-device safe
- static unsigned int paletteID;
bool hasParent;
bool ownExternal;
diff --git a/src/Pipeline/PixelProgram.cpp b/src/Pipeline/PixelProgram.cpp
index 3d9cfe7..7137a7d 100644
--- a/src/Pipeline/PixelProgram.cpp
+++ b/src/Pipeline/PixelProgram.cpp
@@ -630,15 +630,11 @@
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 @@
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 @@
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 @@
break;
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
case FORMAT_R32I:
case FORMAT_G32R32I:
@@ -813,12 +802,6 @@
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);
}
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index 0cf82cb..0519735 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -980,16 +980,6 @@
pixel.z = UnpackLow(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
pixel.w = UnpackHigh(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
break;
- case FORMAT_A8:
- buffer = cBuffer + 1 * x;
- pixel.w = Insert(pixel.w, *Pointer<Short>(buffer), 0);
- buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
- pixel.w = Insert(pixel.w, *Pointer<Short>(buffer), 1);
- pixel.w = UnpackLow(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
- pixel.x = Short4(0x0000);
- pixel.y = Short4(0x0000);
- pixel.z = Short4(0x0000);
- break;
case FORMAT_R8:
buffer = cBuffer + 1 * x;
pixel.x = Insert(pixel.x, *Pointer<Short>(buffer), 0);
@@ -1000,24 +990,6 @@
pixel.z = Short4(0x0000);
pixel.w = Short4(0xFFFFu);
break;
- case FORMAT_X8R8G8B8:
- buffer = cBuffer + 4 * x;
- c01 = *Pointer<Short4>(buffer);
- buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
- c23 = *Pointer<Short4>(buffer);
- pixel.z = c01;
- pixel.y = c01;
- pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(c23));
- pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(c23));
- pixel.x = pixel.z;
- pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.y));
- pixel.x = UnpackHigh(As<Byte8>(pixel.x), As<Byte8>(pixel.y));
- pixel.y = pixel.z;
- pixel.x = UnpackLow(As<Byte8>(pixel.x), As<Byte8>(pixel.x));
- pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(pixel.y));
- pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.z));
- pixel.w = Short4(0xFFFFu);
- break;
case FORMAT_G8R8:
buffer = cBuffer + 2 * x;
c01 = As<Short4>(Insert(As<Int2>(c01), *Pointer<Int>(buffer), 0));
@@ -1028,40 +1000,6 @@
pixel.z = Short4(0x0000u);
pixel.w = Short4(0xFFFFu);
break;
- case FORMAT_X8B8G8R8:
- case FORMAT_SRGB8_X8:
- buffer = cBuffer + 4 * x;
- c01 = *Pointer<Short4>(buffer);
- buffer += *Pointer<Int>(data + OFFSET(DrawData, colorPitchB[index]));
- c23 = *Pointer<Short4>(buffer);
- pixel.z = c01;
- pixel.y = c01;
- pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(c23));
- pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(c23));
- pixel.x = pixel.z;
- pixel.z = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.y));
- pixel.x = UnpackHigh(As<Byte8>(pixel.x), As<Byte8>(pixel.y));
- pixel.y = pixel.z;
- pixel.w = pixel.x;
- pixel.x = UnpackLow(As<Byte8>(pixel.z), As<Byte8>(pixel.z));
- pixel.y = UnpackHigh(As<Byte8>(pixel.y), As<Byte8>(pixel.y));
- pixel.z = UnpackLow(As<Byte8>(pixel.w), As<Byte8>(pixel.w));
- pixel.w = Short4(0xFFFFu);
- break;
- case FORMAT_A8G8R8B8Q:
- UNIMPLEMENTED();
- // pixel.z = UnpackLow(As<Byte8>(pixel.z), *Pointer<Byte8>(cBuffer + 8 * x + 0));
- // pixel.x = UnpackHigh(As<Byte8>(pixel.x), *Pointer<Byte8>(cBuffer + 8 * x + 0));
- // pixel.y = UnpackLow(As<Byte8>(pixel.y), *Pointer<Byte8>(cBuffer + 8 * x + 8));
- // pixel.w = UnpackHigh(As<Byte8>(pixel.w), *Pointer<Byte8>(cBuffer + 8 * x + 8));
- break;
- case FORMAT_X8G8R8B8Q:
- UNIMPLEMENTED();
- // pixel.z = UnpackLow(As<Byte8>(pixel.z), *Pointer<Byte8>(cBuffer + 8 * x + 0));
- // pixel.x = UnpackHigh(As<Byte8>(pixel.x), *Pointer<Byte8>(cBuffer + 8 * x + 0));
- // pixel.y = UnpackLow(As<Byte8>(pixel.y), *Pointer<Byte8>(cBuffer + 8 * x + 8));
- // pixel.w = Short4(0xFFFFu);
- break;
case FORMAT_A16B16G16R16:
buffer = cBuffer;
pixel.x = *Pointer<Short4>(buffer + 8 * x);
@@ -1325,13 +1263,8 @@
current.y = AddSat(As<UShort4>(current.y), UShort4(0x0200));
current.z = AddSat(As<UShort4>(current.z), UShort4(0x0400));
break;
- case FORMAT_X8G8R8B8Q:
- case FORMAT_A8G8R8B8Q:
- 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:
@@ -1359,28 +1292,8 @@
current.x = current.x | current.y | current.z;
}
break;
- case FORMAT_X8G8R8B8Q:
- UNIMPLEMENTED();
- // current.x = As<Short4>(As<UShort4>(current.x) >> 8);
- // current.y = As<Short4>(As<UShort4>(current.y) >> 8);
- // current.z = As<Short4>(As<UShort4>(current.z) >> 8);
-
- // current.z = As<Short4>(Pack(As<UShort4>(current.z), As<UShort4>(current.x)));
- // current.y = As<Short4>(Pack(As<UShort4>(current.y), As<UShort4>(current.y)));
- break;
- case FORMAT_A8G8R8B8Q:
- UNIMPLEMENTED();
- // current.x = As<Short4>(As<UShort4>(current.x) >> 8);
- // current.y = As<Short4>(As<UShort4>(current.y) >> 8);
- // current.z = As<Short4>(As<UShort4>(current.z) >> 8);
- // current.w = As<Short4>(As<UShort4>(current.w) >> 8);
-
- // current.z = As<Short4>(Pack(As<UShort4>(current.z), As<UShort4>(current.x)));
- // current.y = As<Short4>(Pack(As<UShort4>(current.y), As<UShort4>(current.w)));
- break;
- case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
- if(state.targetFormat[index] == FORMAT_X8R8G8B8 || rgbaWriteMask == 0x7)
+ if(rgbaWriteMask == 0x7)
{
current.x = As<Short4>(As<UShort4>(current.x) >> 8);
current.y = As<Short4>(As<UShort4>(current.y) >> 8);
@@ -1414,11 +1327,9 @@
current.y = As<Short4>(UnpackHigh(current.y, current.x));
}
break;
- case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- if(state.targetFormat[index] == FORMAT_X8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_X8 || rgbaWriteMask == 0x7)
+ if(rgbaWriteMask == 0x7)
{
current.x = As<Short4>(As<UShort4>(current.x) >> 8);
current.y = As<Short4>(As<UShort4>(current.y) >> 8);
@@ -1463,10 +1374,6 @@
current.x = As<Short4>(As<UShort4>(current.x) >> 8);
current.x = As<Short4>(PackUnsigned(current.x, current.x));
break;
- case FORMAT_A8:
- current.w = As<Short4>(As<UShort4>(current.w) >> 8);
- current.w = As<Short4>(PackUnsigned(current.w, current.w));
- break;
case FORMAT_G16R16:
current.z = current.x;
current.x = As<Short4>(UnpackLow(current.x, current.y));
@@ -1540,52 +1447,12 @@
*Pointer<Int>(buffer) = c23;
}
break;
- case FORMAT_A8G8R8B8Q:
- case FORMAT_X8G8R8B8Q: // FIXME: Don't touch alpha?
- UNIMPLEMENTED();
- // value = *Pointer<Short4>(cBuffer + 8 * x + 0);
-
- // if((state.targetFormat[index] == FORMAT_A8G8R8B8Q && bgraWriteMask != 0x0000000F) ||
- // ((state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x00000007) &&
- // (state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x0000000F))) // FIXME: Need for masking when XRGB && Fh?
- // {
- // Short4 masked = value;
- // c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
- // masked &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskB4Q[bgraWriteMask][0]));
- // c01 |= masked;
- // }
-
- // c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskD01Q) + xMask * 8);
- // value &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskD01Q) + xMask * 8);
- // c01 |= value;
- // *Pointer<Short4>(cBuffer + 8 * x + 0) = c01;
-
- // value = *Pointer<Short4>(cBuffer + 8 * x + 8);
-
- // if((state.targetFormat[index] == FORMAT_A8G8R8B8Q && bgraWriteMask != 0x0000000F) ||
- // ((state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x00000007) &&
- // (state.targetFormat[index] == FORMAT_X8G8R8B8Q && bgraWriteMask != 0x0000000F))) // FIXME: Need for masking when XRGB && Fh?
- // {
- // Short4 masked = value;
- // c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
- // masked &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskB4Q[bgraWriteMask][0]));
- // c23 |= masked;
- // }
-
- // c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskD23Q) + xMask * 8);
- // value &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskD23Q) + xMask * 8);
- // c23 |= value;
- // *Pointer<Short4>(cBuffer + 8 * x + 8) = c23;
- break;
case FORMAT_A8R8G8B8:
- case FORMAT_X8R8G8B8: // FIXME: Don't touch alpha?
{
Pointer<Byte> buffer = cBuffer + x * 4;
Short4 value = *Pointer<Short4>(buffer);
- if((state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F) ||
- ((state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x00000007) &&
- (state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x0000000F))) // FIXME: Need for masking when XRGB && Fh?
+ if(state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F) // FIXME: Need for masking when XRGB && Fh?
{
Short4 masked = value;
c01 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
@@ -1601,9 +1468,7 @@
buffer += *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
value = *Pointer<Short4>(buffer);
- if((state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F) ||
- ((state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x00000007) &&
- (state.targetFormat[index] == FORMAT_X8R8G8B8 && bgraWriteMask != 0x0000000F))) // FIXME: Need for masking when XRGB && Fh?
+ if(state.targetFormat[index] == FORMAT_A8R8G8B8 && bgraWriteMask != 0x0000000F) // FIXME: Need for masking when XRGB && Fh?
{
Short4 masked = value;
c23 &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q[bgraWriteMask][0]));
@@ -1618,16 +1483,12 @@
}
break;
case FORMAT_A8B8G8R8:
- case FORMAT_X8B8G8R8: // FIXME: Don't touch alpha?
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
{
Pointer<Byte> buffer = cBuffer + x * 4;
Short4 value = *Pointer<Short4>(buffer);
- bool masked = (((state.targetFormat[index] == FORMAT_A8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_A8) && rgbaWriteMask != 0x0000000F) ||
- (((state.targetFormat[index] == FORMAT_X8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_X8) && rgbaWriteMask != 0x00000007) &&
- ((state.targetFormat[index] == FORMAT_X8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_X8) && rgbaWriteMask != 0x0000000F))); // FIXME: Need for masking when XBGR && Fh?
+ bool masked = ((state.targetFormat[index] == FORMAT_A8B8G8R8 || state.targetFormat[index] == FORMAT_SRGB8_A8) && rgbaWriteMask != 0x0000000F); // FIXME: Need for masking when XBGR && Fh?
if(masked)
{
@@ -1701,23 +1562,6 @@
*Pointer<Short>(buffer + pitch) = Extract(current.x, 1);
}
break;
- case FORMAT_A8:
- if(rgbaWriteMask & 0x00000008)
- {
- Pointer<Byte> buffer = cBuffer + 1 * x;
- Short4 value;
- value = Insert(value, *Pointer<Short>(buffer), 0);
- Int pitch = *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
- value = Insert(value, *Pointer<Short>(buffer + pitch), 1);
-
- current.w &= *Pointer<Short4>(constants + OFFSET(Constants,maskB4Q) + 8 * xMask);
- value &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskB4Q) + 8 * xMask);
- current.w |= value;
-
- *Pointer<Short>(buffer) = Extract(current.w, 0);
- *Pointer<Short>(buffer + pitch) = Extract(current.w, 1);
- }
- break;
case FORMAT_G16R16:
{
Pointer<Byte> buffer = cBuffer + 4 * x;
@@ -2006,9 +1850,7 @@
pixel.y = pixel.z;
pixel.z = pixel.w = one;
break;
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
buffer = cBuffer;
@@ -2018,11 +1860,6 @@
pixel.z = *Pointer<Float4>(buffer + 16 * x, 16);
pixel.w = *Pointer<Float4>(buffer + 16 * x + 16, 16);
transpose4x4(pixel.x, pixel.y, pixel.z, pixel.w);
- if(state.targetFormat[index] == FORMAT_X32B32G32R32F ||
- state.targetFormat[index] == FORMAT_X32B32G32R32F_UNSIGNED)
- {
- pixel.w = Float4(1.0f);
- }
break;
default:
ASSERT(false);
@@ -2169,9 +2006,7 @@
oC.z = UnpackHigh(oC.z, oC.y);
oC.y = oC.z;
break;
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
case FORMAT_A16B16G16R16I:
@@ -2423,9 +2258,7 @@
*Pointer<UInt>(buffer) = As<UInt>(Extract(packedCol, 0));
}
break;
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
buffer = cBuffer + 16 * x;
diff --git a/src/Pipeline/SamplerCore.cpp b/src/Pipeline/SamplerCore.cpp
index a7acf2b..0b49d4e 100644
--- a/src/Pipeline/SamplerCore.cpp
+++ b/src/Pipeline/SamplerCore.cpp
@@ -166,7 +166,6 @@
{
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8:
case FORMAT_R5G6B5:
@@ -175,8 +174,6 @@
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_R16I:
@@ -184,8 +181,6 @@
case FORMAT_G16R16:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
@@ -193,22 +188,11 @@
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
@@ -216,40 +200,13 @@
if(componentCount < 3) c.z = Short4(defaultColorValue);
if(componentCount < 4) c.w = Short4(0x1000);
break;
- case FORMAT_A8:
- c.w = c.x;
- c.x = Short4(0x0000);
- c.y = Short4(0x0000);
- c.z = Short4(0x0000);
- break;
- case FORMAT_L8:
- case FORMAT_L16:
- c.y = c.x;
- c.z = c.x;
- c.w = Short4(0x1000);
- break;
- case FORMAT_A8L8:
- c.w = c.y;
- c.y = c.x;
- c.z = c.x;
- break;
case FORMAT_R32F:
c.y = Short4(defaultColorValue);
case FORMAT_G32R32F:
c.z = Short4(defaultColorValue);
- case FORMAT_X32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
c.w = Short4(0x1000);
case FORMAT_A32B32G32R32F:
break;
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- c.y = c.x;
- c.z = c.x;
- c.w = c.x;
- break;
default:
ASSERT(false);
}
@@ -402,13 +359,6 @@
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
c.z = As<Float4>(UInt4(0));
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
- c.w = As<Float4>(UInt4(1));
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_A16B16G16R16I:
@@ -418,25 +368,15 @@
break;
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8:
case FORMAT_R5G6B5:
case FORMAT_G8R8:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
@@ -444,40 +384,13 @@
if(componentCount < 3) c.z = Float4(defaultColorValue);
if(componentCount < 4) c.w = Float4(1.0f);
break;
- case FORMAT_A8:
- c.w = c.x;
- c.x = Float4(0.0f);
- c.y = Float4(0.0f);
- c.z = Float4(0.0f);
- break;
- case FORMAT_L8:
- case FORMAT_L16:
- c.y = c.x;
- c.z = c.x;
- c.w = Float4(1.0f);
- break;
- case FORMAT_A8L8:
- c.w = c.y;
- c.y = c.x;
- c.z = c.x;
- break;
case FORMAT_R32F:
c.y = Float4(defaultColorValue);
case FORMAT_G32R32F:
c.z = Float4(defaultColorValue);
- case FORMAT_X32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
c.w = Float4(1.0f);
case FORMAT_A32B32G32R32F:
break;
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- c.y = Float4(0.0f);
- c.z = Float4(0.0f);
- c.w = Float4(1.0f);
- break;
default:
ASSERT(false);
}
@@ -1796,7 +1709,6 @@
case FORMAT_A8B8G8R8:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8_SNORM:
- case FORMAT_Q8W8V8U8:
case FORMAT_SRGB8_A8:
c.z = As<Short4>(UnpackHigh(c.x, c.y));
c.x = As<Short4>(UnpackLow(c.x, c.y));
@@ -1830,57 +1742,6 @@
}
}
break;
- case 3:
- {
- Byte4 c0 = Pointer<Byte4>(buffer[f0])[index[0]];
- Byte4 c1 = Pointer<Byte4>(buffer[f1])[index[1]];
- Byte4 c2 = Pointer<Byte4>(buffer[f2])[index[2]];
- Byte4 c3 = Pointer<Byte4>(buffer[f3])[index[3]];
- c.x = Unpack(c0, c1);
- c.y = Unpack(c2, c3);
-
- switch(state.textureFormat)
- {
- case FORMAT_X8R8G8B8:
- c.z = As<Short4>(UnpackLow(c.x, c.y));
- c.x = As<Short4>(UnpackHigh(c.x, c.y));
- c.y = c.z;
- c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(c.z));
- c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(c.y));
- c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
- break;
- case FORMAT_X8B8G8R8_SNORM:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8:
- case FORMAT_X8L8V8U8:
- case FORMAT_SRGB8_X8:
- c.z = As<Short4>(UnpackHigh(c.x, c.y));
- c.x = As<Short4>(UnpackLow(c.x, c.y));
- c.y = c.x;
- c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(c.x));
- c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(c.y));
- c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(c.z));
- // Propagate sign bit
- if(state.textureFormat == FORMAT_X8B8G8R8I)
- {
- c.x >>= 8;
- c.y >>= 8;
- c.z >>= 8;
- }
- break;
- case FORMAT_X8B8G8R8UI:
- c.z = As<Short4>(UnpackHigh(c.x, c.y));
- c.x = As<Short4>(UnpackLow(c.x, c.y));
- c.y = c.x;
- c.x = UnpackLow(As<Byte8>(c.x), As<Byte8>(Short4(0)));
- c.y = UnpackHigh(As<Byte8>(c.y), As<Byte8>(Short4(0)));
- c.z = UnpackLow(As<Byte8>(c.z), As<Byte8>(Short4(0)));
- break;
- default:
- ASSERT(false);
- }
- }
- break;
case 2:
c.x = Insert(c.x, Pointer<Short>(buffer[f0])[index[0]], 0);
c.x = Insert(c.x, Pointer<Short>(buffer[f1])[index[1]], 1);
@@ -1891,8 +1752,6 @@
{
case FORMAT_G8R8:
case FORMAT_G8R8_SNORM:
- case FORMAT_V8U8:
- case FORMAT_A8L8:
c.y = (c.x & Short4(0xFF00u)) | As<Short4>(As<UShort4>(c.x) >> 8);
c.x = (c.x & Short4(0x00FFu)) | (c.x << 8);
break;
@@ -2012,9 +1871,9 @@
if(hasYuvFormat())
{
// Generic YPbPr to RGB transformation
- // R = Y + 2 * (1 - Kr) * Pr
- // G = Y - 2 * Kb * (1 - Kb) / Kg * Pb - 2 * Kr * (1 - Kr) / Kg * Pr
- // B = Y + 2 * (1 - Kb) * Pb
+ // R = Y + 2 * (1 - Kr) * Pr
+ // G = Y - 2 * Kb * (1 - Kb) / Kg * Pb - 2 * Kr * (1 - Kr) / Kg * Pr
+ // B = Y + 2 * (1 - Kb) * Pb
float Kb = 0.114f;
float Kr = 0.299f;
@@ -2053,10 +1912,10 @@
const float Uu = studioSwing ? 255.0f / (240 - 16) : 1.0f;
const float Vv = studioSwing ? 255.0f / (240 - 16) : 1.0f;
- const float Rv = Vv * Rr;
- const float Gu = Uu * Gb;
- const float Gv = Vv * Gr;
- const float Bu = Uu * Bb;
+ const float Rv = Vv * Rr;
+ const float Gu = Uu * Gb;
+ const float Gv = Vv * Gr;
+ const float Bu = Uu * Bb;
const float R0 = (studioSwing * -16 * Yy - 128 * Rv) / 255;
const float G0 = (studioSwing * -16 * Yy - 128 * Gu - 128 * Gv) / 255;
@@ -2599,59 +2458,33 @@
return true;
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8I:
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_R32I:
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
case FORMAT_G8R8:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_A8:
case FORMAT_R8:
- case FORMAT_L8:
- case FORMAT_A8L8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- case FORMAT_L16:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
case FORMAT_R16I:
case FORMAT_R16UI:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
case FORMAT_YV12_BT601:
@@ -2670,62 +2503,36 @@
switch(state.textureFormat)
{
case FORMAT_G8R8:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
- case FORMAT_A8:
case FORMAT_R8:
- case FORMAT_L8:
- case FORMAT_A8L8:
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8I:
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
return true;
case FORMAT_R5G6B5:
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- case FORMAT_L16:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
case FORMAT_R32I:
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
case FORMAT_R16I:
case FORMAT_R16UI:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
case FORMAT_YV12_BT601:
@@ -2746,65 +2553,39 @@
case FORMAT_R5G6B5:
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8I:
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_R32I:
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
case FORMAT_G8R8:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_A8:
case FORMAT_R8:
- case FORMAT_L8:
- case FORMAT_A8L8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
return false;
- case FORMAT_L16:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
case FORMAT_R16I:
case FORMAT_R16UI:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
return true;
default:
ASSERT(false);
@@ -2820,53 +2601,29 @@
case FORMAT_R5G6B5:
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8I:
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_G8R8:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
- case FORMAT_L16:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
case FORMAT_R16I:
case FORMAT_R16UI:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_A8:
case FORMAT_R8:
- case FORMAT_L8:
- case FORMAT_A8L8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
case FORMAT_YV12_BT601:
case FORMAT_YV12_BT709:
case FORMAT_YV12_JFIF:
@@ -2875,8 +2632,6 @@
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
return true;
@@ -2898,61 +2653,35 @@
case FORMAT_R5G6B5:
case FORMAT_R8_SNORM:
case FORMAT_G8R8_SNORM:
- case FORMAT_X8B8G8R8_SNORM:
case FORMAT_A8B8G8R8_SNORM:
case FORMAT_R8I:
case FORMAT_R8UI:
case FORMAT_G8R8I:
case FORMAT_G8R8UI:
- case FORMAT_X8B8G8R8I:
- case FORMAT_X8B8G8R8UI:
case FORMAT_A8B8G8R8I:
case FORMAT_A8B8G8R8UI:
case FORMAT_R32I:
case FORMAT_R32UI:
case FORMAT_G32R32I:
case FORMAT_G32R32UI:
- case FORMAT_X32B32G32R32I:
- case FORMAT_X32B32G32R32UI:
case FORMAT_A32B32G32R32I:
case FORMAT_A32B32G32R32UI:
case FORMAT_G8R8:
- case FORMAT_X8R8G8B8:
- case FORMAT_X8B8G8R8:
case FORMAT_A8R8G8B8:
case FORMAT_A8B8G8R8:
- case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
- case FORMAT_V8U8:
- case FORMAT_Q8W8V8U8:
- case FORMAT_X8L8V8U8:
case FORMAT_R32F:
case FORMAT_G32R32F:
- case FORMAT_X32B32G32R32F:
case FORMAT_A32B32G32R32F:
- case FORMAT_X32B32G32R32F_UNSIGNED:
- case FORMAT_A8:
case FORMAT_R8:
- case FORMAT_L8:
- case FORMAT_A8L8:
- case FORMAT_D32F_LOCKABLE:
- case FORMAT_D32FS8_TEXTURE:
- case FORMAT_D32F_SHADOW:
- case FORMAT_D32FS8_SHADOW:
- case FORMAT_L16:
case FORMAT_G16R16:
case FORMAT_A16B16G16R16:
case FORMAT_R16I:
case FORMAT_R16UI:
case FORMAT_G16R16I:
case FORMAT_G16R16UI:
- case FORMAT_X16B16G16R16I:
- case FORMAT_X16B16G16R16UI:
case FORMAT_A16B16G16R16I:
case FORMAT_A16B16G16R16UI:
- case FORMAT_V16U16:
- case FORMAT_A16W16V16U16:
- case FORMAT_Q16W16V16U16:
return false;
default:
ASSERT(false);
@@ -2968,61 +2697,35 @@
case FORMAT_R5G6B5: return component < 3;
case FORMAT_R8_SNORM: return component < 1;
case FORMAT_G8R8_SNORM: return component < 2;
- case FORMAT_X8B8G8R8_SNORM: return component < 3;
case FORMAT_A8B8G8R8_SNORM: return component < 3;
case FORMAT_R8I: return component < 1;
case FORMAT_R8UI: return component < 1;
case FORMAT_G8R8I: return component < 2;
case FORMAT_G8R8UI: return component < 2;
- case FORMAT_X8B8G8R8I: return component < 3;
- case FORMAT_X8B8G8R8UI: return component < 3;
case FORMAT_A8B8G8R8I: return component < 3;
case FORMAT_A8B8G8R8UI: return component < 3;
case FORMAT_R32I: return component < 1;
case FORMAT_R32UI: return component < 1;
case FORMAT_G32R32I: return component < 2;
case FORMAT_G32R32UI: return component < 2;
- case FORMAT_X32B32G32R32I: return component < 3;
- case FORMAT_X32B32G32R32UI: return component < 3;
case FORMAT_A32B32G32R32I: return component < 3;
case FORMAT_A32B32G32R32UI: return component < 3;
case FORMAT_G8R8: return component < 2;
- case FORMAT_X8R8G8B8: return component < 3;
- case FORMAT_X8B8G8R8: return component < 3;
case FORMAT_A8R8G8B8: return component < 3;
case FORMAT_A8B8G8R8: return component < 3;
- case FORMAT_SRGB8_X8: return component < 3;
case FORMAT_SRGB8_A8: return component < 3;
- case FORMAT_V8U8: return false;
- case FORMAT_Q8W8V8U8: return false;
- case FORMAT_X8L8V8U8: return false;
case FORMAT_R32F: return component < 1;
case FORMAT_G32R32F: return component < 2;
- case FORMAT_X32B32G32R32F: return component < 3;
case FORMAT_A32B32G32R32F: return component < 3;
- case FORMAT_X32B32G32R32F_UNSIGNED: return component < 3;
- case FORMAT_A8: return false;
case FORMAT_R8: return component < 1;
- case FORMAT_L8: return component < 1;
- case FORMAT_A8L8: return component < 1;
- case FORMAT_D32F_LOCKABLE: return false;
- case FORMAT_D32FS8_TEXTURE: return false;
- case FORMAT_D32F_SHADOW: return false;
- case FORMAT_D32FS8_SHADOW: return false;
- case FORMAT_L16: return component < 1;
case FORMAT_G16R16: return component < 2;
case FORMAT_A16B16G16R16: return component < 3;
case FORMAT_R16I: return component < 1;
case FORMAT_R16UI: return component < 1;
case FORMAT_G16R16I: return component < 2;
case FORMAT_G16R16UI: return component < 2;
- case FORMAT_X16B16G16R16I: return component < 3;
- case FORMAT_X16B16G16R16UI: return component < 3;
case FORMAT_A16B16G16R16I: return component < 3;
case FORMAT_A16B16G16R16UI: return component < 3;
- case FORMAT_V16U16: return false;
- case FORMAT_A16W16V16U16: return false;
- case FORMAT_Q16W16V16U16: return false;
case FORMAT_YV12_BT601: return component < 3;
case FORMAT_YV12_BT709: return component < 3;
case FORMAT_YV12_JFIF: return component < 3;
diff --git a/src/WSI/FrameBuffer.cpp b/src/WSI/FrameBuffer.cpp
index 01838fe..772c0a0 100644
--- a/src/WSI/FrameBuffer.cpp
+++ b/src/WSI/FrameBuffer.cpp
@@ -40,7 +40,7 @@
this->width = width;
this->height = height;
- format = FORMAT_X8R8G8B8;
+ format = FORMAT_A8R8G8B8;
stride = 0;
windowed = !fullscreen || forceWindowed;
@@ -187,14 +187,12 @@
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 @@
d += 4 * dBytes;
}
break;
- case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
For(, x < width - 3, x += 4)
{
@@ -252,11 +249,9 @@
{
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 @@
}
}
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 @@
d += 4 * dBytes;
}
break;
- case FORMAT_X8R8G8B8:
case FORMAT_A8R8G8B8:
For(, x < width - 3, x += 4)
{
@@ -361,11 +352,9 @@
{
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 @@
}
}
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 @@
(c & 0x000000F8) >> 3);
}
break;
- case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
{
Int c = *Pointer<Int>(s);
@@ -543,11 +488,9 @@
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 @@
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 @@
*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)));
diff --git a/src/WSI/FrameBufferDD.cpp b/src/WSI/FrameBufferDD.cpp
index 9625a13..dcf1c9f 100644
--- a/src/WSI/FrameBufferDD.cpp
+++ b/src/WSI/FrameBufferDD.cpp
@@ -106,8 +106,7 @@
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 @@
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.");
}
}
diff --git a/src/WSI/FrameBufferGDI.cpp b/src/WSI/FrameBufferGDI.cpp
index 5c80bd7..e932eb4 100644
--- a/src/WSI/FrameBufferGDI.cpp
+++ b/src/WSI/FrameBufferGDI.cpp
@@ -37,7 +37,7 @@
init(this->windowHandle);
- format = FORMAT_X8R8G8B8;
+ format = FORMAT_A8R8G8B8;
}
FrameBufferGDI::~FrameBufferGDI()