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

2017-04-26 Thread Samuel Pitoiset



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 
---
  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


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

2017-04-25 Thread Timothy Arceri

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 
---
  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?



+  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