Commit 82219d28 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: fix alpha values in convert vertex shader

When reading vertex attributes, GLES requires the y and z components to be filled with 0 if missing, and the alpha channel to be filled with 1.0 for float types and 1 for integer types. At the same time, this change reduces the number of variations in this shader. Bug: angleproject:3192 Change-Id: I1bdf491952c296962fa9160f2d29d415eb3d570d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1936708Reviewed-by: 's avatarJaedon Lee <jaedon1.lee@samsung.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent 5afd5ec6
...@@ -96,89 +96,39 @@ ...@@ -96,89 +96,39 @@
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc":
"523d3207d424614197ace9601ce56950", "523d3207d424614197ace9601ce56950",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc":
"f5ef892346ee10e5d0d9f8cba2a491b2", "021ad52cea91db420280e4406081e8f2",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc":
"59128c2f079f511d3945c974567385ac", "2d618000d8c839338a9faa3c800acbaf",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc":
"0867e61a34a642983b9a6b617def8497", "6f02318375b02ce2121cd409f9f0a1bc",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc":
"a566c782ee8ac336851db8b1f695dcca", "7d2128cc8962c0e0c4cb03c773ec03bb",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc":
"531a0b3b412bf252b7fa71eb92d8e3c6", "199e8d2f931aa43c3dff9aaa9ec26bcd",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc":
"e1e1fd5754cce8d5f6157972a8f650d1", "90c8f5720161febcdeea675c083d503b",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc":
"f6615e6c90eba9c92d1516b8d07e0b34", "dfb6b6e51f6bbb022f592a254ad067a2",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc":
"bb62a58562d954c5a0946c291c2afca2", "420785373b15743e3a29effe12ccdc4a",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc":
"5228214dc4d40eebed9b66806d604ef0", "b369a5a2e93b302eeddef0185c55ae02",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000009.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000009.inc":
"18cf63360b3030cb637dd1129bd04e6b", "9f8a2a28737b4cd354d62873c261e1b4",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000A.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000A.inc":
"61b2ac99ab77bea128bfe97dd34b4fa7", "ecc200fd8bd6f9054fe7fcd921bcb399",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000B.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000B.inc":
"42a2ba6a02b07e5e22912950e65a9841", "e20cba5aea8256f6fb9f287d22c6a188",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000C.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000C.inc":
"14d935497b4e3e511ed765dfbee0d1f7", "b17a1b7bfcf94e4e248abd18860c2a34",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000D.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000D.inc":
"f2b99ccc857d814498b67d0d39edbe44", "3c24f4f3309ce1dadd5802681ee8f680",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000E.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000E.inc":
"b66ede43a25847955caa42a9f681854d", "f19e58c8b9f1dac479d31f551a92e031",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000F.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000F.inc":
"0d9058cddfe4033353c476a4a9c5410b", "5a6a7d5cdfd96e45101cd6fe7dc20371",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000010.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000010.inc":
"11139111ebc5610e9f90f8900260b6c1", "6a4da57f0c84d217711b51eea99c061c",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000011.inc":
"ac8c255a9c59f2f197c00c615255fcd8",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000012.inc":
"1166c798f406767182b1f0245bfa967b",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000013.inc":
"bae7085d6d6915eb27e380b3caa93da6",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000014.inc":
"8dbe3e2af70babae7603a34ec9340451",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000015.inc":
"bce92a380a3ae9eae0268c147fdfd1ca",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000016.inc":
"38eee786134a82a8f3ecd3e9f9cb4fc0",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000017.inc":
"c9a4c3100ce405279425855655f1ef50",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000018.inc":
"5f2b521b8c31ecf08d2776c554c0c699",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000019.inc":
"4b364dc33cf595d2fa382b9321f48dbc",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001A.inc":
"ee4f06ba87a3dde490e01a0ec4561e10",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001B.inc":
"d2b62347cd2b80f885adfa31f6aeccc0",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001C.inc":
"92ea6760ba66b603fcbc1bebf207aa78",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001D.inc":
"72bbe32670195bcf4be9d1edd8152178",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001E.inc":
"e5131c8ba46eaf2674aad854eb3bc787",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001F.inc":
"45f2705df7389be715506e9c3e484d74",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000020.inc":
"d79651c76fdfefb0949ae18e006a6d22",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000021.inc":
"52d7d35300cbdc1825bb75445a4784ba",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000022.inc":
"3cb10ed1f526018215af300c40614fd7",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000023.inc":
"cf7d1cfe77021df82b8c2ff5ec97ac59",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000024.inc":
"44fd4a3c651d31fd783a42dfc0bde182",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000025.inc":
"25b270092f8e6a1bfeb3c6f5e441d792",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000026.inc":
"a77252550fef5aa63bb49faecb6de265",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000027.inc":
"1bac85ed8b670bbe4b68ffa4064bf31f",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000028.inc":
"d6cfcf49825f3da242d0f8935b0e30f6",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000029.inc":
"59e6c4a829283dc6db1664bb397ed6a2",
"src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc":
"235ca7c3979ce29a49c320d000ee7409", "235ca7c3979ce29a49c320d000ee7409",
"src/libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc":
...@@ -294,7 +244,7 @@ ...@@ -294,7 +244,7 @@
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp":
"c4fe0f463b41cd59bae33f9711e0b67b", "c4fe0f463b41cd59bae33f9711e0b67b",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp":
"d93560cac4f8877a928cfec712045462", "e0967dcc25d76797864dd5c0ab9847ce",
"src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert": "src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert":
"805ec8b2f87d4bd4242dc5b1c58ba3b4", "805ec8b2f87d4bd4242dc5b1c58ba3b4",
"src/libANGLE/renderer/vulkan/shaders/src/ImageClear.frag": "src/libANGLE/renderer/vulkan/shaders/src/ImageClear.frag":
...@@ -306,9 +256,9 @@ ...@@ -306,9 +256,9 @@
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp": "src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp":
"dcc246b398b2e07a869a264666499362", "dcc246b398b2e07a869a264666499362",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp":
"05c79365e12eb3c9f1f9252dba3e62e6", "7e0bc36d24abb773260a7bbd47b9d1d0",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h":
"5796f01116800b6ec062a2a66edbbf99", "350020dbc136ae8cc67455694ed13f31",
"tools/glslang/glslang_validator.exe.sha1": "tools/glslang/glslang_validator.exe.sha1":
"289f30598865a987a21b79ae525fc66f", "289f30598865a987a21b79ae525fc66f",
"tools/glslang/glslang_validator.sha1": "tools/glslang/glslang_validator.sha1":
......
...@@ -80,16 +80,11 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params) ...@@ -80,16 +80,11 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params)
bool srcIsFixed = params.srcFormat->isFixed; bool srcIsFixed = params.srcFormat->isFixed;
bool srcIsFloat = params.srcFormat->isFloat(); bool srcIsFloat = params.srcFormat->isFloat();
bool srcIsA2BGR10 = bool srcIsA2BGR10 =
((params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt2101010) || params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt2101010 ||
(params.srcFormat->vertexAttribType == gl::VertexAttribType::Int2101010)); params.srcFormat->vertexAttribType == gl::VertexAttribType::Int2101010;
bool srcIsRGB10A2 = bool srcIsRGB10A2 =
((params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt1010102) || params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt1010102 ||
params.srcFormat->vertexAttribType == gl::VertexAttribType::Int1010102) && params.srcFormat->vertexAttribType == gl::VertexAttribType::Int1010102;
params.srcFormat->alphaBits;
bool srcIsRGB10X2 =
((params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt1010102) ||
params.srcFormat->vertexAttribType == gl::VertexAttribType::Int1010102) &&
!params.srcFormat->alphaBits;
bool srcIsHalfFloat = params.srcFormat->isVertexTypeHalfFloat(); bool srcIsHalfFloat = params.srcFormat->isVertexTypeHalfFloat();
bool destIsSint = params.destFormat->isSint(); bool destIsSint = params.destFormat->isSint();
...@@ -169,29 +164,6 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params) ...@@ -169,29 +164,6 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params)
UNREACHABLE(); UNREACHABLE();
} }
} }
else if (srcIsRGB10X2)
{
if (srcIsSint)
{
flags |= ConvertVertex_comp::kRGB10X2SintToFloat;
}
else if (srcIsUint)
{
flags |= ConvertVertex_comp::kRGB10X2UintToFloat;
}
else if (srcIsSnorm)
{
flags |= ConvertVertex_comp::kRGB10X2SnormToFloat;
}
else if (srcIsUnorm)
{
flags |= ConvertVertex_comp::kRGB10X2UnormToFloat;
}
else
{
UNREACHABLE();
}
}
else if (srcIsHalfFloat && destIsHalfFloat) else if (srcIsHalfFloat && destIsHalfFloat)
{ {
// Note that HalfFloat conversion uses the same shader as Uint. // Note that HalfFloat conversion uses the same shader as Uint.
...@@ -1149,10 +1121,6 @@ angle::Result UtilsVk::convertVertexBuffer(ContextVk *contextVk, ...@@ -1149,10 +1121,6 @@ angle::Result UtilsVk::convertVertexBuffer(ContextVk *contextVk,
uint32_t flags = GetConvertVertexFlags(params); uint32_t flags = GetConvertVertexFlags(params);
bool isAligned =
shaderParams.outputCount % 64 == 0 && shaderParams.componentCount % shaderParams.Ed == 0;
flags |= isAligned ? ConvertVertex_comp::kIsAligned : 0;
VkDescriptorSet descriptorSet; VkDescriptorSet descriptorSet;
vk::RefCountedDescriptorPoolBinding descriptorPoolBinding; vk::RefCountedDescriptorPoolBinding descriptorPoolBinding;
ANGLE_TRY(allocateDescriptorSet(contextVk, Function::ConvertVertexBuffer, ANGLE_TRY(allocateDescriptorSet(contextVk, Function::ConvertVertexBuffer,
......
...@@ -36,8 +36,6 @@ ...@@ -36,8 +36,6 @@
// floor(c / Ns) * Ss + mod(c, Ns) * Bs // floor(c / Ns) * Ss + mod(c, Ns) * Bs
// //
// - Flags: // - Flags:
// * IsAligned: if true, assumes the workgroup size divides the output count, so there is no
// need for bound checking.
// * IsBigEndian // * IsBigEndian
// - Conversion: // - Conversion:
// * SintToSint: covers byte, short and int types (distinguished by Bs and Bd). // * SintToSint: covers byte, short and int types (distinguished by Bs and Bd).
...@@ -61,11 +59,6 @@ ...@@ -61,11 +59,6 @@
// Converts to float. // Converts to float.
// * RGB10A2SnormToFloat: Similar to IntToFloat, but normalized and only for RGB10A2. // * RGB10A2SnormToFloat: Similar to IntToFloat, but normalized and only for RGB10A2.
// * RGB10A2UnormToFloat: Similar to UintToFloat, but normalized and only for RGB10A2. // * RGB10A2UnormToFloat: Similar to UintToFloat, but normalized and only for RGB10A2.
// * RGB10X2SintToFloat: Same types as RGB10X2SintToSint for source (including scaled).
// Converts to float.
// * RGB10X2UintToFloat: Same types as RGB10X2UintToUint for source (including uscaled).
// Converts to float.
// * RGB10X2SnormToFloat: Similar to IntToFloat, but normalized and only for RGB10X2.
// //
// SintToSint, UintToUint and FloatToFloat correspond to CopyNativeVertexData() and // SintToSint, UintToUint and FloatToFloat correspond to CopyNativeVertexData() and
// Copy8SintTo16SintVertexData() in renderer/copyvertex.inc, FixedToFloat corresponds to // Copy8SintTo16SintVertexData() in renderer/copyvertex.inc, FixedToFloat corresponds to
...@@ -73,22 +66,20 @@ ...@@ -73,22 +66,20 @@
// normalized=false and SnormToFloat and UnormToFloat correspond to CopyTo32FVertexData with // normalized=false and SnormToFloat and UnormToFloat correspond to CopyTo32FVertexData with
// normalized=true. A2BGR10SintToSint, A2BGR10UintToUint, A2BGR10SintToFloat, A2BGR10UintToFloat // normalized=true. A2BGR10SintToSint, A2BGR10UintToUint, A2BGR10SintToFloat, A2BGR10UintToFloat
// and A2BGR10SnormToFloat correspond to CopyXYZ10W2ToXYZW32FVertexData with the proper options. // and A2BGR10SnormToFloat correspond to CopyXYZ10W2ToXYZW32FVertexData with the proper options.
// RGB10A2SintToFloat, RGB10A2UintToFloat, RGB10A2SnormToFloat, and RGB10X2UnormToFloat correspond // RGB10A2SintToFloat, RGB10A2UintToFloat and RGB10A2SnormToFloat correspond to
// to CopyW2XYZ10ToXYZW32FVertexData, and RGB10X2SintToFloat, RGB10UintToFloat, // CopyW2XYZ10ToXYZW32FVertexData. RGB10UintToFloat corresponds to CopyXYZ10ToXYZW32FVertexData
// RGB10X2SnormToFloat, and RGB10X2UnormToFloat correspond to CopyXYZ10ToXYZW32FVertexData with // with the proper options.
// the proper options.
#version 450 core #version 450 core
// Source type // Source type
#if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat || \ #if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat
RGB10X2SintToFloat
#define SrcType int #define SrcType int
#elif UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || \ #elif UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || \
RGB10A2UintToFloat || RGB10X2UintToFloat RGB10A2UintToFloat
#define SrcType uint #define SrcType uint
#elif SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || A2BGR10SnormToFloat || \ #elif SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || A2BGR10SnormToFloat || \
RGB10A2SnormToFloat || RGB10A2UnormToFloat || RGB10X2SnormToFloat || RGB10X2UnormToFloat RGB10A2SnormToFloat || RGB10A2UnormToFloat
#define SrcType float #define SrcType float
#else #else
#error "Not all conversions are accounted for" #error "Not all conversions are accounted for"
...@@ -103,8 +94,7 @@ ...@@ -103,8 +94,7 @@
#define IsDestFloat 0 #define IsDestFloat 0
#elif SintToFloat || UintToFloat || SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || \ #elif SintToFloat || UintToFloat || SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || \
A2BGR10SintToFloat || A2BGR10UintToFloat || A2BGR10SnormToFloat || \ A2BGR10SintToFloat || A2BGR10UintToFloat || A2BGR10SnormToFloat || \
RGB10A2SintToFloat || RGB10A2UintToFloat || RGB10A2SnormToFloat || RGB10A2UnormToFloat || \ RGB10A2SintToFloat || RGB10A2UintToFloat || RGB10A2SnormToFloat || RGB10A2UnormToFloat
RGB10X2SintToFloat || RGB10X2UintToFloat || RGB10X2SnormToFloat || RGB10X2UnormToFloat
#define DestType float #define DestType float
#define IsDestFloat 1 #define IsDestFloat 1
#else #else
...@@ -222,13 +212,11 @@ SrcType loadSourceComponent(uint cd) ...@@ -222,13 +212,11 @@ SrcType loadSourceComponent(uint cd)
uint component = cd % Nd; uint component = cd % Nd;
// Fill the alpha channel with 1.0f in case of the source format doesn't have an alpha channel // Fill the alpha channel with 1.0f in case of the source format doesn't have an alpha channel
// For all other components fill in 0 // For all other components fill in 0.
#if !(RGB10X2SintToFloat || RGB10X2UintToFloat || RGB10X2SnormToFloat || RGB10X2UnormToFloat) if (component >= Ns && component < 3)
if (component >= Ns)
{ {
return 0; return 0;
} }
#endif
// Load the source component // Load the source component
uint offset = getSourceComponentOffset(vertex, component); uint offset = getSourceComponentOffset(vertex, component);
...@@ -239,8 +227,7 @@ SrcType loadSourceComponent(uint cd) ...@@ -239,8 +227,7 @@ SrcType loadSourceComponent(uint cd)
uint valueBits = component == 3 ? 2 : 10; uint valueBits = component == 3 ? 2 : 10;
uint shiftBits = 10 * component; uint shiftBits = 10 * component;
uint valueMask = component == 3 ? 0x03 : 0x3FF; uint valueMask = component == 3 ? 0x03 : 0x3FF;
#elif RGB10A2SintToFloat || RGB10A2UintToFloat || RGB10A2SnormToFloat || RGB10A2UnormToFloat || \ #elif RGB10A2SintToFloat || RGB10A2UintToFloat || RGB10A2SnormToFloat || RGB10A2UnormToFloat
RGB10X2SintToFloat || RGB10X2UintToFloat || RGB10X2SnormToFloat || RGB10X2UnormToFloat
uint valueBits = component == 3 ? 2 : 10; uint valueBits = component == 3 ? 2 : 10;
// channel order is reversed // channel order is reversed
uint shiftBits = component == 3 ? 0 : (valueBits * (2 - component) + 2); uint shiftBits = component == 3 ? 0 : (valueBits * (2 - component) + 2);
...@@ -251,18 +238,37 @@ SrcType loadSourceComponent(uint cd) ...@@ -251,18 +238,37 @@ SrcType loadSourceComponent(uint cd)
uint valueMask = valueBits == 32 ? -1 : (1 << valueBits) - 1; uint valueMask = valueBits == 32 ? -1 : (1 << valueBits) - 1;
#endif #endif
// When alpha channel is dummy, fill it with 1.0f uint valueAsUint;
#if RGB10X2SintToFloat || RGB10X2UintToFloat || RGB10X2SnormToFloat
uint valueAsUint = component == 3 ? 0x01 : (block >> shiftBits) & valueMask; if (component >= Ns && component == 3)
#elif RGB10X2UnormToFloat {
uint valueAsUint = component == 3 ? 0x03 : (block >> shiftBits) & valueMask; // See GLES3.0 section 2.9.1 Transferring Array Elements
#if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat || \
UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || RGB10A2UintToFloat
// For integers, alpha should take a value of 1.
valueAsUint = 1;
#elif SnormToFloat || A2BGR10SnormToFloat || RGB10A2SnormToFloat
// The largest signed number is 0b011...1 which is valueMask >> 1
valueAsUint = valueMask >> 1;
#elif UnormToFloat || RGB10A2UnormToFloat
// The largest unsigned number is 0b11...1 which is valueMask
valueAsUint = valueMask;
#elif FixedToFloat
// 1.0 in fixed point is 0x10000
valueAsUint = 0x10000;
#elif FloatToFloat
valueAsUint = floatBitsToUint(1.0);
#else #else
uint valueAsUint = (block >> shiftBits) & valueMask; #error "Not all conversions are accounted for"
#endif #endif
}
else
{
valueAsUint = (block >> shiftBits) & valueMask;
}
// Convert to SrcType // Convert to SrcType
#if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat \ #if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat
|| RGB10X2SintToFloat
if (valueBits < 32) if (valueBits < 32)
{ {
bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0; bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0;
...@@ -273,10 +279,9 @@ SrcType loadSourceComponent(uint cd) ...@@ -273,10 +279,9 @@ SrcType loadSourceComponent(uint cd)
valueAsUint |= signExtension; valueAsUint |= signExtension;
} }
SrcType value = SrcType(valueAsUint); SrcType value = SrcType(valueAsUint);
#elif UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || RGB10A2UintToFloat \ #elif UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || RGB10A2UintToFloat
|| RGB10X2UintToFloat
SrcType value = valueAsUint; SrcType value = valueAsUint;
#elif SnormToFloat || A2BGR10SnormToFloat || RGB10A2SnormToFloat || RGB10X2SnormToFloat #elif SnormToFloat || A2BGR10SnormToFloat || RGB10A2SnormToFloat
if (valueBits < 32) if (valueBits < 32)
{ {
bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0; bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0;
...@@ -286,7 +291,7 @@ SrcType loadSourceComponent(uint cd) ...@@ -286,7 +291,7 @@ SrcType loadSourceComponent(uint cd)
int valueAsInt = int(valueAsUint); int valueAsInt = int(valueAsUint);
SrcType value = float(valueAsInt) / (valueMask >> 1); SrcType value = float(valueAsInt) / (valueMask >> 1);
value = max(value, float(-1)); value = max(value, float(-1));
#elif UnormToFloat || RGB10A2UnormToFloat || RGB10X2UnormToFloat #elif UnormToFloat || RGB10A2UnormToFloat
float positiveMax = valueMask; float positiveMax = valueMask;
// Scale [0, P] to [0, 1] // Scale [0, P] to [0, 1]
SrcType value = valueAsUint / positiveMax; SrcType value = valueAsUint / positiveMax;
...@@ -344,21 +349,17 @@ void storeDestinationComponents(uint valueAsUint) ...@@ -344,21 +349,17 @@ void storeDestinationComponents(uint valueAsUint)
void main() void main()
{ {
#if !IsAligned
if (gl_GlobalInvocationID.x >= params.outputCount) if (gl_GlobalInvocationID.x >= params.outputCount)
return; return;
#endif // IsAligned
uint valueOut = 0; uint valueOut = 0;
for (uint i = 0; i < Ed; ++i) for (uint i = 0; i < Ed; ++i)
{ {
uint cd = gl_GlobalInvocationID.x * Ed + i; uint cd = gl_GlobalInvocationID.x * Ed + i;
#if !IsAligned
if (cd >= params.componentCount) if (cd >= params.componentCount)
{ {
break; break;
} }
#endif
SrcType srcValue = loadSourceComponent(cd); SrcType srcValue = loadSourceComponent(cd);
DestType destValue = convertComponent(srcValue); DestType destValue = convertComponent(srcValue);
......
...@@ -6,9 +6,6 @@ ...@@ -6,9 +6,6 @@
"", "",
"ConvertVertex.comp.json: Build parameters for ConvertVertex.comp." "ConvertVertex.comp.json: Build parameters for ConvertVertex.comp."
], ],
"Flags": [
"IsAligned"
],
"Conversion": [ "Conversion": [
"SintToSint", "SintToSint",
"UintToUint", "UintToUint",
...@@ -26,11 +23,7 @@ ...@@ -26,11 +23,7 @@
"RGB10A2SintToFloat", "RGB10A2SintToFloat",
"RGB10A2UintToFloat", "RGB10A2UintToFloat",
"RGB10A2SnormToFloat", "RGB10A2SnormToFloat",
"RGB10A2UnormToFloat", "RGB10A2UnormToFloat"
"RGB10X2SintToFloat",
"RGB10X2UintToFloat",
"RGB10X2SnormToFloat",
"RGB10X2UnormToFloat"
] ]
} }
...@@ -80,31 +80,6 @@ namespace ...@@ -80,31 +80,6 @@ namespace
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000E.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000E.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000F.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000F.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000010.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000010.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000011.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000012.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000013.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000014.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000015.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000016.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000017.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000018.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000019.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001A.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001B.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001C.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001D.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001E.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000001F.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000020.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000021.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000022.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000023.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000024.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000025.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000026.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000027.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000028.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000029.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc" #include "libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000001.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000001.inc"
...@@ -243,31 +218,6 @@ constexpr ShaderBlob kConvertVertex_comp_shaders[] = { ...@@ -243,31 +218,6 @@ constexpr ShaderBlob kConvertVertex_comp_shaders[] = {
{kConvertVertex_comp_0000000E, sizeof(kConvertVertex_comp_0000000E)}, {kConvertVertex_comp_0000000E, sizeof(kConvertVertex_comp_0000000E)},
{kConvertVertex_comp_0000000F, sizeof(kConvertVertex_comp_0000000F)}, {kConvertVertex_comp_0000000F, sizeof(kConvertVertex_comp_0000000F)},
{kConvertVertex_comp_00000010, sizeof(kConvertVertex_comp_00000010)}, {kConvertVertex_comp_00000010, sizeof(kConvertVertex_comp_00000010)},
{kConvertVertex_comp_00000011, sizeof(kConvertVertex_comp_00000011)},
{kConvertVertex_comp_00000012, sizeof(kConvertVertex_comp_00000012)},
{kConvertVertex_comp_00000013, sizeof(kConvertVertex_comp_00000013)},
{kConvertVertex_comp_00000014, sizeof(kConvertVertex_comp_00000014)},
{kConvertVertex_comp_00000015, sizeof(kConvertVertex_comp_00000015)},
{kConvertVertex_comp_00000016, sizeof(kConvertVertex_comp_00000016)},
{kConvertVertex_comp_00000017, sizeof(kConvertVertex_comp_00000017)},
{kConvertVertex_comp_00000018, sizeof(kConvertVertex_comp_00000018)},
{kConvertVertex_comp_00000019, sizeof(kConvertVertex_comp_00000019)},
{kConvertVertex_comp_0000001A, sizeof(kConvertVertex_comp_0000001A)},
{kConvertVertex_comp_0000001B, sizeof(kConvertVertex_comp_0000001B)},
{kConvertVertex_comp_0000001C, sizeof(kConvertVertex_comp_0000001C)},
{kConvertVertex_comp_0000001D, sizeof(kConvertVertex_comp_0000001D)},
{kConvertVertex_comp_0000001E, sizeof(kConvertVertex_comp_0000001E)},
{kConvertVertex_comp_0000001F, sizeof(kConvertVertex_comp_0000001F)},
{kConvertVertex_comp_00000020, sizeof(kConvertVertex_comp_00000020)},
{kConvertVertex_comp_00000021, sizeof(kConvertVertex_comp_00000021)},
{kConvertVertex_comp_00000022, sizeof(kConvertVertex_comp_00000022)},
{kConvertVertex_comp_00000023, sizeof(kConvertVertex_comp_00000023)},
{kConvertVertex_comp_00000024, sizeof(kConvertVertex_comp_00000024)},
{kConvertVertex_comp_00000025, sizeof(kConvertVertex_comp_00000025)},
{kConvertVertex_comp_00000026, sizeof(kConvertVertex_comp_00000026)},
{kConvertVertex_comp_00000027, sizeof(kConvertVertex_comp_00000027)},
{kConvertVertex_comp_00000028, sizeof(kConvertVertex_comp_00000028)},
{kConvertVertex_comp_00000029, sizeof(kConvertVertex_comp_00000029)},
}; };
constexpr ShaderBlob kFullScreenQuad_vert_shaders[] = { constexpr ShaderBlob kFullScreenQuad_vert_shaders[] = {
{kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)}, {kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)},
......
...@@ -73,31 +73,6 @@ angle_vulkan_internal_shaders = [ ...@@ -73,31 +73,6 @@ angle_vulkan_internal_shaders = [
"shaders/gen/ConvertVertex.comp.0000000E.inc", "shaders/gen/ConvertVertex.comp.0000000E.inc",
"shaders/gen/ConvertVertex.comp.0000000F.inc", "shaders/gen/ConvertVertex.comp.0000000F.inc",
"shaders/gen/ConvertVertex.comp.00000010.inc", "shaders/gen/ConvertVertex.comp.00000010.inc",
"shaders/gen/ConvertVertex.comp.00000011.inc",
"shaders/gen/ConvertVertex.comp.00000012.inc",
"shaders/gen/ConvertVertex.comp.00000013.inc",
"shaders/gen/ConvertVertex.comp.00000014.inc",
"shaders/gen/ConvertVertex.comp.00000015.inc",
"shaders/gen/ConvertVertex.comp.00000016.inc",
"shaders/gen/ConvertVertex.comp.00000017.inc",
"shaders/gen/ConvertVertex.comp.00000018.inc",
"shaders/gen/ConvertVertex.comp.00000019.inc",
"shaders/gen/ConvertVertex.comp.0000001A.inc",
"shaders/gen/ConvertVertex.comp.0000001B.inc",
"shaders/gen/ConvertVertex.comp.0000001C.inc",
"shaders/gen/ConvertVertex.comp.0000001D.inc",
"shaders/gen/ConvertVertex.comp.0000001E.inc",
"shaders/gen/ConvertVertex.comp.0000001F.inc",
"shaders/gen/ConvertVertex.comp.00000020.inc",
"shaders/gen/ConvertVertex.comp.00000021.inc",
"shaders/gen/ConvertVertex.comp.00000022.inc",
"shaders/gen/ConvertVertex.comp.00000023.inc",
"shaders/gen/ConvertVertex.comp.00000024.inc",
"shaders/gen/ConvertVertex.comp.00000025.inc",
"shaders/gen/ConvertVertex.comp.00000026.inc",
"shaders/gen/ConvertVertex.comp.00000027.inc",
"shaders/gen/ConvertVertex.comp.00000028.inc",
"shaders/gen/ConvertVertex.comp.00000029.inc",
"shaders/gen/FullScreenQuad.vert.00000000.inc", "shaders/gen/FullScreenQuad.vert.00000000.inc",
"shaders/gen/ImageClear.frag.00000000.inc", "shaders/gen/ImageClear.frag.00000000.inc",
"shaders/gen/ImageClear.frag.00000001.inc", "shaders/gen/ImageClear.frag.00000001.inc",
......
...@@ -94,35 +94,27 @@ constexpr size_t kArrayLen = 0x00000001; ...@@ -94,35 +94,27 @@ constexpr size_t kArrayLen = 0x00000001;
namespace ConvertVertex_comp namespace ConvertVertex_comp
{ {
enum flags
{
kIsAligned = 0x00000001,
};
enum Conversion enum Conversion
{ {
kSintToSint = 0x00000000, kSintToSint = 0x00000000,
kUintToUint = 0x00000002, kUintToUint = 0x00000001,
kSintToFloat = 0x00000004, kSintToFloat = 0x00000002,
kUintToFloat = 0x00000006, kUintToFloat = 0x00000003,
kSnormToFloat = 0x00000008, kSnormToFloat = 0x00000004,
kUnormToFloat = 0x0000000A, kUnormToFloat = 0x00000005,
kFixedToFloat = 0x0000000C, kFixedToFloat = 0x00000006,
kFloatToFloat = 0x0000000E, kFloatToFloat = 0x00000007,
kA2BGR10SintToSint = 0x00000010, kA2BGR10SintToSint = 0x00000008,
kA2BGR10UintToUint = 0x00000012, kA2BGR10UintToUint = 0x00000009,
kA2BGR10SintToFloat = 0x00000014, kA2BGR10SintToFloat = 0x0000000A,
kA2BGR10UintToFloat = 0x00000016, kA2BGR10UintToFloat = 0x0000000B,
kA2BGR10SnormToFloat = 0x00000018, kA2BGR10SnormToFloat = 0x0000000C,
kRGB10A2SintToFloat = 0x0000001A, kRGB10A2SintToFloat = 0x0000000D,
kRGB10A2UintToFloat = 0x0000001C, kRGB10A2UintToFloat = 0x0000000E,
kRGB10A2SnormToFloat = 0x0000001E, kRGB10A2SnormToFloat = 0x0000000F,
kRGB10A2UnormToFloat = 0x00000020, kRGB10A2UnormToFloat = 0x00000010,
kRGB10X2SintToFloat = 0x00000022,
kRGB10X2UintToFloat = 0x00000024,
kRGB10X2SnormToFloat = 0x00000026,
kRGB10X2UnormToFloat = 0x00000028,
}; };
constexpr size_t kArrayLen = 0x0000002A; constexpr size_t kArrayLen = 0x00000011;
} // namespace ConvertVertex_comp } // namespace ConvertVertex_comp
namespace FullScreenQuad_vert namespace FullScreenQuad_vert
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment