From 111d57e7d297a0736f83b3f710f9294981c48b2e Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 14 Nov 2016 18:11:07 -0800 Subject: [PATCH] compiler: Add the rest of the subpassInput types There are actually 6 of them according to the GL_KHR_vulkan_glsl spec. Reviewed-by: Dave Airlie Reviewed-by: Jordan Justen --- src/compiler/builtin_type_macros.h | 7 ++++++- src/compiler/glsl_types.cpp | 20 +++++++++++++++----- src/compiler/glsl_types.h | 1 + src/mesa/program/prog_to_nir.c | 1 + 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/compiler/builtin_type_macros.h b/src/compiler/builtin_type_macros.h index 3db3b76bea3..49a5a348d77 100644 --- a/src/compiler/builtin_type_macros.h +++ b/src/compiler/builtin_type_macros.h @@ -159,7 +159,12 @@ DECL_TYPE(uimageCubeArray, GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, GLSL_TYPE DECL_TYPE(uimage2DMS, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 0, GLSL_TYPE_UINT) DECL_TYPE(uimage2DMSArray, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_MS, 0, 1, GLSL_TYPE_UINT) -DECL_TYPE(subpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS,0, 0, GLSL_TYPE_FLOAT) +DECL_TYPE(subpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_FLOAT) +DECL_TYPE(subpassInputMS, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_FLOAT) +DECL_TYPE(isubpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_INT) +DECL_TYPE(isubpassInputMS, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_INT) +DECL_TYPE(usubpassInput, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS, 0, 0, GLSL_TYPE_UINT) +DECL_TYPE(usubpassInputMS, 0, GLSL_TYPE_IMAGE, GLSL_SAMPLER_DIM_SUBPASS_MS, 0, 0, GLSL_TYPE_UINT) DECL_TYPE(atomic_uint, GL_UNSIGNED_INT_ATOMIC_COUNTER, GLSL_TYPE_ATOMIC_UINT, 1, 1) diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index 744b457013d..79f026785f8 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -644,6 +644,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, else return samplerExternalOES_type; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: return error_type; } case GLSL_TYPE_INT: @@ -673,6 +674,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: return error_type; } case GLSL_TYPE_UINT: @@ -702,6 +704,7 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: return error_type; } default: @@ -715,8 +718,6 @@ const glsl_type * glsl_type::get_image_instance(enum glsl_sampler_dim dim, bool array, glsl_base_type type) { - if (dim == GLSL_SAMPLER_DIM_SUBPASS) - return subpassInput_type; switch (type) { case GLSL_TYPE_FLOAT: switch (dim) { @@ -740,8 +741,11 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, return imageBuffer_type; case GLSL_SAMPLER_DIM_MS: return (array ? image2DMSArray_type : image2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: case GLSL_SAMPLER_DIM_SUBPASS: + return subpassInput_type; + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return subpassInputMS_type; + case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; } case GLSL_TYPE_INT: @@ -766,8 +770,11 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, return iimageBuffer_type; case GLSL_SAMPLER_DIM_MS: return (array ? iimage2DMSArray_type : iimage2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: case GLSL_SAMPLER_DIM_SUBPASS: + return isubpassInput_type; + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return isubpassInputMS_type; + case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; } case GLSL_TYPE_UINT: @@ -792,8 +799,11 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, return uimageBuffer_type; case GLSL_SAMPLER_DIM_MS: return (array ? uimage2DMSArray_type : uimage2DMS_type); - case GLSL_SAMPLER_DIM_EXTERNAL: case GLSL_SAMPLER_DIM_SUBPASS: + return usubpassInput_type; + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return usubpassInputMS_type; + case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; } default: diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h index d3f6d1ddc50..bb223cfde96 100644 --- a/src/compiler/glsl_types.h +++ b/src/compiler/glsl_types.h @@ -82,6 +82,7 @@ enum glsl_sampler_dim { GLSL_SAMPLER_DIM_EXTERNAL, GLSL_SAMPLER_DIM_MS, GLSL_SAMPLER_DIM_SUBPASS, /* for vulkan input attachments */ + GLSL_SAMPLER_DIM_SUBPASS_MS, /* for multisampled vulkan input attachments */ }; enum glsl_interface_packing { diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c index 2707a075b5d..68a5f674485 100644 --- a/src/mesa/program/prog_to_nir.c +++ b/src/mesa/program/prog_to_nir.c @@ -598,6 +598,7 @@ ptn_tex(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src, instr->coord_components = 3; break; case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: unreachable("can't reach"); } -- 2.30.2