[Mesa-dev] [PATCH 07/10] glsl: add support for the imageSamples function
Francisco Jerez
currojerez at riseup.net
Sun Aug 30 07:57:29 PDT 2015
Matt Turner <mattst88 at gmail.com> writes:
> On Fri, Aug 28, 2015 at 12:10 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Fri, Aug 28, 2015 at 3:02 AM, Matt Turner <mattst88 at gmail.com> wrote:
>>> On Thu, Aug 27, 2015 at 8:48 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>>>> Signed-off-by: Ilia Mirkin <imirkin at 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.
>
> Bah :(
FYI the original comment was line-wrapped using alt-q on emacs.
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150830/7bd5669d/attachment.sig>
More information about the mesa-dev
mailing list