* [mesa PATCH] nv50: handle VP without inputs
@ 2012-05-06 18:53 Marcin Slusarz
[not found] ` <20120506185308.GC4311-OI9uyE9O0yo@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: Marcin Slusarz @ 2012-05-06 18:53 UTC (permalink / raw)
To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
Fixes 3 piglit tests:
general/pos-array
shaders/glsl-novertexdata
shaders/glsl-vs-point-size
and makes shaders/vp-ignore-input not trigger PGRAPH DATA_ERROR
---
It's a bit ugly... If there's a way to fix it properly, I'm open to suggestions.
---
src/gallium/drivers/nv50/nv50_program.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index 48e8db3..c44f537 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -53,6 +53,13 @@ nv50_vertprog_assign_slots(struct nv50_ir_prog_info *info)
if (info->in[i].mask & (1 << c))
info->in[i].slot[c] = n++;
}
+
+ // Corner case: VP has no inputs, but we will still need to submit data to
+ // draw it. HW will shout at us and won't draw anything if we don't enable
+ // any input, so let's just pretend it's the first one.
+ if (info->numInputs == 0)
+ prog->vp.attrs[0] |= 0xf;
+
prog->in_nr = info->numInputs;
for (i = 0; i < info->numSysVals; ++i) {
--
1.7.8.5
^ permalink raw reply related [flat|nested] 3+ messages in thread[parent not found: <20120506185308.GC4311-OI9uyE9O0yo@public.gmane.org>]
* Re: [mesa PATCH] nv50: handle VP without inputs [not found] ` <20120506185308.GC4311-OI9uyE9O0yo@public.gmane.org> @ 2012-05-06 19:05 ` Christoph Bumiller [not found] ` <4FA6CB71.9070308-oe7qfRrRQffzPE21tAIdciO7C/xPubJB@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Christoph Bumiller @ 2012-05-06 19:05 UTC (permalink / raw) To: Marcin Slusarz; +Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW On 06.05.2012 20:53, Marcin Slusarz wrote: > Fixes 3 piglit tests: > general/pos-array > shaders/glsl-novertexdata > shaders/glsl-vs-point-size > and makes shaders/vp-ignore-input not trigger PGRAPH DATA_ERROR > --- > It's a bit ugly... If there's a way to fix it properly, I'm open to suggestions. > --- > src/gallium/drivers/nv50/nv50_program.c | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c > index 48e8db3..c44f537 100644 > --- a/src/gallium/drivers/nv50/nv50_program.c > +++ b/src/gallium/drivers/nv50/nv50_program.c > @@ -53,6 +53,13 @@ nv50_vertprog_assign_slots(struct nv50_ir_prog_info *info) > if (info->in[i].mask & (1 << c)) > info->in[i].slot[c] = n++; > } > + > + // Corner case: VP has no inputs, but we will still need to submit data to > + // draw it. HW will shout at us and won't draw anything if we don't enable > + // any input, so let's just pretend it's the first one. > + if (info->numInputs == 0) > + prog->vp.attrs[0] |= 0xf; > + > prog->in_nr = info->numInputs; > > for (i = 0; i < info->numSysVals; ++i) { Ah thank you, I've been wondering how to make the nv50 draw without any inputs (on nvc0 it just works even if you don't enable any). 2 issues though: - please don't use C++ style comments in here (the style guardians would sooner or later patch this up) - if InstanceID or VertexID are used, enabling any inputs will move them to a different position in input space, they always come after all the ordinary vertex attributes; see usage of the "unsigned n" in the code directly above & below ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <4FA6CB71.9070308-oe7qfRrRQffzPE21tAIdciO7C/xPubJB@public.gmane.org>]
* Re: [mesa PATCH] nv50: handle VP without inputs [not found] ` <4FA6CB71.9070308-oe7qfRrRQffzPE21tAIdciO7C/xPubJB@public.gmane.org> @ 2012-05-06 20:54 ` Marcin Slusarz 0 siblings, 0 replies; 3+ messages in thread From: Marcin Slusarz @ 2012-05-06 20:54 UTC (permalink / raw) To: Christoph Bumiller; +Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW On Sun, May 06, 2012 at 09:05:21PM +0200, Christoph Bumiller wrote: > On 06.05.2012 20:53, Marcin Slusarz wrote: > > Fixes 3 piglit tests: > > general/pos-array > > shaders/glsl-novertexdata > > shaders/glsl-vs-point-size > > and makes shaders/vp-ignore-input not trigger PGRAPH DATA_ERROR > > --- > > It's a bit ugly... If there's a way to fix it properly, I'm open to suggestions. > > --- > > src/gallium/drivers/nv50/nv50_program.c | 7 +++++++ > > 1 files changed, 7 insertions(+), 0 deletions(-) > > > > diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c > > index 48e8db3..c44f537 100644 > > --- a/src/gallium/drivers/nv50/nv50_program.c > > +++ b/src/gallium/drivers/nv50/nv50_program.c > > @@ -53,6 +53,13 @@ nv50_vertprog_assign_slots(struct nv50_ir_prog_info *info) > > if (info->in[i].mask & (1 << c)) > > info->in[i].slot[c] = n++; > > } > > + > > + // Corner case: VP has no inputs, but we will still need to submit data to > > + // draw it. HW will shout at us and won't draw anything if we don't enable > > + // any input, so let's just pretend it's the first one. > > + if (info->numInputs == 0) > > + prog->vp.attrs[0] |= 0xf; > > + > > prog->in_nr = info->numInputs; > > > > for (i = 0; i < info->numSysVals; ++i) { > Ah thank you, I've been wondering how to make the nv50 draw without any > inputs (on nvc0 it just works even if you don't enable any). > > 2 issues though: > - please don't use C++ style comments in here (the style guardians would > sooner or later patch this up) > - if InstanceID or VertexID are used, enabling any inputs will move them > to a different position in input space, they always come after all the > ordinary vertex attributes; see usage of the "unsigned n" in the code > directly above & below Thanks. I hacked glsl-vs-point-size test to use gl_VertexID/gl_InstanceID and it indeed failed. But patch below works in all cases :). --- From: Marcin Slusarz <marcin.slusarz-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Subject: [PATCH] nv50: handle VP without inputs Fixes 3 piglit tests: general/pos-array shaders/glsl-novertexdata shaders/glsl-vs-point-size and makes shaders/vp-ignore-input not trigger PGRAPH DATA_ERROR --- src/gallium/drivers/nv50/nv50_program.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c index 48e8db3..e6f1097 100644 --- a/src/gallium/drivers/nv50/nv50_program.c +++ b/src/gallium/drivers/nv50/nv50_program.c @@ -68,6 +68,17 @@ nv50_vertprog_assign_slots(struct nv50_ir_prog_info *info) break; } } + + /* + * Corner case: VP has no inputs, but we will still need to submit data to + * draw it. HW will shout at us and won't draw anything if we don't enable + * any input, so let's just pretend it's the first one. + */ + if (prog->vp.attrs[0] == 0 && + prog->vp.attrs[1] == 0 && + prog->vp.attrs[2] == 0) + prog->vp.attrs[0] |= 0xf; + /* VertexID before InstanceID */ if (info->io.vertexId < info->numSysVals) info->sv[info->io.vertexId].slot[0] = n++; -- 1.7.8.5 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-05-06 20:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-06 18:53 [mesa PATCH] nv50: handle VP without inputs Marcin Slusarz
[not found] ` <20120506185308.GC4311-OI9uyE9O0yo@public.gmane.org>
2012-05-06 19:05 ` Christoph Bumiller
[not found] ` <4FA6CB71.9070308-oe7qfRrRQffzPE21tAIdciO7C/xPubJB@public.gmane.org>
2012-05-06 20:54 ` Marcin Slusarz
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.