Am Freitag, den 04.05.2018, 16:11 -0400 schrieb Ilia Mirkin: > On Fri, May 4, 2018 at 2:50 PM, Gert Wollny <[email protected] > m> wrote: > > For that reason I think that a render state validation within > > st_Clear makes sense, because it makes sure that the states > > like SCISSOR_TEST or DISCARD_RASTERIZER are properly send to the > > driver, before clear() is executed that makes use of these states. > > And while the workaround for DISCARD_RASTERIZER is possible because > > if it is set then the host should actually never see the clear > > command, SCISSOR_TEST is different, its state can not be guessed on > > the host. > > > > Anyway, I happily take every hint on how this can be fixed directly > > in virgl_clear or virgl in general, and thank you for taking the > > time to answer me, > > I thought someone else took care of the scissor thing for clears. At > least they were asking about it.
When I implemented the "disable rasterizer_discard" before clear in virglrenderer I had tests failing that include scissors, so that's why I assumed that it migt be a problem, but with your list below, I don't think that it is really that important which state gets not updated properly, because they all should be send to virglrenderer. > > I have to assume that virglrenderer keeps track of the last-set > rasterizer state. Based on that, you have to turn off scissors, > rasterizer discard, window rectangles, stencil tests, sample > masks(?), and anything else which affects clears (have a look at > st_Clear -- anything that causes it to hit the fallback path which > draws should be something you turn off because calling glClear() in > virglrenderer). As far as I can seen the rasterizer state is updated with the last draw command, but, to take scissors as an example, when I set and enable scissors before a clear, then this is not transmitted, and the clear on the host doesn't take a possible active scissore state into a account. How does turning off scissors in virglrenderer help me with that? (same for the other states). > If you don't keep track of the last-set rasterizer state, then now > may be a good time to start :) When you refer to the states that are set after the last draw command but before a clear, then no, they are not updated in virglrenderer because there is no code path that exposed them to the driver, and this is where I'm stuck. Now reading a bit more in the code I find it strange that in st_validate_state with (pipeline = ST_PIPELINE_CLEAR) not all states that actually have an influenze on the clear command are updated (i.e. the render states). I find this surprising ... Best, Gert _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
