glsl: reject size1x8 for image variable with floating-point data types

Fixes: 8d07d66180 ("glsl,nir: Switch the enum representing shader image formats to PIPE_FORMAT.")
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5688>
(cherry picked from commit 0c8873d85d)
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2020-06-19 18:29:19 +02:00 committed by Eric Engestrom
parent 1d826d63fb
commit 0fea7026b4
2 changed files with 8 additions and 6 deletions

View file

@ -4423,7 +4423,7 @@
"description": "glsl: reject size1x8 for image variable with floating-point data types",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "8d07d66180b1523d7e70681ca142955f896ebda9"
},

View file

@ -4981,12 +4981,14 @@ ast_declarator_list::hir(exec_list *instructions,
if (strncmp(this->type->specifier->type_name, "image", strlen("image")) == 0) {
switch (this->type->qualifier.image_format) {
case PIPE_FORMAT_R8_SINT:
/* No valid qualifier in this case, driver will need to look at
* the underlying image's format (just like no qualifier being
* present).
/* The GL_EXT_shader_image_load_store spec says:
* A layout of "size1x8" is illegal for image variables associated
* with floating-point data types.
*/
this->type->qualifier.image_format = PIPE_FORMAT_NONE;
break;
_mesa_glsl_error(& loc, state,
"size1x8 is illegal for image variables "
"with floating-point data types.");
return NULL;
case PIPE_FORMAT_R16_SINT:
this->type->qualifier.image_format = PIPE_FORMAT_R16_FLOAT;
break;