Commit 0273ea3f by Shahbaz Youssefi Committed by Commit Bot

Vulkan: Use RGBA16_FLOAT for buffer format fallback

... instead of RGBA32_FLOAT. VK_FORMAT_R16G16B16A16_SFLOAT has mandatory support for vertex buffers. Bug: b/184163871 Change-Id: I7ef2933cd15e46bb984e6fd1b020d2ec15b9c60e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2807780 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarIan Elliott <ianelliott@google.com> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent b17a9317
......@@ -4,7 +4,7 @@
"src/libANGLE/renderer/Format_table_autogen.cpp":
"969f821f7241fbc3df16864daeafa68e",
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/angle_format_data.json":
"4b3b5d4beef95c282ba4f20fdc2b20ed",
"src/libANGLE/renderer/angle_format_map.json":
......
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/gen_load_functions_table.py":
"bbc2f2cbce34313d7c06a3511eff5a1f",
"src/libANGLE/renderer/load_functions_data.json":
......
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/d3d/d3d11/gen_texture_format_table.py":
"8ad208de51aafef78452ae7f6cf8b340",
"src/libANGLE/renderer/d3d/d3d11/texture_format_data.json":
......
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/angle_format_map.json":
"46b589fc0fc306b2f7c97ee7bb08baee",
"src/libANGLE/renderer/dxgi_format_data.json":
......
......@@ -6,5 +6,5 @@
"src/libANGLE/gen_copy_conversion_table.py":
"52b879061499e456a3469da3d452f6c5",
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c"
"e5ac2fcfbc930ac2e3f3d54effeafed9"
}
\ No newline at end of file
......@@ -8,5 +8,5 @@
"src/libANGLE/gen_format_map.py":
"4062c6247b9c81ab3e8e6422fbd55349",
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c"
"e5ac2fcfbc930ac2e3f3d54effeafed9"
}
\ No newline at end of file
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/angle_format_map.json":
"46b589fc0fc306b2f7c97ee7bb08baee",
"src/libANGLE/renderer/gen_angle_format_table.py":
......@@ -24,7 +24,7 @@
"src/libANGLE/renderer/metal/shaders/gen_mtl_internal_shaders.py":
"af7a98ffaa3f3885b1e3cc7160c8549b",
"src/libANGLE/renderer/metal/shaders/mtl_default_shaders_src_autogen.inc":
"47961cdeb7bed0367b74d2bf0f99a1c6",
"94260983944013d7b094aaab74f37a17",
"src/libANGLE/renderer/metal/shaders/visibility.metal":
"b82aa740cf4b0aed606aacef1024beea"
}
\ No newline at end of file
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/angle_format_map.json":
"46b589fc0fc306b2f7c97ee7bb08baee",
"src/libANGLE/renderer/metal/gen_mtl_format_table.py":
"ee0b5db245a6672b86b122426a16d395",
"50165403832b36233870f612e60530da",
"src/libANGLE/renderer/metal/mtl_format_map.json":
"848c1e2f6d76115e3d0499346b5684d5",
"src/libANGLE/renderer/metal/mtl_format_table_autogen.mm":
"7765df9be304bf08d1c1c510c7b171ac"
"1972cdd31eff1fddaa965e2027710fa0"
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
"scripts/gl.xml":
"2a73a58a7e26d8676a2c0af6d528cae6",
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/gl/DispatchTableGL_autogen.cpp":
"54a5c8b87d54114ee61a4c535931ea48",
"src/libANGLE/renderer/gl/DispatchTableGL_autogen.h":
......
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/angle_format_map.json":
"46b589fc0fc306b2f7c97ee7bb08baee",
"src/libANGLE/renderer/vulkan/gen_vk_format_table.py":
"0bc8a6deefd856387da0bccf3817dde7",
"bcd28f46d41727b93943129edfeda12d",
"src/libANGLE/renderer/vulkan/vk_format_map.json":
"5aa1df6574944082788c0dadccf4f136",
"3b4563c98576280cbe4bcb9af4aafdde",
"src/libANGLE/renderer/vulkan/vk_format_table_autogen.cpp":
"57594ef67cdb88f9940b786ba1bb04ac"
"c5e18754528e417628eb72186b8465ce"
}
\ No newline at end of file
......@@ -78,19 +78,17 @@
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000001.inc":
"858bfa39d98b609277d72a0e02a2f0ba",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000002.inc":
"362b1ae836678351d0632b87befa3dd0",
"3373498b3c5fcfdc8990f79be64ede79",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000003.inc":
"0e77edb045b64490a312a9a3c650b36b",
"cb850a123abdf8eb3019ec1b0a16c7f8",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000004.inc":
"535352811ea6f55a6673d1bfcb71f0cf",
"7c6d728712eb398b70ba1364bc41b0db",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000005.inc":
"42cf2a739179a016d5586c177dda82f7",
"07505469598a4af919473b29f47458c3",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000006.inc":
"23d8451e0453ec3c7334f474927b5213",
"394896c467e258e14ee90d6a01c6993a",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000007.inc":
"a9e306149eb75a0b3cc5df0fda37a59c",
"src/libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc":
"50f7e62c77fb7258de6133c1ae32ba04",
"2488e829762327084cce0825a65b826b",
"src/libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc":
"c12bc017be0826f1d9b9d7f25a2e3127",
"src/libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000000.inc":
......@@ -300,9 +298,9 @@
"src/libANGLE/renderer/vulkan/shaders/src/ConvertIndirectLineLoop.comp.json":
"c2c79c40b0fbcb4876637aa06e8aa919",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp":
"d656da7733a59771d91b0511643cf9f7",
"22e382bf289af71b22862bd7685ed613",
"src/libANGLE/renderer/vulkan/shaders/src/ConvertVertex.comp.json":
"f2abd98463e46c0af45e8a1a5e5af88f",
"e4a95aae7f216780946e7332d22aa74e",
"src/libANGLE/renderer/vulkan/shaders/src/FullScreenQuad.vert":
"fd6d015b20709364c90ff41fb687ed0f",
"src/libANGLE/renderer/vulkan/shaders/src/GenerateMipmap.comp":
......@@ -326,9 +324,9 @@
"src/libANGLE/renderer/vulkan/shaders/src/OverlayDraw.comp.json":
"af79e5153c99cdb1e6b551b11bbf7f6b",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.cpp":
"cb9819e35a326118b075b55b6a57ee3f",
"16b75d27a845f71dfc99ab8543ce3f9a",
"src/libANGLE/renderer/vulkan/vk_internal_shaders_autogen.h":
"8ccd01e9e29c88da308998a81030bf6b",
"3a56299974fc0519704bbc14a80f5e85",
"tools/glslang/glslang_validator.exe.sha1":
"17e862cc6f462fecbf50b24ed6544a27",
"tools/glslang/glslang_validator.sha1":
......
{
"src/libANGLE/renderer/angle_format.py":
"32ba71942c0fd00e6807104f1bb80a3c",
"e5ac2fcfbc930ac2e3f3d54effeafed9",
"src/libANGLE/renderer/vulkan/gen_vk_mandatory_format_support_table.py":
"3e2b8cd80373275e862bb7c8ba20a745",
"src/libANGLE/renderer/vulkan/vk_format_map.json":
"5aa1df6574944082788c0dadccf4f136",
"3b4563c98576280cbe4bcb9af4aafdde",
"src/libANGLE/renderer/vulkan/vk_mandatory_format_support_data.json":
"fa2bd54c1bb0ab2cf1d386061a4bc5c5",
"src/libANGLE/renderer/vulkan/vk_mandatory_format_support_table_autogen.cpp":
......
......@@ -252,9 +252,9 @@ def get_vertex_copy_function(src_format, dst_format):
is_signed = 'true' if 'SINT' in src_format or 'SNORM' in src_format or 'SSCALED' in src_format else 'false'
is_normal = 'true' if 'NORM' in src_format else 'false'
if 'A2' in src_format:
return 'CopyW2XYZ10ToXYZW32FVertexData<%s, %s>' % (is_signed, is_normal)
return 'CopyW2XYZ10ToXYZWFloatVertexData<%s, %s, true>' % (is_signed, is_normal)
else:
return 'CopyXYZ10ToXYZW32FVertexData<%s, %s>' % (is_signed, is_normal)
return 'CopyXYZ10ToXYZWFloatVertexData<%s, %s, true>' % (is_signed, is_normal)
if 'FIXED' in src_format:
assert 'FLOAT' in dst_format, (
......@@ -275,5 +275,6 @@ def get_vertex_copy_function(src_format, dst_format):
'get_vertex_copy_function: can only convert to float,' + ' not to ' + dst_format)
normalized = 'true' if 'NORM' in src_format else 'false'
return "CopyTo32FVertexData<%s, %d, %d, %s>" % (src_gl_type, num_channel, num_channel,
normalized)
dst_is_half = 'true' if dst_gl_type == 'GLhalf' else 'false'
return "CopyToFloatVertexData<%s, %d, %d, %s, %s>" % (src_gl_type, num_channel, num_channel,
normalized, dst_is_half)
......@@ -41,8 +41,12 @@ void Copy8SnormTo16SnormVertexData(const uint8_t *input,
template <size_t inputComponentCount, size_t outputComponentCount>
void Copy32FixedTo32FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output);
template <typename T, size_t inputComponentCount, size_t outputComponentCount, bool normalized>
void CopyTo32FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output);
template <typename T,
size_t inputComponentCount,
size_t outputComponentCount,
bool normalized,
bool toHalf>
void CopyToFloatVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output);
template <size_t inputComponentCount, size_t outputComponentCount>
void Copy32FTo16FVertexData(const uint8_t *input, size_t stride, size_t count, uint8_t *output);
......@@ -51,24 +55,24 @@ void CopyXYZ32FToXYZ9E5(const uint8_t *input, size_t stride, size_t count, uint8
void CopyXYZ32FToX11Y11B10F(const uint8_t *input, size_t stride, size_t count, uint8_t *output);
template <bool isSigned, bool normalized, bool toFloat>
void CopyXYZ10W2ToXYZW32FVertexData(const uint8_t *input,
size_t stride,
size_t count,
uint8_t *output);
template <bool isSigned, bool normalized>
void CopyXYZ10ToXYZW32FVertexData(const uint8_t *input,
size_t stride,
size_t count,
uint8_t *output);
template <bool isSigned, bool normalized, bool toFloat, bool toHalf>
void CopyXYZ10W2ToXYZWFloatVertexData(const uint8_t *input,
size_t stride,
size_t count,
uint8_t *output);
template <bool isSigned, bool normalized>
void CopyW2XYZ10ToXYZW32FVertexData(const uint8_t *input,
template <bool isSigned, bool normalized, bool toHalf>
void CopyXYZ10ToXYZWFloatVertexData(const uint8_t *input,
size_t stride,
size_t count,
uint8_t *output);
template <bool isSigned, bool normalized, bool toHalf>
void CopyW2XYZ10ToXYZWFloatVertexData(const uint8_t *input,
size_t stride,
size_t count,
uint8_t *output);
} // namespace rx
#include "copyvertex.inc.h"
......
......@@ -322,26 +322,30 @@ const VertexFormat *GetVertexFormatInfo_FL_9_3(angle::FormatID vertexFormatID)
// GL_UNSIGNED_SHORT -- un-normalized
case angle::FormatID::R16_USCALED:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyTo32FVertexData<GLushort, 1, 2, false>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyToFloatVertexData<GLushort, 1, 2, false, false>);
return &info;
}
case angle::FormatID::R16G16_USCALED:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyTo32FVertexData<GLushort, 2, 2, false>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyToFloatVertexData<GLushort, 2, 2, false, false>);
return &info;
}
case angle::FormatID::R16G16B16_USCALED:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
&CopyTo32FVertexData<GLushort, 3, 3, false>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
&CopyToFloatVertexData<GLushort, 3, 3, false, false>);
return &info;
}
case angle::FormatID::R16G16B16A16_USCALED:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyTo32FVertexData<GLushort, 4, 4, false>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyToFloatVertexData<GLushort, 4, 4, false, false>);
return &info;
}
......@@ -349,25 +353,25 @@ const VertexFormat *GetVertexFormatInfo_FL_9_3(angle::FormatID vertexFormatID)
case angle::FormatID::R16_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyTo32FVertexData<GLushort, 1, 2, true>);
&CopyToFloatVertexData<GLushort, 1, 2, true, false>);
return &info;
}
case angle::FormatID::R16G16_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyTo32FVertexData<GLushort, 2, 2, true>);
&CopyToFloatVertexData<GLushort, 2, 2, true, false>);
return &info;
}
case angle::FormatID::R16G16B16_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
&CopyTo32FVertexData<GLushort, 3, 3, true>);
&CopyToFloatVertexData<GLushort, 3, 3, true, false>);
return &info;
}
case angle::FormatID::R16G16B16A16_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyTo32FVertexData<GLushort, 4, 4, true>);
&CopyToFloatVertexData<GLushort, 4, 4, true, false>);
return &info;
}
......@@ -652,25 +656,25 @@ const VertexFormat &GetVertexFormatInfo(angle::FormatID vertexFormatID,
case angle::FormatID::R32_SNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
&CopyTo32FVertexData<GLint, 1, 1, true>);
&CopyToFloatVertexData<GLint, 1, 1, true, false>);
return info;
}
case angle::FormatID::R32G32_SNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyTo32FVertexData<GLint, 2, 2, true>);
&CopyToFloatVertexData<GLint, 2, 2, true, false>);
return info;
}
case angle::FormatID::R32G32B32_SNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
&CopyTo32FVertexData<GLint, 3, 3, true>);
&CopyToFloatVertexData<GLint, 3, 3, true, false>);
return info;
}
case angle::FormatID::R32G32B32A32_SNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyTo32FVertexData<GLint, 4, 4, true>);
&CopyToFloatVertexData<GLint, 4, 4, true, false>);
return info;
}
......@@ -704,25 +708,25 @@ const VertexFormat &GetVertexFormatInfo(angle::FormatID vertexFormatID,
case angle::FormatID::R32_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT,
&CopyTo32FVertexData<GLuint, 1, 1, true>);
&CopyToFloatVertexData<GLuint, 1, 1, true, false>);
return info;
}
case angle::FormatID::R32G32_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT,
&CopyTo32FVertexData<GLuint, 2, 2, true>);
&CopyToFloatVertexData<GLuint, 2, 2, true, false>);
return info;
}
case angle::FormatID::R32G32B32_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT,
&CopyTo32FVertexData<GLuint, 3, 3, true>);
&CopyToFloatVertexData<GLuint, 3, 3, true, false>);
return info;
}
case angle::FormatID::R32G32B32A32_UNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyTo32FVertexData<GLuint, 4, 4, true>);
&CopyToFloatVertexData<GLuint, 4, 4, true, false>);
return info;
}
......@@ -807,22 +811,25 @@ const VertexFormat &GetVertexFormatInfo(angle::FormatID vertexFormatID,
// GL_INT_2_10_10_10_REV
case angle::FormatID::R10G10B10A2_SSCALED:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyXYZ10W2ToXYZW32FVertexData<true, false, true>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyXYZ10W2ToXYZWFloatVertexData<true, false, true, false>);
return info;
}
case angle::FormatID::R10G10B10A2_SNORM:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyXYZ10W2ToXYZW32FVertexData<true, true, true>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyXYZ10W2ToXYZWFloatVertexData<true, true, true, false>);
return info;
}
// GL_UNSIGNED_INT_2_10_10_10_REV
case angle::FormatID::R10G10B10A2_USCALED:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyXYZ10W2ToXYZW32FVertexData<false, false, true>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT,
&CopyXYZ10W2ToXYZWFloatVertexData<false, false, true, false>);
return info;
}
case angle::FormatID::R10G10B10A2_UNORM:
......@@ -995,8 +1002,9 @@ const VertexFormat &GetVertexFormatInfo(angle::FormatID vertexFormatID,
// GL_INT_2_10_10_10_REV
case angle::FormatID::R10G10B10A2_SINT:
{
static constexpr VertexFormat info(VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT,
&CopyXYZ10W2ToXYZW32FVertexData<true, true, false>);
static constexpr VertexFormat info(
VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT,
&CopyXYZ10W2ToXYZWFloatVertexData<true, true, false, false>);
return info;
}
......
......@@ -205,7 +205,8 @@ def get_vertex_copy_function_and_default_alpha(src_format, dst_format):
' not to ' + dst_format)
is_signed = 'true' if 'SINT' in src_format or 'SNORM' in src_format or 'SSCALED' in src_format else 'false'
is_normal = 'true' if 'NORM' in src_format else 'false'
return 'CopyXYZ10W2ToXYZW32FVertexData<%s, %s, true>' % (is_signed, is_normal), 0, "false"
return 'CopyXYZ10W2ToXYZWFloatVertexData<%s, %s, true, false>' % (is_signed,
is_normal), 0, "false"
return angle_format_utils.get_vertex_copy_function(src_format, dst_format), 0, "false"
......@@ -287,8 +288,8 @@ def gen_image_map_switch_mac_case(angle_format, actual_angle_format_info, angle_
mtl_format_fallback=angle_to_mtl_map[actual_angle_format_fallback],
init_function_fallback=angle_format_utils.get_internal_format_initializer(
gl_format, actual_angle_format_fallback),
fallback_condition="metalDevice.depth24Stencil8PixelFormatSupported && \
!display->getFeatures().forceD24S8AsUnsupported.enabled")
fallback_condition=("metalDevice.depth24Stencil8PixelFormatSupported && " +
"!display->getFeatures().forceD24S8AsUnsupported.enabled"))
else:
# return ordinary block:
return image_format_assign_template1.format(
......
......@@ -14,7 +14,7 @@ static char gDefaultMetallibSrc[] = R"(
# 1 "temp_master_source.metal"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 367 "<built-in>" 3
# 384 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "temp_master_source.metal" 2
......
......@@ -115,10 +115,6 @@ uint32_t GetConvertVertexFlags(const UtilsVk::ConvertVertexParameters &params)
// Note that HalfFloat conversion uses the same shader as Uint.
flags = ConvertVertex_comp::kUintToUint;
}
else if (srcIsFloat && destIsHalfFloat)
{
flags = ConvertVertex_comp::kFloatToHalf;
}
else if (srcIsSint && destIsSint)
{
flags = ConvertVertex_comp::kSintToSint;
......@@ -1844,7 +1840,6 @@ angle::Result UtilsVk::convertVertexBuffer(ContextVk *contextVk,
shaderParams.srcEmulatedAlpha = 0x10000;
break;
case ConvertVertex_comp::kFloatToHalf:
case ConvertVertex_comp::kFloatToFloat:
ASSERT(ValidateFloatOneAsUint());
shaderParams.srcEmulatedAlpha = kFloatOneAsUint;
......
......@@ -147,7 +147,9 @@ def get_vertex_copy_function(src_format, dst_format, vk_format):
is_signed = 'false' if 'UINT' in src_format or 'UNORM' in src_format or 'USCALED' in src_format else 'true'
normalized = 'true' if 'NORM' in src_format else 'false'
to_float = 'false' if 'INT' in src_format else 'true'
return 'CopyXYZ10W2ToXYZW32FVertexData<%s, %s, %s>' % (is_signed, normalized, to_float)
to_half = to_float
return 'CopyXYZ10W2ToXYZWFloatVertexData<%s, %s, %s, %s>' % (is_signed, normalized,
to_float, to_half)
return angle_format.get_vertex_copy_function(src_format, dst_format)
......
......@@ -46,20 +46,22 @@
// * UnormToFloat: Similar to UintToFloat, but normalized.
// * FixedToFloat: 16.16 signed fixed-point to floating point.
// * FloatToFloat: float.
// * FloatToHalf: float to half-float
//
// SintToSint, UintToUint and FloatToFloat correspond to CopyNativeVertexData() and
// Copy8SintTo16SintVertexData() in renderer/copyvertex.inc.
// The *ToFloat conversions can convert to a half-precision float based on a parameter. When not
// converting to half:
//
// FixedToFloat corresponds to Copy32FixedTo32FVertexData.
// - SintToSint, UintToUint and FloatToFloat correspond to CopyNativeVertexData() and
// Copy8SintTo16SintVertexData() in renderer/copyvertex.inc.
//
// SintToFloat and UintToFloat correspond to CopyTo32FVertexData with normalized=false.
// - FixedToFloat corresponds to Copy32FixedTo32FVertexData.
//
// SnormToFloat and UnormToFloat correspond to CopyTo32FVertexData with normalized=true.
// - SintToFloat and UintToFloat correspond to CopyToFloatVertexData with normalized=false.
//
// If isSrcHDR, SintToSint, UintToUint, SintToFloat, UintToFloat and SnormToFloat
// correspond to CopyXYZ10W2ToXYZW32FVertexData (if isSrcA2BGR10) or CopyW2XYZ10ToXYZW32FVertexData
// (if !isSrcA2BGR10) with the proper options.
// - SnormToFloat and UnormToFloat correspond to CopyToFloatVertexData with normalized=true.
//
// - If isSrcHDR, SintToSint, UintToUint, SintToFloat, UintToFloat and SnormToFloat correspond to
// CopyXYZ10W2ToXYZWFloatVertexData (if isSrcA2BGR10) or CopyW2XYZ10ToXYZWFloatVertexData (if
// !isSrcA2BGR10) with the proper options.
#version 450 core
......@@ -68,7 +70,7 @@
#define SrcType int
#elif UintToUint || UintToFloat
#define SrcType uint
#elif SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat || FloatToHalf
#elif SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat
#define SrcType float
#else
#error "Not all conversions are accounted for"
......@@ -77,16 +79,10 @@
// Destination type
#if SintToSint
#define DestType int
#define IsDestFloat 0
#elif UintToUint
#define DestType uint
#define IsDestFloat 0
#elif SintToFloat || UintToFloat || SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat
#define DestType float
#define IsDestFloat 1
#elif FloatToHalf
#define DestType float
#define IsDestFloat 0
#else
#error "Not all conversions are accounted for"
#endif
......@@ -134,8 +130,8 @@ layout (push_constant) uniform PushConstants
// other data from source is.
uint srcEmulatedAlpha;
bool isSrcHDR; // Whether source is either of A2BGR10 or RGB10A2
bool isSrcA2BGR10; // Whether source is A2BGR10
bool isSrcHDR; // Whether source is either of A2BGR10 or RGB10A2
bool isSrcA2BGR10; // Whether source is A2BGR10
} params;
// Define shorthands for more readable formulas:
......@@ -144,8 +140,8 @@ layout (push_constant) uniform PushConstants
#define Nd params.Nd
#define Sd params.Sd
// With fixed-point and float types, Bs and Bd can only be 4, so they are hardcoded for more
// efficiency.
// With fixed-point and float types, Bs can only be 4, so it is hardcoded for more efficiency. The
// same is not true for Bd because it can be a half-float type.
#if FixedToFloat || FloatToFloat
#define Bs 4
#define Es 1
......@@ -154,13 +150,8 @@ layout (push_constant) uniform PushConstants
#define Es params.Es
#endif
#if IsDestFloat
#define Bd 4
#define Ed 1
#else
#define Bd params.Bd
#define Ed params.Ed
#endif
uint getSourceComponentOffset(uint vertex, uint component)
{
......@@ -288,7 +279,7 @@ SrcType loadSourceComponent(uint cd)
#elif FixedToFloat
float divisor = 1.0f / 65536.0f;
SrcType value = int(valueAsUint) * divisor;
#elif FloatToFloat || FloatToHalf
#elif FloatToFloat
SrcType value = uintBitsToFloat(valueAsUint);
#else
#error "Not all conversions are accounted for"
......@@ -320,14 +311,19 @@ uint makeDestinationComponent(uint cd, DestType value)
uint valueMask = valueBits == 32 ? -1 : (1 << valueBits) - 1;
uint valueAsUint = (uint(value) & valueMask) << shiftBits;
#elif FloatToHalf
uint shift = ((cd & 1) == 0) ? 0 : 16;
uint valueAsUint = packHalf2x16(vec2(value, 0.0)) << shift;
#elif IsDestFloat
// If the destination is float, it will occupy the whole result.
uint valueAsUint = floatBitsToInt(value);
#elif SintToFloat || UintToFloat || SnormToFloat || UnormToFloat || FixedToFloat || FloatToFloat
uint valueAsUint;
if (Bd == 2)
{
// It's a half-precision float.
uint shift = ((cd & 1) == 0) ? 0 : 16;
valueAsUint = packHalf2x16(vec2(value, 0.0)) << shift;
}
else
{
valueAsUint = floatBitsToInt(value);
}
#else
#error "Not all conversions are accounted for"
#endif
......
......@@ -18,7 +18,6 @@
[ "SnormToFloat", "-Od" ],
[ "UnormToFloat", "-Od" ],
[ "FixedToFloat", "-Od" ],
[ "FloatToFloat", "-Od" ],
[ "FloatToHalf", "-Od" ]
[ "FloatToFloat", "-Od" ]
]
}
......@@ -299,51 +299,51 @@
},
"A2R10G10B10_SINT_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"A2R10G10B10_UINT_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"A2R10G10B10_SSCALED_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"A2R10G10B10_USCALED_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"A2R10G10B10_SNORM_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"A2R10G10B10_UNORM_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"X2R10G10B10_SINT_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"X2R10G10B10_USCALED_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"X2R10G10B10_SSCALED_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"X2R10G10B10_UINT_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"X2R10G10B10_SNORM_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"X2R10G10B10_UNORM_VERTEX": {
"image": "NONE",
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"D32_FLOAT_S8X24_UINT": {
"image": ["D24_UNORM_S8_UINT", "D32_FLOAT_S8X24_UINT"]
......@@ -390,16 +390,16 @@
"buffer": "R32G32B32_FLOAT"
},
"R8G8B8A8_UNORM": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R8G8B8A8_SNORM": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R8G8B8A8_USCALED": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R8G8B8A8_SSCALED": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R16_UNORM": {
......@@ -445,10 +445,12 @@
"buffer": "R32G32B32A32_FLOAT"
},
"R16G16B16A16_USCALED": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R32G32B32A32_FLOAT",
"buffer_compressed": "R16G16B16A16_FLOAT"
},
"R16G16B16A16_SSCALED": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R32G32B32A32_FLOAT",
"buffer_compressed": "R16G16B16A16_FLOAT"
},
"R32G32B32_UINT": {
"image": "R32G32B32A32_UINT"
......@@ -511,13 +513,13 @@
"image": ["R16G16_SNORM", "R16G16_FLOAT"]
},
"R10G10B10A2_SNORM": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R10G10B10A2_USCALED": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R10G10B10A2_SSCALED": {
"buffer": "R32G32B32A32_FLOAT"
"buffer": "R16G16B16A16_FLOAT"
},
"R10G10B10A2_UINT": {
"buffer": "R16G16B16A16_UINT"
......
......@@ -63,7 +63,6 @@ namespace
#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.00000007.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/ConvertVertex.comp.00000008.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/FullScreenQuad.vert.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000000.inc"
#include "libANGLE/renderer/vulkan/shaders/gen/GenerateMipmap.comp.00000001.inc"
......@@ -224,7 +223,6 @@ constexpr CompressedShaderBlob kConvertVertex_comp_shaders[] = {
{kConvertVertex_comp_00000005, sizeof(kConvertVertex_comp_00000005)},
{kConvertVertex_comp_00000006, sizeof(kConvertVertex_comp_00000006)},
{kConvertVertex_comp_00000007, sizeof(kConvertVertex_comp_00000007)},
{kConvertVertex_comp_00000008, sizeof(kConvertVertex_comp_00000008)},
};
constexpr CompressedShaderBlob kFullScreenQuad_vert_shaders[] = {
{kFullScreenQuad_vert_00000000, sizeof(kFullScreenQuad_vert_00000000)},
......
......@@ -53,7 +53,6 @@ angle_vulkan_internal_shaders = [
"shaders/gen/ConvertVertex.comp.00000005.inc",
"shaders/gen/ConvertVertex.comp.00000006.inc",
"shaders/gen/ConvertVertex.comp.00000007.inc",
"shaders/gen/ConvertVertex.comp.00000008.inc",
"shaders/gen/FullScreenQuad.vert.00000000.inc",
"shaders/gen/GenerateMipmap.comp.00000000.inc",
"shaders/gen/GenerateMipmap.comp.00000001.inc",
......
......@@ -86,9 +86,8 @@ enum Conversion
kUnormToFloat = 0x00000005,
kFixedToFloat = 0x00000006,
kFloatToFloat = 0x00000007,
kFloatToHalf = 0x00000008,
};
constexpr size_t kArrayLen = 0x00000009;
constexpr size_t kArrayLen = 0x00000008;
} // namespace ConvertVertex_comp
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