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.pitoi...@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

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to