[Mesa-dev] [PATCH v2 03/31] glsl: make sampler/image types as 64-bit

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Apr 26 07:44:57 UTC 2017



On 04/26/2017 03:36 AM, Timothy Arceri wrote:
> On 24/04/17 20:35, Samuel Pitoiset wrote:
>> The ARB_bindless_texture spec says:
>>
>>     "Samplers are represented using 64-bit integer handles."
>>
>> and,
>>
>>     "Images are represented using 64-bit integer handles."
>>
>> It seems simpler to always consider sampler and image types
>> as 64-bit unsigned integer.
>>
>> This introduces a temporary workaround in _mesa_get_uniform()
>> because at this point no flag are used to distinguish between
>> bound and bindless samplers. This is going to be removed in a
>> separate series. This avoids to break
>> arb_shader_image_load_store-state.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>>   src/compiler/glsl_types.h       | 4 +++-
>>   src/mesa/main/uniform_query.cpp | 4 +++-
>>   2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/compiler/glsl_types.h b/src/compiler/glsl_types.h
>> index 403663f7b8..a61a522b1e 100644
>> --- a/src/compiler/glsl_types.h
>> +++ b/src/compiler/glsl_types.h
>> @@ -72,7 +72,9 @@ static inline bool glsl_base_type_is_64bit(enum 
>> glsl_base_type type)
>>   {
>>      return type == GLSL_TYPE_DOUBLE ||
>>             type == GLSL_TYPE_UINT64 ||
>> -          type == GLSL_TYPE_INT64;
>> +          type == GLSL_TYPE_INT64  ||
>> +          type == GLSL_TYPE_IMAGE  ||
>> +          type == GLSL_TYPE_SAMPLER;
>>   }
>>   enum glsl_sampler_dim {
>> diff --git a/src/mesa/main/uniform_query.cpp 
>> b/src/mesa/main/uniform_query.cpp
>> index e400d0eb00..1fbad0d00e 100644
>> --- a/src/mesa/main/uniform_query.cpp
>> +++ b/src/mesa/main/uniform_query.cpp
>> @@ -323,7 +323,9 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint 
>> program, GLint location,
>>      {
>>         unsigned elements = (uni->type->is_sampler())
>>        ? 1 : uni->type->components();
>> -      const int dmul = uni->type->is_64bit() ? 2 : 1;
>> +      /* XXX: Remove this workaround when bindless is fully 
>> implemented. */
> 
> You should probably be more explicit here about what is to be removed. 
> Maybe:
> 
> Remove the sampler/image check workarounds when bindless is fully 
> implemented.
> 
> It's not ideal to see code like this land. Out of interest how large is 
> the series that removes this?

I do agree but we don't really have the choice if we don't want to 
temporarily break that piglit test at least.

The fix is pretty small but it requires to implement 
glUniformHandle*ARB() before. Basically, it just checks if the sampler 
is bound or bindless and it converts to the corresponding type.

I can improve the message if you want.

> 
>> +      const int dmul =
>> +         (uni->type->is_64bit() && !uni->type->is_sampler() && 
>> !uni->type->is_image()) ? 2 : 1;
>>         const int rmul = glsl_base_type_is_64bit(returnType) ? 2 : 1;
>>         /* Calculate the source base address *BEFORE* modifying 
>> elements to
>>


More information about the mesa-dev mailing list