On Fri, Aug 28, 2015 at 12:10 AM, Ilia Mirkin <[email protected]> wrote: > On Fri, Aug 28, 2015 at 3:02 AM, Matt Turner <[email protected]> wrote: >> On Thu, Aug 27, 2015 at 8:48 PM, Ilia Mirkin <[email protected]> wrote: >>> Signed-off-by: Ilia Mirkin <[email protected]> >>> --- >>> 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.
Bah :( _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
