Re: [Mesa-dev] [PATCH] nv50,nvc0: enable using LOAD from constbuf
On Sun, Nov 5, 2017 at 1:13 PM, Tobias Klausmannwrote: > > 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
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
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