Commit da980b40 by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Reduce ConvertVertex.comp variations

Handling RGB10A2 and A2BGR10 formats are made through dynamic flags. One or two `if` checks (based on format) is not worth doubling the number of shaders. Shaves about 50KB from binary size. Bug: angleproject:2022 Bug: chromium:1084580 Change-Id: Ia603a935b66d002dbacdee9342950ceed4042f86 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2240672Reviewed-by: 's avatarMohan Maiya <m.maiya@samsung.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent b50541b2
...@@ -98,39 +98,21 @@ ...@@ -98,39 +98,21 @@
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertIndirectLineLoop.comp.00000000.inc":
"0154cfcf4edffa97e5cb448ddb9ee751", "0154cfcf4edffa97e5cb448ddb9ee751",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000000.inc":
"af0530cb979c09eaa0429cd2cc3c07c1", "06d7e0e49c66697a887e6e997c7b66f2",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc":
"b1787aadbe1dd583f879217437fb8bf6", "b06c202cde710cbde4c2ce9b3b659807",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc":
"041be8e7206cfea4185dea0b060a32ba", "4efd26e3f54f45558e8f3950df252a49",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc":
"561879bae8657f102e5d6455bd775b08", "71a55876dee940d8eb871c268b26742e",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc":
"7b4cce634f71fc384b9ef6141664654b", "868e44bf61b71b57ac86a2d142515e82",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc":
"a12ce6cd2826de39a6ace67465d625f9", "22db76019a941880993a3866dadf2773",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc":
"bbfcc7acaa1ac9ec67c416e3bcc85941", "8f02adc196332849cdc647fb4a141fac",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc":
"ea1bd63850af7af552e313d639ea73ea", "2f0d4b187c69416a824e5696e69dbd2a",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc":
"640a6f2ef06313afd4fe802581c7f745",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000009.inc":
"a1a00a4ab554a8086def5d5272dc8ac4",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000A.inc":
"6d1ba3eb74cc7c2ecce6d9800217977e",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000B.inc":
"87c9935254349169f3f95ad29d7caf91",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000C.inc":
"b01cc5b181e9c6543f266cb3590b1ae9",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000D.inc":
"44e4ad32a582e5003e7adf5895499937",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000E.inc":
"18339c455b287743ecef67347a400f88",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000F.inc":
"ece8c9512c32b26bb41f5bc7de823fe7",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000010.inc":
"6889a240f3e405e58044a97f9f44a7bf",
"src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc":
"e0441970cbfcf27466f0f3f9c9bb4026", "e0441970cbfcf27466f0f3f9c9bb4026",
"src/libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc": "src/libANGLE/renderer/vulkan/shaders/gen/ImageClear.frag.00000000.inc":
...@@ -244,7 +226,7 @@ ...@@ -244,7 +226,7 @@
"src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp": "src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp":
"b7c20e019199f8328ef37b11c6fbcadd", "b7c20e019199f8328ef37b11c6fbcadd",
"src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/BufferUtils.comp.json":
"c2061fbbc76c3a7fba219dc0ddff9dbc", "289022611e8fe6742221ed371cbd6b36",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp":
"a46b48d7d5b19c74eb377f275525ab8d", "a46b48d7d5b19c74eb377f275525ab8d",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndex.comp.json":
...@@ -256,11 +238,11 @@ ...@@ -256,11 +238,11 @@
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp":
"c4fe0f463b41cd59bae33f9711e0b67b", "c4fe0f463b41cd59bae33f9711e0b67b",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp.json":
"c4b95a10b5716644491d4f0813ddab40", "c2c79c40b0fbcb4876637aa06e8aa919",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp": "src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp":
"e0967dcc25d76797864dd5c0ab9847ce", "f63e7c4f738c11f1a1b19023d4515dc4",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp.json":
"3e598e4436e7fc7fd0c7e0743a4f6bfc", "5186e223d98092a54dc3ce23677039c1",
"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":
...@@ -270,19 +252,19 @@ ...@@ -270,19 +252,19 @@
"src/libANGLE/renderer/vulkan/shaders/src/ImageCopy.frag": "src/libANGLE/renderer/vulkan/shaders/src/ImageCopy.frag":
"e62eb8ee0f264434330382cb2e050a52", "e62eb8ee0f264434330382cb2e050a52",
"src/libANGLE/renderer/vulkan/shaders/src/ImageCopy.frag.json": "src/libANGLE/renderer/vulkan/shaders/src/ImageCopy.frag.json":
"63dcb85bce5db02266efebf10eea6532", "4db849cdf6c706bd8dc827d31dffe04f",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp": "src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp":
"c89a0d185f7723e0c221c135aa4f48a3", "c89a0d185f7723e0c221c135aa4f48a3",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/OverlayCull.comp.json":
"2b979ccfefb35a592a7ef429abd04ba1", "61b78c5312d5f8472c229cd94372a1e5",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp": "src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp":
"dcc246b398b2e07a869a264666499362", "dcc246b398b2e07a869a264666499362",
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp.json": "src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp.json":
"9969ca4d2a848ee3aeb0bdd70043e862", "af79e5153c99cdb1e6b551b11bbf7f6b",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp":
"7a38442f63d6fb7b931390d3776cc964", "8738cfbd39304c3cc0c115409ceae966",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h": "src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h":
"3eea961399cc31bedac5128770d5175d", "0199bc9cb7d6bc414c95cf9715154f06",
"tools/glslang/glslang_validator.exe.sha1": "tools/glslang/glslang_validator.exe.sha1":
"8127ba41e0d354b516f6ce1188d3c145", "8127ba41e0d354b516f6ce1188d3c145",
"tools/glslang/glslang_validator.sha1": "tools/glslang/glslang_validator.sha1":
......
...@@ -74,18 +74,12 @@ uint32_t GetBufferUtilsFlags(size_t dispatchSize, const vk::Format &format) ...@@ -74,18 +74,12 @@ uint32_t GetBufferUtilsFlags(size_t dispatchSize, const vk::Format &format)
uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params) uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params)
{ {
bool srcIsSint = params.srcFormat->isSint(); bool srcIsSint = params.srcFormat->isSint();
bool srcIsUint = params.srcFormat->isUint(); bool srcIsUint = params.srcFormat->isUint();
bool srcIsSnorm = params.srcFormat->isSnorm(); bool srcIsSnorm = params.srcFormat->isSnorm();
bool srcIsUnorm = params.srcFormat->isUnorm(); bool srcIsUnorm = params.srcFormat->isUnorm();
bool srcIsFixed = params.srcFormat->isFixed; bool srcIsFixed = params.srcFormat->isFixed;
bool srcIsFloat = params.srcFormat->isFloat(); bool srcIsFloat = params.srcFormat->isFloat();
bool srcIsA2BGR10 =
params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt2101010 ||
params.srcFormat->vertexAttribType == gl::VertexAttribType::Int2101010;
bool srcIsRGB10A2 =
params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt1010102 ||
params.srcFormat->vertexAttribType == gl::VertexAttribType::Int1010102;
bool srcIsHalfFloat = params.srcFormat->isVertexTypeHalfFloat(); bool srcIsHalfFloat = params.srcFormat->isVertexTypeHalfFloat();
bool destIsSint = params.destFormat->isSint(); bool destIsSint = params.destFormat->isSint();
...@@ -113,57 +107,7 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params) ...@@ -113,57 +107,7 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params)
uint32_t flags = 0; uint32_t flags = 0;
if (srcIsA2BGR10) if (srcIsHalfFloat && destIsHalfFloat)
{
if (srcIsSint && destIsSint)
{
flags |= ConvertVertex_comp::kA2BGR10SintToSint;
}
else if (srcIsUint && destIsUint)
{
flags |= ConvertVertex_comp::kA2BGR10UintToUint;
}
else if (srcIsSint)
{
flags |= ConvertVertex_comp::kA2BGR10SintToFloat;
}
else if (srcIsUint)
{
flags |= ConvertVertex_comp::kA2BGR10UintToFloat;
}
else if (srcIsSnorm)
{
flags |= ConvertVertex_comp::kA2BGR10SnormToFloat;
}
else
{
UNREACHABLE();
}
}
else if (srcIsRGB10A2)
{
if (srcIsSint)
{
flags |= ConvertVertex_comp::kRGB10A2SintToFloat;
}
else if (srcIsUint)
{
flags |= ConvertVertex_comp::kRGB10A2UintToFloat;
}
else if (srcIsSnorm)
{
flags |= ConvertVertex_comp::kRGB10A2SnormToFloat;
}
else if (srcIsUnorm)
{
flags |= ConvertVertex_comp::kRGB10A2UnormToFloat;
}
else
{
UNREACHABLE();
}
}
else if (srcIsHalfFloat && destIsHalfFloat)
{ {
// Note that HalfFloat conversion uses the same shader as Uint. // Note that HalfFloat conversion uses the same shader as Uint.
flags |= ConvertVertex_comp::kUintToUint; flags |= ConvertVertex_comp::kUintToUint;
...@@ -1116,6 +1060,16 @@ angle::Result UtilsVk::convertVertexBuffer(ContextVk *contextVk, ...@@ -1116,6 +1060,16 @@ angle::Result UtilsVk::convertVertexBuffer(ContextVk *contextVk,
shaderParams.srcOffset = static_cast<uint32_t>(params.srcOffset); shaderParams.srcOffset = static_cast<uint32_t>(params.srcOffset);
shaderParams.destOffset = static_cast<uint32_t>(params.destOffset); shaderParams.destOffset = static_cast<uint32_t>(params.destOffset);
bool isSrcA2BGR10 =
params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt2101010 ||
params.srcFormat->vertexAttribType == gl::VertexAttribType::Int2101010;
bool isSrcRGB10A2 =
params.srcFormat->vertexAttribType == gl::VertexAttribType::UnsignedInt1010102 ||
params.srcFormat->vertexAttribType == gl::VertexAttribType::Int1010102;
shaderParams.isSrcHDR = isSrcA2BGR10 || isSrcRGB10A2;
shaderParams.isSrcA2BGR10 = isSrcA2BGR10;
uint32_t flags = GetConvertVertexFlags(params); uint32_t flags = GetConvertVertexFlags(params);
VkDescriptorSet descriptorSet; VkDescriptorSet descriptorSet;
......
...@@ -296,6 +296,9 @@ class UtilsVk : angle::NonCopyable ...@@ -296,6 +296,9 @@ class UtilsVk : angle::NonCopyable
uint32_t Bd = 0; uint32_t Bd = 0;
uint32_t Sd = 0; uint32_t Sd = 0;
uint32_t Ed = 0; uint32_t Ed = 0;
uint32_t isSrcHDR = 0;
uint32_t isSrcA2BGR10 = 0;
uint32_t _padding[2] = {};
}; };
struct ImageClearShaderParams struct ImageClearShaderParams
......
...@@ -19,4 +19,3 @@ ...@@ -19,4 +19,3 @@
"IsCopy" "IsCopy"
] ]
} }
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
"", "",
"ConvertArrayIndirectLineLoop.comp.json: Build parameters for ConvertArrayIndirectLineLoop.comp." "ConvertArrayIndirectLineLoop.comp.json: Build parameters for ConvertArrayIndirectLineLoop.comp."
], ],
"Flags": [ "Flags": [
] ]
} }
...@@ -46,55 +46,41 @@ ...@@ -46,55 +46,41 @@
// * UnormToFloat: Similar to UintToFloat, but normalized. // * UnormToFloat: Similar to UintToFloat, but normalized.
// * FixedToFloat: 16.16 signed fixed-point to floating point. // * FixedToFloat: 16.16 signed fixed-point to floating point.
// * FloatToFloat: float. // * FloatToFloat: float.
// * A2BGR10SintToSint: covers the signed int type of component when format is only A2BGR10.
// * A2BGR10UintToUint: covers the unsigned int type of component when format is only A2BGR10.
// * A2BGR10SintToFloat: Same types as A2BGR10SintToSint for source (including scaled).
// Converts to float.
// * A2BGR10UintToFloat: Same types as A2BGR10UintToUint for source (including uscaled).
// Converts to float.
// * A2BGR10SnormToFloat: Similar to IntToFloat, but normalized and only for A2BGR10.
// * RGB10A2SintToFloat: Same types as RGB10A2SintToSint for source (including scaled).
// Converts to float.
// * RGB10A2UintToFloat: Same types as RGB10A2UintToUint for source (including uscaled).
// Converts to float.
// * RGB10A2SnormToFloat: Similar to IntToFloat, but normalized and only for RGB10A2.
// * RGB10A2UnormToFloat: Similar to UintToFloat, but normalized and only for RGB10A2.
// //
// 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.
// Copy32FixedTo32FVertexData, SintToFloat and UintToFloat correspond to CopyTo32FVertexData with //
// normalized=false and SnormToFloat and UnormToFloat correspond to CopyTo32FVertexData with // FixedToFloat corresponds to Copy32FixedTo32FVertexData.
// normalized=true. A2BGR10SintToSint, A2BGR10UintToUint, A2BGR10SintToFloat, A2BGR10UintToFloat //
// and A2BGR10SnormToFloat correspond to CopyXYZ10W2ToXYZW32FVertexData with the proper options. // SintToFloat and UintToFloat correspond to CopyTo32FVertexData with normalized=false.
// RGB10A2SintToFloat, RGB10A2UintToFloat and RGB10A2SnormToFloat correspond to //
// CopyW2XYZ10ToXYZW32FVertexData. RGB10UintToFloat corresponds to CopyXYZ10ToXYZW32FVertexData // SnormToFloat and UnormToFloat correspond to CopyTo32FVertexData with normalized=true.
// with the proper options. //
// If isSrcHDR, SintToSint, UintToUint, SintToFloat, UintToFloat and SnormToFloat
// correspond to CopyXYZ10W2ToXYZW32FVertexData (if isSrcA2BGR10) or CopyW2XYZ10ToXYZW32FVertexData
// (if !isSrcA2BGR10) with the proper options.
#version 450 core #version 450 core
// Source type // Source type
#if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat #if SintToSint || SintToFloat
#define SrcType int #define SrcType int
#elif UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || \ #elif UintToUint || UintToFloat
RGB10A2UintToFloat
#define SrcType uint #define SrcType uint
#elif SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || A2BGR10SnormToFloat || \ #elif SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat
RGB10A2SnormToFloat || RGB10A2UnormToFloat
#define SrcType float #define SrcType float
#else #else
#error "Not all conversions are accounted for" #error "Not all conversions are accounted for"
#endif #endif
// Destination type // Destination type
#if SintToSint || A2BGR10SintToSint #if SintToSint
#define DestType int #define DestType int
#define IsDestFloat 0 #define IsDestFloat 0
#elif UintToUint || A2BGR10UintToUint #elif UintToUint
#define DestType uint #define DestType uint
#define IsDestFloat 0 #define IsDestFloat 0
#elif SintToFloat || UintToFloat || SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || \ #elif SintToFloat || UintToFloat || SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat
A2BGR10SintToFloat || A2BGR10UintToFloat || A2BGR10SnormToFloat || \
RGB10A2SintToFloat || RGB10A2UintToFloat || RGB10A2SnormToFloat || RGB10A2UnormToFloat
#define DestType float #define DestType float
#define IsDestFloat 1 #define IsDestFloat 1
#else #else
...@@ -138,6 +124,9 @@ layout (push_constant) uniform PushConstants ...@@ -138,6 +124,9 @@ layout (push_constant) uniform PushConstants
uint Bd; // Destination component byte size uint Bd; // Destination component byte size
uint Sd; // Precalculated Nd*Bd uint Sd; // Precalculated Nd*Bd
uint Ed; // Precalculated 4/Bd uint Ed; // Precalculated 4/Bd
bool isSrcHDR; // Whether source is either of A2BGR10 or RGB10A2
bool isSrcA2BGR10; // Whether source is A2BGR10
} params; } params;
// Define shorthands for more readable formulas: // Define shorthands for more readable formulas:
...@@ -221,36 +210,45 @@ SrcType loadSourceComponent(uint cd) ...@@ -221,36 +210,45 @@ SrcType loadSourceComponent(uint cd)
// Load the source component // Load the source component
uint offset = getSourceComponentOffset(vertex, component); uint offset = getSourceComponentOffset(vertex, component);
uint block = srcData[offset / 4]; uint block = srcData[offset / 4];
// A2B10G10R10's components are not byte-aligned, hardcoding values for efficiency.
#if A2BGR10SintToSint || A2BGR10UintToUint || A2BGR10SnormToFloat || A2BGR10SintToFloat || \ uint shiftBits;
A2BGR10UintToFloat uint valueBits;
uint valueBits = component == 3 ? 2 : 10; uint valueMask;
uint shiftBits = 10 * component;
uint valueMask = component == 3 ? 0x03 : 0x3FF; // A2B10G10R10's components are not byte-aligned, so they are especially handled.
#elif RGB10A2SintToFloat || RGB10A2UintToFloat || RGB10A2SnormToFloat || RGB10A2UnormToFloat if (params.isSrcHDR)
uint valueBits = component == 3 ? 2 : 10; {
// channel order is reversed valueBits = component == 3 ? 2 : 10;
uint shiftBits = component == 3 ? 0 : (valueBits * (2 - component) + 2); valueMask = component == 3 ? 0x03 : 0x3FF;
uint valueMask = component == 3 ? 0x03 : 0x3FF; if (params.isSrcA2BGR10)
#else {
uint shiftBits = getShiftBits(offset, Bs); shiftBits = 10 * component;
uint valueBits = Bs * 8; }
uint valueMask = valueBits == 32 ? -1 : (1 << valueBits) - 1; else
#endif {
// channel order is reversed
shiftBits = component == 3 ? 0 : (valueBits * (2 - component) + 2);
}
}
else
{
shiftBits = getShiftBits(offset, Bs);
valueBits = Bs * 8;
valueMask = valueBits == 32 ? -1 : (1 << valueBits) - 1;
}
uint valueAsUint; uint valueAsUint;
if (component >= Ns && component == 3) if (component >= Ns && component == 3)
{ {
// See GLES3.0 section 2.9.1 Transferring Array Elements // See GLES3.0 section 2.9.1 Transferring Array Elements
#if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat || \ #if SintToSint || SintToFloat || UintToUint || UintToFloat
UintToUint || UintToFloat || A2BGR10UintToUint || A2BGR10UintToFloat || RGB10A2UintToFloat
// For integers, alpha should take a value of 1. // For integers, alpha should take a value of 1.
valueAsUint = 1; valueAsUint = 1;
#elif SnormToFloat || A2BGR10SnormToFloat || RGB10A2SnormToFloat #elif SnormToFloat
// The largest signed number is 0b011...1 which is valueMask >> 1 // The largest signed number is 0b011...1 which is valueMask >> 1
valueAsUint = valueMask >> 1; valueAsUint = valueMask >> 1;
#elif UnormToFloat || RGB10A2UnormToFloat #elif UnormToFloat
// The largest unsigned number is 0b11...1 which is valueMask // The largest unsigned number is 0b11...1 which is valueMask
valueAsUint = valueMask; valueAsUint = valueMask;
#elif FixedToFloat #elif FixedToFloat
...@@ -268,7 +266,7 @@ SrcType loadSourceComponent(uint cd) ...@@ -268,7 +266,7 @@ SrcType loadSourceComponent(uint cd)
} }
// Convert to SrcType // Convert to SrcType
#if SintToSint || SintToFloat || A2BGR10SintToSint || A2BGR10SintToFloat || RGB10A2SintToFloat #if SintToSint || SintToFloat
if (valueBits < 32) if (valueBits < 32)
{ {
bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0; bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0;
...@@ -279,9 +277,9 @@ SrcType loadSourceComponent(uint cd) ...@@ -279,9 +277,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
SrcType value = valueAsUint; SrcType value = valueAsUint;
#elif SnormToFloat || A2BGR10SnormToFloat || RGB10A2SnormToFloat #elif SnormToFloat
if (valueBits < 32) if (valueBits < 32)
{ {
bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0; bool isNegative = (valueAsUint & (1 << (valueBits - 1))) != 0;
...@@ -291,7 +289,7 @@ SrcType loadSourceComponent(uint cd) ...@@ -291,7 +289,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 #elif UnormToFloat
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;
...@@ -319,7 +317,7 @@ uint makeDestinationComponent(uint cd, DestType value) ...@@ -319,7 +317,7 @@ uint makeDestinationComponent(uint cd, DestType value)
// Return valueAsUint, shifted to the right spot. Multiple calls to this function should be |ed // Return valueAsUint, shifted to the right spot. Multiple calls to this function should be |ed
// and eventually written to the destination. // and eventually written to the destination.
#if SintToSint || UintToUint || A2BGR10SintToSint || A2BGR10UintToUint #if SintToSint || UintToUint
uint vertex = cd / Nd; uint vertex = cd / Nd;
uint component = cd % Nd; uint component = cd % Nd;
......
...@@ -14,16 +14,6 @@ ...@@ -14,16 +14,6 @@
"SnormToFloat", "SnormToFloat",
"UnormToFloat", "UnormToFloat",
"FixedToFloat", "FixedToFloat",
"FloatToFloat", "FloatToFloat"
"A2BGR10SintToSint",
"A2BGR10UintToUint",
"A2BGR10SintToFloat",
"A2BGR10UintToFloat",
"A2BGR10SnormToFloat",
"RGB10A2SintToFloat",
"RGB10A2UintToFloat",
"RGB10A2SnormToFloat",
"RGB10A2UnormToFloat"
] ]
} }
...@@ -20,4 +20,3 @@ ...@@ -20,4 +20,3 @@
"DestIsUint" "DestIsUint"
] ]
} }
...@@ -16,4 +16,3 @@ ...@@ -16,4 +16,3 @@
"SupportsNone" "SupportsNone"
] ]
} }
...@@ -11,4 +11,3 @@ ...@@ -11,4 +11,3 @@
"Is8x8" "Is8x8"
] ]
} }
...@@ -72,15 +72,6 @@ namespace ...@@ -72,15 +72,6 @@ namespace
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc" #include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000009.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000A.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000B.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000C.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.0000000D.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.00000010.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"
...@@ -212,15 +203,6 @@ constexpr ShaderBlob kConvertVertex_comp_shaders[] = { ...@@ -212,15 +203,6 @@ constexpr ShaderBlob kConvertVertex_comp_shaders[] = {
{kConvertVertex_comp_00000005, sizeof(kConvertVertex_comp_00000005)}, {kConvertVertex_comp_00000005, sizeof(kConvertVertex_comp_00000005)},
{kConvertVertex_comp_00000006, sizeof(kConvertVertex_comp_00000006)}, {kConvertVertex_comp_00000006, sizeof(kConvertVertex_comp_00000006)},
{kConvertVertex_comp_00000007, sizeof(kConvertVertex_comp_00000007)}, {kConvertVertex_comp_00000007, sizeof(kConvertVertex_comp_00000007)},
{kConvertVertex_comp_00000008, sizeof(kConvertVertex_comp_00000008)},
{kConvertVertex_comp_00000009, sizeof(kConvertVertex_comp_00000009)},
{kConvertVertex_comp_0000000A, sizeof(kConvertVertex_comp_0000000A)},
{kConvertVertex_comp_0000000B, sizeof(kConvertVertex_comp_0000000B)},
{kConvertVertex_comp_0000000C, sizeof(kConvertVertex_comp_0000000C)},
{kConvertVertex_comp_0000000D, sizeof(kConvertVertex_comp_0000000D)},
{kConvertVertex_comp_0000000E, sizeof(kConvertVertex_comp_0000000E)},
{kConvertVertex_comp_0000000F, sizeof(kConvertVertex_comp_0000000F)},
{kConvertVertex_comp_00000010, sizeof(kConvertVertex_comp_00000010)},
}; };
constexpr ShaderBlob kFullScreenQuad_vert_shaders[] = { constexpr ShaderBlob kFullScreenQuad_vert_shaders[] = {
{kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)}, {kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)},
......
...@@ -65,15 +65,6 @@ angle_vulkan_internal_shaders = [ ...@@ -65,15 +65,6 @@ angle_vulkan_internal_shaders = [
"shaders/gen/ConvertVertex.comp.00000005.inc", "shaders/gen/ConvertVertex.comp.00000005.inc",
"shaders/gen/ConvertVertex.comp.00000006.inc", "shaders/gen/ConvertVertex.comp.00000006.inc",
"shaders/gen/ConvertVertex.comp.00000007.inc", "shaders/gen/ConvertVertex.comp.00000007.inc",
"shaders/gen/ConvertVertex.comp.00000008.inc",
"shaders/gen/ConvertVertex.comp.00000009.inc",
"shaders/gen/ConvertVertex.comp.0000000A.inc",
"shaders/gen/ConvertVertex.comp.0000000B.inc",
"shaders/gen/ConvertVertex.comp.0000000C.inc",
"shaders/gen/ConvertVertex.comp.0000000D.inc",
"shaders/gen/ConvertVertex.comp.0000000E.inc",
"shaders/gen/ConvertVertex.comp.0000000F.inc",
"shaders/gen/ConvertVertex.comp.00000010.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",
......
...@@ -98,25 +98,16 @@ namespace ConvertVertex_comp ...@@ -98,25 +98,16 @@ namespace ConvertVertex_comp
{ {
enum Conversion enum Conversion
{ {
kSintToSint = 0x00000000, kSintToSint = 0x00000000,
kUintToUint = 0x00000001, kUintToUint = 0x00000001,
kSintToFloat = 0x00000002, kSintToFloat = 0x00000002,
kUintToFloat = 0x00000003, kUintToFloat = 0x00000003,
kSnormToFloat = 0x00000004, kSnormToFloat = 0x00000004,
kUnormToFloat = 0x00000005, kUnormToFloat = 0x00000005,
kFixedToFloat = 0x00000006, kFixedToFloat = 0x00000006,
kFloatToFloat = 0x00000007, kFloatToFloat = 0x00000007,
kA2BGR10SintToSint = 0x00000008,
kA2BGR10UintToUint = 0x00000009,
kA2BGR10SintToFloat = 0x0000000A,
kA2BGR10UintToFloat = 0x0000000B,
kA2BGR10SnormToFloat = 0x0000000C,
kRGB10A2SintToFloat = 0x0000000D,
kRGB10A2UintToFloat = 0x0000000E,
kRGB10A2SnormToFloat = 0x0000000F,
kRGB10A2UnormToFloat = 0x00000010,
}; };
constexpr size_t kArrayLen = 0x00000011; constexpr size_t kArrayLen = 0x00000008;
} // 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