On Fri, Aug 28, 2015 at 3:02 AM, Matt Turner <matts...@gmail.com> wrote: > On Thu, Aug 27, 2015 at 8:48 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: >> Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> >> --- >> src/glsl/builtin_functions.cpp | 48 >> +++++++++++++++++++++++++++++++++++++++--- >> 1 file changed, 45 insertions(+), 3 deletions(-) >> >> diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp >> index 3fdda32..b3982f4 100644 >> --- a/src/glsl/builtin_functions.cpp >> +++ b/src/glsl/builtin_functions.cpp >> @@ -540,7 +540,8 @@ private: >> IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE = (1 << 3), >> IMAGE_FUNCTION_READ_ONLY = (1 << 4), >> IMAGE_FUNCTION_WRITE_ONLY = (1 << 5), >> - IMAGE_FUNCTION_AVAIL_ATOMIC = (1 << 6) >> + IMAGE_FUNCTION_AVAIL_ATOMIC = (1 << 6), >> + IMAGE_FUNCTION_MS_ONLY = (1 << 7), >> }; >> >> /** >> @@ -753,6 +754,10 @@ private: >> const char *intrinsic_name, >> unsigned num_arguments, >> unsigned flags); >> + ir_function_signature *_image_samples_prototype(const glsl_type >> *image_type, >> + const char >> *intrinsic_name, >> + unsigned num_arguments, >> + unsigned flags); >> ir_function_signature *_image(image_prototype_ctr prototype, >> const glsl_type *image_type, >> const char *intrinsic_name, >> @@ -2688,8 +2693,10 @@ builtin_builder::add_image_function(const char *name, >> ir_function *f = new(mem_ctx) ir_function(name); >> >> for (unsigned i = 0; i < ARRAY_SIZE(types); ++i) { >> - if (types[i]->sampler_type != GLSL_TYPE_FLOAT || >> - (flags & IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE)) >> + if ((types[i]->sampler_type != GLSL_TYPE_FLOAT || >> + (flags & IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE)) && >> + (types[i]->sampler_dimensionality == GLSL_SAMPLER_DIM_MS || >> + !(flags & IMAGE_FUNCTION_MS_ONLY))) >> f->add_signature(_image(prototype, types[i], intrinsic_name, >> num_arguments, flags)); >> } >> @@ -2757,6 +2764,11 @@ builtin_builder::add_image_functions(bool glsl) >> "__intrinsic_image_size", >> &builtin_builder::_image_size_prototype, 1, >> flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE); >> + >> + add_image_function(glsl ? "imageSamples" : "__intrinsic_image_samples", >> + "__intrinsic_image_samples", >> + &builtin_builder::_image_samples_prototype, 1, >> + flags | IMAGE_FUNCTION_MS_ONLY); >> } >> >> ir_variable * >> @@ -4987,6 +4999,36 @@ builtin_builder::_image_size_prototype(const >> glsl_type *image_type, >> } >> >> ir_function_signature * >> +builtin_builder::_image_samples_prototype(const glsl_type *image_type, >> + const char *intrinsic_name, >> + unsigned num_arguments, >> + unsigned flags) >> +{ >> + const glsl_type *ret_type; >> + unsigned num_components = image_type->coordinate_components(); >> + >> + ret_type = glsl_type::get_instance(GLSL_TYPE_INT, num_components, 1); >> + >> + ir_variable *image = in_var(image_type, "image"); >> + ir_function_signature *sig = new_sig(ret_type, shader_samples, 1, image); >> + >> + /* Set the maximal set of qualifiers allowed for this image >> + * built-in. Function calls with arguments having fewer >> + * qualifiers than present in the prototype are allowed by the >> + * spec, but not with more, i.e. this will make the compiler >> + * accept everything that needs to be accepted, and reject cases >> + * like loads from write-only or stores to read-only images. >> + */ > > This can be line wrapped better. I don't know how in emacs, but in vim > I highlight it with shift+v, and then gq.
I copied this directly from _image_size_prototype, word for word, line for line. It's easy to rewrap in emacs too (Alt-q, I think...), happy to do it. But it seems more consistent to have the same text. Or perhaps just not have that comment at all. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev