diff --git a/src/gallium/frontends/clover/core/kernel.cpp b/src/gallium/frontends/clover/core/kernel.cpp index 1629e34f931..1f64821f589 100644 --- a/src/gallium/frontends/clover/core/kernel.cpp +++ b/src/gallium/frontends/clover/core/kernel.cpp @@ -395,12 +395,10 @@ kernel::argument::create(const module::argument &marg) { case module::argument::constant: return std::unique_ptr(new constant_argument); - case module::argument::image2d_rd: - case module::argument::image3d_rd: + case module::argument::image_rd: return std::unique_ptr(new image_rd_argument); - case module::argument::image2d_wr: - case module::argument::image3d_wr: + case module::argument::image_wr: return std::unique_ptr(new image_wr_argument); case module::argument::sampler: diff --git a/src/gallium/frontends/clover/core/module.hpp b/src/gallium/frontends/clover/core/module.hpp index b014d3c40cb..9825ea259b9 100644 --- a/src/gallium/frontends/clover/core/module.hpp +++ b/src/gallium/frontends/clover/core/module.hpp @@ -85,10 +85,8 @@ namespace clover { constant, global, local, - image2d_rd, - image2d_wr, - image3d_rd, - image3d_wr, + image_rd, + image_wr, sampler }; diff --git a/src/gallium/frontends/clover/llvm/codegen/common.cpp b/src/gallium/frontends/clover/llvm/codegen/common.cpp index 989d0f3b3e8..1c3e822aac8 100644 --- a/src/gallium/frontends/clover/llvm/codegen/common.cpp +++ b/src/gallium/frontends/clover/llvm/codegen/common.cpp @@ -57,16 +57,14 @@ namespace { enum module::argument::type get_image_type(const std::string &type, const std::string &qual) { - if (type == "image2d_t" && qual == "read_only") - return module::argument::image2d_rd; - else if (type == "image2d_t" && qual == "write_only") - return module::argument::image2d_wr; - else if (type == "image3d_t" && qual == "read_only") - return module::argument::image3d_rd; - else if (type == "image3d_t" && qual == "write_only") - return module::argument::image3d_wr; - else - unreachable("Unknown image type"); + if (type == "image1d_t" || type == "image2d_t" || type == "image3d_t") { + if (qual == "read_only") + return module::argument::image_rd; + else if (qual == "write_only") + return module::argument::image_wr; + } + + unreachable("Unsupported image type"); } module::arg_info create_arg_info(const std::string &arg_name, diff --git a/src/gallium/frontends/clover/spirv/invocation.cpp b/src/gallium/frontends/clover/spirv/invocation.cpp index 5dfdeb0bd39..ec425e2c7d6 100644 --- a/src/gallium/frontends/clover/spirv/invocation.cpp +++ b/src/gallium/frontends/clover/spirv/invocation.cpp @@ -90,17 +90,23 @@ namespace { enum module::argument::type convert_image_type(SpvId id, SpvDim dim, SpvAccessQualifier access, std::string &err) { - if (dim == SpvDim2D && access == SpvAccessQualifierReadOnly) - return module::argument::image2d_rd; - else if (dim == SpvDim2D && access == SpvAccessQualifierWriteOnly) - return module::argument::image2d_wr; - else if (dim == SpvDim3D && access == SpvAccessQualifierReadOnly) - return module::argument::image3d_rd; - else if (dim == SpvDim3D && access == SpvAccessQualifierWriteOnly) - return module::argument::image3d_wr; - else { - err += "Unknown access qualifier " + std::to_string(access) - + " or dimension " + std::to_string(dim) + " for image " + switch (dim) { + case SpvDim1D: + case SpvDim2D: + case SpvDim3D: + case SpvDimBuffer: + switch (access) { + case SpvAccessQualifierReadOnly: + return module::argument::image_rd; + case SpvAccessQualifierWriteOnly: + return module::argument::image_wr; + default: + err += "Unknown access qualifier " + std::to_string(access) + " for image " + + std::to_string(id) + ".\n"; + throw build_error(); + } + default: + err += "Unknown dimension " + std::to_string(dim) + " for image " + std::to_string(id) + ".\n"; throw build_error(); }