spirv-reader: handle tests: make valid SPIR-V, part 2
Bug: tint:765 Change-Id: Ide499367637c460ebc1083da1de90b47ece21280 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/50445 Commit-Queue: David Neto <dneto@google.com> Reviewed-by: Alan Baker <alanbaker@google.com>
This commit is contained in:
parent
65a60c5c31
commit
716299075a
|
@ -12,6 +12,8 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
#include "gmock/gmock.h"
|
#include "gmock/gmock.h"
|
||||||
#include "src/reader/spirv/function.h"
|
#include "src/reader/spirv/function.h"
|
||||||
#include "src/reader/spirv/parser_impl_test_helper.h"
|
#include "src/reader/spirv/parser_impl_test_helper.h"
|
||||||
|
@ -232,6 +234,16 @@ std::string CommonTypes() {
|
||||||
return CommonBasicTypes() + CommonImageTypes();
|
return CommonBasicTypes() + CommonImageTypes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Bindings(std::vector<uint32_t> ids) {
|
||||||
|
std::ostringstream os;
|
||||||
|
int binding = 0;
|
||||||
|
for (auto id : ids) {
|
||||||
|
os << " OpDecorate %" << id << " DescriptorSet 0\n"
|
||||||
|
<< " OpDecorate %" << id << " Binding " << binding++ << "\n";
|
||||||
|
}
|
||||||
|
return os.str();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest,
|
TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_WellFormedButNotAHandle) {
|
GetMemoryObjectDeclarationForHandle_WellFormedButNotAHandle) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
||||||
|
@ -250,7 +262,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest,
|
TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_Direct) {
|
GetMemoryObjectDeclarationForHandle_Variable_Direct) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
%10 = OpVariable %ptr_sampler UniformConstant
|
%10 = OpVariable %ptr_sampler UniformConstant
|
||||||
%20 = OpVariable %ptr_f_texture_1d UniformConstant
|
%20 = OpVariable %ptr_f_texture_1d UniformConstant
|
||||||
)" + MainBody();
|
)" + MainBody();
|
||||||
|
@ -271,7 +284,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_AccessChain) {
|
GetMemoryObjectDeclarationForHandle_Variable_AccessChain) {
|
||||||
// Show that we would generalize to arrays of handles, even though that
|
// Show that we would generalize to arrays of handles, even though that
|
||||||
// is not supported in WGSL MVP.
|
// is not supported in WGSL MVP.
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
|
|
||||||
%sampler_array = OpTypeArray %sampler %uint_100
|
%sampler_array = OpTypeArray %sampler %uint_100
|
||||||
%image_array = OpTypeArray %f_texture_1d %uint_100
|
%image_array = OpTypeArray %f_texture_1d %uint_100
|
||||||
|
@ -306,7 +320,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest,
|
TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_InBoundsAccessChain) {
|
GetMemoryObjectDeclarationForHandle_Variable_InBoundsAccessChain) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
|
|
||||||
%sampler_array = OpTypeArray %sampler %uint_100
|
%sampler_array = OpTypeArray %sampler %uint_100
|
||||||
%image_array = OpTypeArray %f_texture_1d %uint_100
|
%image_array = OpTypeArray %f_texture_1d %uint_100
|
||||||
|
@ -343,7 +358,9 @@ TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_PtrAccessChain) {
|
GetMemoryObjectDeclarationForHandle_Variable_PtrAccessChain) {
|
||||||
// Show that we would generalize to arrays of handles, even though that
|
// Show that we would generalize to arrays of handles, even though that
|
||||||
// is not supported in WGSL MVP.
|
// is not supported in WGSL MVP.
|
||||||
const auto assembly = Preamble() + CommonTypes() + R"(
|
// Use VariablePointers for the OpInBoundsPtrAccessChain.
|
||||||
|
const auto assembly = "OpCapability VariablePointers " + Preamble() +
|
||||||
|
FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
|
|
||||||
%sampler_array = OpTypeArray %sampler %uint_100
|
%sampler_array = OpTypeArray %sampler %uint_100
|
||||||
%image_array = OpTypeArray %f_texture_1d %uint_100
|
%image_array = OpTypeArray %f_texture_1d %uint_100
|
||||||
|
@ -378,7 +395,9 @@ TEST_F(SpvParserHandleTest,
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest,
|
TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_InBoundsPtrAccessChain) {
|
GetMemoryObjectDeclarationForHandle_Variable_InBoundsPtrAccessChain) {
|
||||||
const auto assembly = Preamble() + CommonTypes() + R"(
|
// Use VariablePointers for the OpInBoundsPtrAccessChain.
|
||||||
|
const auto assembly = "OpCapability VariablePointers " + Preamble() +
|
||||||
|
FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
|
|
||||||
%sampler_array = OpTypeArray %sampler %uint_100
|
%sampler_array = OpTypeArray %sampler %uint_100
|
||||||
%image_array = OpTypeArray %f_texture_1d %uint_100
|
%image_array = OpTypeArray %f_texture_1d %uint_100
|
||||||
|
@ -413,7 +432,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest,
|
TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_CopyObject) {
|
GetMemoryObjectDeclarationForHandle_Variable_CopyObject) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
|
|
||||||
%10 = OpVariable %ptr_sampler UniformConstant
|
%10 = OpVariable %ptr_sampler UniformConstant
|
||||||
%20 = OpVariable %ptr_f_texture_1d UniformConstant
|
%20 = OpVariable %ptr_f_texture_1d UniformConstant
|
||||||
|
@ -441,7 +461,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest, GetMemoryObjectDeclarationForHandle_Variable_Load) {
|
TEST_F(SpvParserHandleTest, GetMemoryObjectDeclarationForHandle_Variable_Load) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
|
|
||||||
%10 = OpVariable %ptr_sampler UniformConstant
|
%10 = OpVariable %ptr_sampler UniformConstant
|
||||||
%20 = OpVariable %ptr_f_texture_1d UniformConstant
|
%20 = OpVariable %ptr_f_texture_1d UniformConstant
|
||||||
|
@ -472,7 +493,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_SampledImage) {
|
GetMemoryObjectDeclarationForHandle_Variable_SampledImage) {
|
||||||
// Trace through the sampled image instruction, but in two different
|
// Trace through the sampled image instruction, but in two different
|
||||||
// directions.
|
// directions.
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
%sampled_image_type = OpTypeSampledImage %f_texture_1d
|
%sampled_image_type = OpTypeSampledImage %f_texture_1d
|
||||||
|
|
||||||
%10 = OpVariable %ptr_sampler UniformConstant
|
%10 = OpVariable %ptr_sampler UniformConstant
|
||||||
|
@ -503,7 +525,8 @@ TEST_F(SpvParserHandleTest,
|
||||||
|
|
||||||
TEST_F(SpvParserHandleTest,
|
TEST_F(SpvParserHandleTest,
|
||||||
GetMemoryObjectDeclarationForHandle_Variable_Image) {
|
GetMemoryObjectDeclarationForHandle_Variable_Image) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly =
|
||||||
|
Preamble() + FragMain() + Bindings({10, 20}) + CommonTypes() + R"(
|
||||||
%sampled_image_type = OpTypeSampledImage %f_texture_1d
|
%sampled_image_type = OpTypeSampledImage %f_texture_1d
|
||||||
|
|
||||||
%10 = OpVariable %ptr_sampler UniformConstant
|
%10 = OpVariable %ptr_sampler UniformConstant
|
||||||
|
@ -837,7 +860,8 @@ using SpvParserHandleTest_RegisterHandleUsage_SampledImage =
|
||||||
SpvParserTestBase<::testing::TestWithParam<UsageImageAccessCase>>;
|
SpvParserTestBase<::testing::TestWithParam<UsageImageAccessCase>>;
|
||||||
|
|
||||||
TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, Variable) {
|
TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, Variable) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly = Preamble() + FragMain() + Bindings({10, 20}) +
|
||||||
|
CommonTypes() + R"(
|
||||||
%si_ty = OpTypeSampledImage %f_texture_2d
|
%si_ty = OpTypeSampledImage %f_texture_2d
|
||||||
%coords = OpConstantNull %v2float
|
%coords = OpConstantNull %v2float
|
||||||
|
|
||||||
|
@ -867,7 +891,8 @@ TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, Variable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, FunctionParam) {
|
TEST_P(SpvParserHandleTest_RegisterHandleUsage_SampledImage, FunctionParam) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly = Preamble() + FragMain() + Bindings({10, 20}) +
|
||||||
|
CommonTypes() + R"(
|
||||||
%f_ty = OpTypeFunction %void %ptr_sampler %ptr_f_texture_2d
|
%f_ty = OpTypeFunction %void %ptr_sampler %ptr_f_texture_2d
|
||||||
%si_ty = OpTypeSampledImage %f_texture_2d
|
%si_ty = OpTypeSampledImage %f_texture_2d
|
||||||
%coords = OpConstantNull %v2float
|
%coords = OpConstantNull %v2float
|
||||||
|
@ -995,7 +1020,8 @@ using SpvParserHandleTest_RegisterHandleUsage_RawImage =
|
||||||
SpvParserTestBase<::testing::TestWithParam<UsageRawImageCase>>;
|
SpvParserTestBase<::testing::TestWithParam<UsageRawImageCase>>;
|
||||||
|
|
||||||
TEST_P(SpvParserHandleTest_RegisterHandleUsage_RawImage, Variable) {
|
TEST_P(SpvParserHandleTest_RegisterHandleUsage_RawImage, Variable) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly = Preamble() + FragMain() + Bindings({20}) +
|
||||||
|
CommonTypes() + R"(
|
||||||
%20 = OpVariable %ptr_)" +
|
%20 = OpVariable %ptr_)" +
|
||||||
GetParam().type + R"( UniformConstant
|
GetParam().type + R"( UniformConstant
|
||||||
|
|
||||||
|
@ -1021,7 +1047,8 @@ TEST_P(SpvParserHandleTest_RegisterHandleUsage_RawImage, Variable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(SpvParserHandleTest_RegisterHandleUsage_RawImage, FunctionParam) {
|
TEST_P(SpvParserHandleTest_RegisterHandleUsage_RawImage, FunctionParam) {
|
||||||
const auto assembly = Preamble() + FragMain() + CommonTypes() + R"(
|
const auto assembly = Preamble() + FragMain() + Bindings({20}) +
|
||||||
|
CommonTypes() + R"(
|
||||||
%f_ty = OpTypeFunction %void %ptr_)" +
|
%f_ty = OpTypeFunction %void %ptr_)" +
|
||||||
GetParam().type + R"(
|
GetParam().type + R"(
|
||||||
|
|
||||||
|
@ -5291,7 +5318,7 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
::testing::ValuesIn(std::vector<ImageCoordsCase>{
|
::testing::ValuesIn(std::vector<ImageCoordsCase>{
|
||||||
// Scalar cases
|
// Scalar cases
|
||||||
{"%float 1D 0 0 0 1 Unknown",
|
{"%float 1D 0 0 0 1 Unknown",
|
||||||
"%result = OpImageFetch %float %im %u1",
|
"%result = OpImageFetch %v4float %im %u1",
|
||||||
"",
|
"",
|
||||||
{R"(TypeConstructor[not set]{
|
{R"(TypeConstructor[not set]{
|
||||||
__i32
|
__i32
|
||||||
|
@ -5299,7 +5326,7 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
}
|
}
|
||||||
)"}},
|
)"}},
|
||||||
{"%float 1D 0 0 0 2 R32f",
|
{"%float 1D 0 0 0 2 R32f",
|
||||||
"%result = OpImageRead %float %im %u1",
|
"%result = OpImageRead %v4float %im %u1",
|
||||||
"",
|
"",
|
||||||
{R"(TypeConstructor[not set]{
|
{R"(TypeConstructor[not set]{
|
||||||
__i32
|
__i32
|
||||||
|
@ -5316,7 +5343,7 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
)"}},
|
)"}},
|
||||||
// Vector cases
|
// Vector cases
|
||||||
{"%float 2D 0 0 0 1 Unknown",
|
{"%float 2D 0 0 0 1 Unknown",
|
||||||
"%result = OpImageFetch %float %im %vu12",
|
"%result = OpImageFetch %v4float %im %vu12",
|
||||||
"",
|
"",
|
||||||
{R"(TypeConstructor[not set]{
|
{R"(TypeConstructor[not set]{
|
||||||
__vec_2__i32
|
__vec_2__i32
|
||||||
|
@ -5324,7 +5351,7 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
}
|
}
|
||||||
)"}},
|
)"}},
|
||||||
{"%float 2D 0 0 0 2 R32f",
|
{"%float 2D 0 0 0 2 R32f",
|
||||||
"%result = OpImageRead %float %im %vu12",
|
"%result = OpImageRead %v4float %im %vu12",
|
||||||
"",
|
"",
|
||||||
{R"(TypeConstructor[not set]{
|
{R"(TypeConstructor[not set]{
|
||||||
__vec_2__i32
|
__vec_2__i32
|
||||||
|
@ -5347,7 +5374,7 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
SpvParserHandleTest_ImageCoordsTest,
|
SpvParserHandleTest_ImageCoordsTest,
|
||||||
::testing::ValuesIn(std::vector<ImageCoordsCase>{
|
::testing::ValuesIn(std::vector<ImageCoordsCase>{
|
||||||
{"%float 2D 0 1 0 1 Unknown",
|
{"%float 2D 0 1 0 1 Unknown",
|
||||||
"%result = OpImageFetch %float %im %vu123",
|
"%result = OpImageFetch %v4float %im %vu123",
|
||||||
"",
|
"",
|
||||||
{
|
{
|
||||||
R"(TypeConstructor[not set]{
|
R"(TypeConstructor[not set]{
|
||||||
|
@ -5367,7 +5394,7 @@ INSTANTIATE_TEST_SUITE_P(
|
||||||
}
|
}
|
||||||
)"}},
|
)"}},
|
||||||
{"%float 2D 0 1 0 2 R32f",
|
{"%float 2D 0 1 0 2 R32f",
|
||||||
"%result = OpImageRead %float %im %vu123",
|
"%result = OpImageRead %v4float %im %vu123",
|
||||||
"",
|
"",
|
||||||
{
|
{
|
||||||
R"(TypeConstructor[not set]{
|
R"(TypeConstructor[not set]{
|
||||||
|
|
Loading…
Reference in New Issue