Re: [Mesa-dev] [PATCH] nv50,nvc0: enable using LOAD from constbuf

2017-11-05 Thread Ilia Mirkin
On Sun, Nov 5, 2017 at 1:13 PM, Tobias Klausmann
 wrote:
>
> On 11/5/17 4:48 PM, Ilia Mirkin wrote:
>> This enables std430-style packing for UBOs which aren't otherwise marked
>> as std140.
>>
>> There might be small register lifetime changes as a result of removed
>> duplicate loads in some cases, but this seems worth it overall.
>
>
> A before/after shader-db run would be nice to see.
>
> Reviewed-by: Tobias Klausmann 

Not great =/

total instructions in shared programs : 6583617 -> 6588798 (0.08%)
total gprs used in shared programs: 950832 -> 951158 (0.03%)
total shared used in shared programs  : 0 -> 0 (0.00%)
total local used in shared programs   : 15328 -> 15328 (0.00%)
total bytes used in shared programs   : 60366976 -> 60414152 (0.08%)

local sharedgpr   inst  bytes
helped   0   0   0  61  61
  hurt   0   0 186 742 742

But not horrible either. Pretty much all of these would be resolved if
we had instruction scheduling... the loads happen somewhere up top and
can't propagate into e.g. exports, etc.

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


Re: [Mesa-dev] [PATCH] nv50,nvc0: enable using LOAD from constbuf

2017-11-05 Thread Tobias Klausmann

On 11/5/17 4:48 PM, Ilia Mirkin wrote:
> This enables std430-style packing for UBOs which aren't otherwise marked
> as std140.
>
> There might be small register lifetime changes as a result of removed
> duplicate loads in some cases, but this seems worth it overall.


A before/after shader-db run would be nice to see.

Reviewed-by: Tobias Klausmann 


>
> Signed-off-by: Ilia Mirkin 
> ---
>  src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 2 ++
>  src/gallium/drivers/nouveau/nv50/nv50_screen.c| 2 +-
>  src/gallium/drivers/nouveau/nvc0/nvc0_screen.c| 2 +-
>  3 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp 
> b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
> index 34351dab518..dfddffc89da 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
> @@ -403,6 +403,7 @@ static nv50_ir::DataFile translateFile(uint file)
>  {
> switch (file) {
> case TGSI_FILE_CONSTANT:return nv50_ir::FILE_MEMORY_CONST;
> +   case TGSI_FILE_CONSTBUF:return nv50_ir::FILE_MEMORY_CONST;
> case TGSI_FILE_INPUT:   return nv50_ir::FILE_SHADER_INPUT;
> case TGSI_FILE_OUTPUT:  return nv50_ir::FILE_SHADER_OUTPUT;
> case TGSI_FILE_TEMPORARY:   return nv50_ir::FILE_GPR;
> @@ -2628,6 +2629,7 @@ Converter::handleLOAD(Value *dst0[4])
>  
> switch (tgsi.getSrc(0).getFile()) {
> case TGSI_FILE_BUFFER:
> +   case TGSI_FILE_CONSTBUF:
> case TGSI_FILE_MEMORY:
>for (c = 0; c < 4; ++c) {
>   if (!dst0[c])
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
> b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> index 2066cf3f6e1..5ee5a26b652 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> @@ -202,6 +202,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
> pipe_cap param)
> case PIPE_CAP_TGSI_CLOCK:
> case PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX:
> case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
> +   case PIPE_CAP_LOAD_CONSTBUF:
>return 1;
> case PIPE_CAP_SEAMLESS_CUBE_MAP:
>return 1; /* class_3d >= NVA0_3D_CLASS; */
> @@ -275,7 +276,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
> pipe_cap param)
> case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
> case PIPE_CAP_QUERY_SO_OVERFLOW:
> case PIPE_CAP_MEMOBJ:
> -   case PIPE_CAP_LOAD_CONSTBUF:
> case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
> case PIPE_CAP_TILE_RASTER_ORDER:
> case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c 
> b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index d62a5552536..3544afe044b 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -257,6 +257,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum 
> pipe_cap param)
> case PIPE_CAP_COMPUTE:
> case PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX:
> case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
> +   case PIPE_CAP_LOAD_CONSTBUF:
>return 1;
> case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
>return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
> @@ -304,7 +305,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum 
> pipe_cap param)
> case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
> case PIPE_CAP_QUERY_SO_OVERFLOW:
> case PIPE_CAP_MEMOBJ:
> -   case PIPE_CAP_LOAD_CONSTBUF:
> case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
> case PIPE_CAP_TILE_RASTER_ORDER:
> case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] nv50,nvc0: enable using LOAD from constbuf

2017-11-05 Thread Ilia Mirkin
This enables std430-style packing for UBOs which aren't otherwise marked
as std140.

There might be small register lifetime changes as a result of removed
duplicate loads in some cases, but this seems worth it overall.

Signed-off-by: Ilia Mirkin 
---
 src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 2 ++
 src/gallium/drivers/nouveau/nv50/nv50_screen.c| 2 +-
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c| 2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
index 34351dab518..dfddffc89da 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
@@ -403,6 +403,7 @@ static nv50_ir::DataFile translateFile(uint file)
 {
switch (file) {
case TGSI_FILE_CONSTANT:return nv50_ir::FILE_MEMORY_CONST;
+   case TGSI_FILE_CONSTBUF:return nv50_ir::FILE_MEMORY_CONST;
case TGSI_FILE_INPUT:   return nv50_ir::FILE_SHADER_INPUT;
case TGSI_FILE_OUTPUT:  return nv50_ir::FILE_SHADER_OUTPUT;
case TGSI_FILE_TEMPORARY:   return nv50_ir::FILE_GPR;
@@ -2628,6 +2629,7 @@ Converter::handleLOAD(Value *dst0[4])
 
switch (tgsi.getSrc(0).getFile()) {
case TGSI_FILE_BUFFER:
+   case TGSI_FILE_CONSTBUF:
case TGSI_FILE_MEMORY:
   for (c = 0; c < 4; ++c) {
  if (!dst0[c])
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 2066cf3f6e1..5ee5a26b652 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -202,6 +202,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_TGSI_CLOCK:
case PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX:
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
+   case PIPE_CAP_LOAD_CONSTBUF:
   return 1;
case PIPE_CAP_SEAMLESS_CUBE_MAP:
   return 1; /* class_3d >= NVA0_3D_CLASS; */
@@ -275,7 +276,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
case PIPE_CAP_QUERY_SO_OVERFLOW:
case PIPE_CAP_MEMOBJ:
-   case PIPE_CAP_LOAD_CONSTBUF:
case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
case PIPE_CAP_TILE_RASTER_ORDER:
case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c 
b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index d62a5552536..3544afe044b 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -257,6 +257,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_COMPUTE:
case PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX:
case PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION:
+   case PIPE_CAP_LOAD_CONSTBUF:
   return 1;
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
   return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
@@ -304,7 +305,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
case PIPE_CAP_QUERY_SO_OVERFLOW:
case PIPE_CAP_MEMOBJ:
-   case PIPE_CAP_LOAD_CONSTBUF:
case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
case PIPE_CAP_TILE_RASTER_ORDER:
case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
-- 
2.13.6

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