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

Tobias Klausmann tobias.johannes.klausmann at mni.thm.de
Sun Nov 5 18:13:17 UTC 2017


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 <tobias.johannes.klausmann at mni.thm.de>


>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
>  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:


More information about the mesa-dev mailing list