clover: simplify image arguments

We don't care how many dimensions the image arg has, so drop it otherwise
we would have to add a lot of variants for arrays, msaa and depth
combinations. Yes, image2d_array_msaa_depth_t is a thing.

Signed-off-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Serge Martin <edb@sigluy.net>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9212>
This commit is contained in:
Karol Herbst
2020-10-21 02:55:11 +02:00
committed by Marge Bot
parent 4cb9df49c2
commit 2afaa60b42
4 changed files with 29 additions and 29 deletions

View File

@@ -395,12 +395,10 @@ kernel::argument::create(const module::argument &marg) {
case module::argument::constant:
return std::unique_ptr<kernel::argument>(new constant_argument);
case module::argument::image2d_rd:
case module::argument::image3d_rd:
case module::argument::image_rd:
return std::unique_ptr<kernel::argument>(new image_rd_argument);
case module::argument::image2d_wr:
case module::argument::image3d_wr:
case module::argument::image_wr:
return std::unique_ptr<kernel::argument>(new image_wr_argument);
case module::argument::sampler:

View File

@@ -85,10 +85,8 @@ namespace clover {
constant,
global,
local,
image2d_rd,
image2d_wr,
image3d_rd,
image3d_wr,
image_rd,
image_wr,
sampler
};

View File

@@ -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,

View File

@@ -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();
}