diff --git a/src/compiler/builtin_type_macros.h b/src/compiler/builtin_type_macros.h index da3f19e7ab2..3db3b76bea3 100644 --- a/src/compiler/builtin_type_macros.h +++ b/src/compiler/builtin_type_macros.h @@ -159,6 +159,8 @@ 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(atomic_uint, GL_UNSIGNED_INT_ATOMIC_COUNTER, GLSL_TYPE_ATOMIC_UINT, 1, 1) STRUCT_TYPE(gl_DepthRangeParameters) diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index 641644d2d95..73e3abd329d 100644 --- a/src/compiler/glsl_types.cpp +++ b/src/compiler/glsl_types.cpp @@ -674,6 +674,8 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, return error_type; else return samplerExternalOES_type; + case GLSL_SAMPLER_DIM_SUBPASS: + return error_type; } case GLSL_TYPE_INT: if (shadow) @@ -701,6 +703,8 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, return (array ? isampler2DMSArray_type : isampler2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; + case GLSL_SAMPLER_DIM_SUBPASS: + return error_type; } case GLSL_TYPE_UINT: if (shadow) @@ -728,6 +732,8 @@ glsl_type::get_sampler_instance(enum glsl_sampler_dim dim, return (array ? usampler2DMSArray_type : usampler2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: return error_type; + case GLSL_SAMPLER_DIM_SUBPASS: + return error_type; } default: return error_type; @@ -740,6 +746,8 @@ 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) { @@ -764,6 +772,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_MS: return (array ? image2DMSArray_type : image2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: return error_type; } case GLSL_TYPE_INT: @@ -789,6 +798,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_MS: return (array ? iimage2DMSArray_type : iimage2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: return error_type; } case GLSL_TYPE_UINT: @@ -814,6 +824,7 @@ glsl_type::get_image_instance(enum glsl_sampler_dim dim, case GLSL_SAMPLER_DIM_MS: return (array ? uimage2DMSArray_type : uimage2DMS_type); case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: return error_type; } default: @@ -1975,6 +1986,7 @@ glsl_type::coordinate_components() const case GLSL_SAMPLER_DIM_RECT: case GLSL_SAMPLER_DIM_MS: case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: size = 2; break; case GLSL_SAMPLER_DIM_3D: diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h index 7c4827d8f83..b1e2f7a0181 100644 --- a/src/compiler/glsl_types.h +++ b/src/compiler/glsl_types.h @@ -80,7 +80,8 @@ enum glsl_sampler_dim { GLSL_SAMPLER_DIM_RECT, GLSL_SAMPLER_DIM_BUF, GLSL_SAMPLER_DIM_EXTERNAL, - GLSL_SAMPLER_DIM_MS + GLSL_SAMPLER_DIM_MS, + GLSL_SAMPLER_DIM_SUBPASS, /* for vulkan input attachments */ }; enum glsl_interface_packing { @@ -127,7 +128,7 @@ struct glsl_type { GLenum gl_type; glsl_base_type base_type; - unsigned sampler_dimensionality:3; /**< \see glsl_sampler_dim */ + unsigned sampler_dimensionality:4; /**< \see glsl_sampler_dim */ unsigned sampler_shadow:1; unsigned sampler_array:1; unsigned sampled_type:2; /**< Type of data returned using this diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 6f0597200e9..aac247c79c0 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -1198,6 +1198,7 @@ nir_tex_instr_dest_size(nir_tex_instr *instr) case GLSL_SAMPLER_DIM_MS: case GLSL_SAMPLER_DIM_RECT: case GLSL_SAMPLER_DIM_EXTERNAL: + case GLSL_SAMPLER_DIM_SUBPASS: ret = 2; break; case GLSL_SAMPLER_DIM_3D: diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c index 1efd1a1a381..8a4437a2cee 100644 --- a/src/mesa/program/prog_to_nir.c +++ b/src/mesa/program/prog_to_nir.c @@ -596,6 +596,8 @@ ptn_tex(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src, case GLSL_SAMPLER_DIM_CUBE: instr->coord_components = 3; break; + case GLSL_SAMPLER_DIM_SUBPASS: + unreachable("can't reach"); } unsigned src_number = 0;