This is completely reasonable, especially if it only wraps a pipe_context. I'm very okay with not having blitter directly used by pipe drivers.
On Mon, Dec 21, 2009 at 9:57 AM, Jakob Bornecrantz <ja...@vmware.com> wrote: > To be honest I'm way more in favor off doing 4 and/or with a env variable to > switch between incorrect rendering and software fallbacks, but maybe we can > do 3 but with another solution. > > At some point the Gallium interface was a expression of what hardware could > do not a interface to program against. Another guiding rule was that it > should be easy to write a pipe driver, putting all the hard stuff in the > state tracker. > > Now we are starting to see a lot of state trackers and its becoming harder > and harder to implement all the work around for the different caps. Even tho > the fallback/workaround code is in a module that can be shared its still a > pain to integrate and a lot of boiler plate code needs to be written and > maintained. > > Maybe we should revive the fallback module or make a another module like it > that takes care of all these shortcomings of the hardware. But it is > optional to the state tracker. That it is optional to the state tracker is > the big thing. > > So an usecase: > The mesa state tracker takes a look at the pipe caps of the r300 driver and > notices something bad no CAP_NPOT but CAP_TEXRECT. It then wraps the pipe > driver with the fallback pipe driver and uses that. And all the NPOT badness > is hidden from the state tracker. > > The code to switch between software and and hardwware rendering only needs > to be written once this includes the code to detect IF we should switch to > software and code to select between different modes of handling of different > type of errors, like FALLBACK_CONFORM, FALLBACK_BAD_RENDERING. > > The good part with this is that the fallback module is optional and for > state trackers that can handle some of the possible shortcomings or doesn't > need all of the functionality don't need to wrap the pipe driver. > > We get clean drivers, clean state tracker but a heap of code in the fallback > module... > > I could also see the blitter module getting sucked into the fallback module. > > Comments please? > > On 21 dec 2009, at 17.26, Corbin Simpson wrote: >> >> Alright, I think the plan of action here is to create an assistant >> auxiliary module which, given texrects, can provide full NPOT >> functionality, and use it for nv30 and r300. >> >> I'm going to need some API changes. First, I'd like to always assume >> that texrects are available. As far as I can tell, there's no >> Gallium-capable hardware that lacks it. >> >> Then, if this module is going to be transparent to the state trackers, >> I'd like to deprecate or nuke PIPE_CAP_NPOT since any texrect-capable >> driver can transparently become NPOT-capable. >> >> ~ C. >> >> On Mon, Dec 21, 2009 at 7:55 AM, Roland Scheidegger <srol...@vmware.com> >> wrote: >>> >>> On 21.12.2009 15:13, Henri Verbeet wrote: >>>> >>>> 2009/12/21 Corbin Simpson <mostawesomed...@gmail.com>: >>>>> >>>>> So, yet another thing that r300 sucks balls at: NPOT textures. We've >>>>> been talking it over on IRC, and here's the options. >>>>> >>>>> 1) Don't do NPOT. Stop advertising PIPE_CAP_NPOT, refuse to accept >>>>> non-NPOT dimensions on textures. This sucks because it means that we >>>>> don't get GL 2.0, which means most apps (bless their non-compliant >>>>> souls) will refuse to attempt GLSL, which means that there's really no >>>>> point in continuing this driver. >>>>> >>>>> 2) Don't do NPOT in the pipe, but do it in the state tracker instead, >>>>> as needed. Write up the appropriate fallbacks, and then let ARB_npot >>>>> be advertised by the state tracker regardless of whether PIPE_CAP_NPOT >>>>> is set. Lots of typing, though. Lots and lots of typing. >>>>> >>>>> 3) Same as above, but put all the fallbacks in the pipe instead of the >>>>> state tracker. I am *really* not fond of this, since PIPE_CAP was not >>>>> intended for lies, but it was mentioned in IRC, so I gotta mention it >>>>> here. >>>>> >>>>> 3) The fglrx special: Don't require ARB_npot for advertising GL 2.0. I >>>>> figured this wasn't on the table, but you never know... >>>>> >>>> This is not really about where to implement the fallbacks, but as far >>>> as Wine is concerned, we'd mostly care about not triggering those if >>>> we can avoid them, e.g. by restrictions on clamping and filtering. We >>>> don't care much if GL 2.0 is supported or not, so a hypothetical >>>> "MESA_conditional_npot" extension would work for us. Other >>>> applications might care though, in which case an extension that allows >>>> us to query what situations trigger fallbacks would work for us as >>>> well. >>>> >>>> The fglrx "solution" mostly just sucks, for an important part because >>>> there's (afaik) no real documentation on what the restrictions are, >>>> and the reported extensions are now inconsistent with the reported GL >>>> version. That said, Wine has code to handle this case now, and I >>>> imagine other applications do as well. >>> >>> This is a very common hardware problem, there's lots of hardware out >>> there which can do "some" (like r300) or even all glsl shaders but lack >>> true npot support. I suspect there might be a few apps which try to see >>> if ARB_texture_npot is supported, and if not, they'll assume that >>> functionality isn't supported even if the driver says GL 2.0. There's >>> certainly precedent for not announcing extensions even if you have to >>> support it for a given gl version, one prominent example would be the >>> nvidia GF3/4 cards which were GL 1.4 but couldn't do blend_func_separate >>> - they didn't announce support for EXT_blend_func_separate and just used >>> software fallback when they needed. So of course just not announcing >>> support for it isn't sufficient you still need to implement this somehow >>> (unless you just want to misrender...) but it might give apps a hint, >>> even though the API wasn't really designed for this. Sounds like it'll >>> just pollute things though. Last time I checked the extension mechanism >>> in gallium when used with dri state tracker was broken though and needed >>> some work anyway (because dri_init_extensions was called after >>> st_create_context, and the former just enables lots of extensions >>> regardless any cap bits, hence the extension string will have lots of >>> extensions which might not be supported). >>> >>> Anyway, doing this in a utility module sounds good, though I'm not sure >>> what exactly you want to do. You could certainly fix up all texture >>> lookups in the shader by doing address calculations manually and so on, >>> but that gets a bit complicated quite soon I guess (in case of r300 it >>> probably also increases chances a shader won't fit onto hardware a lot). >>> Maybe misrendering things would still be an option, I think it would >>> mostly be clamp modes which wouldn't work correctly, since AFAIK you >>> could make even mipmaps work (on r300 at least). >>> >>> Roland >>> >> > > Cheers Jakob. > -- Only fools are easily impressed by what is only barely beyond their reach. ~ Unknown Corbin Simpson <mostawesomed...@gmail.com> ------------------------------------------------------------------------------ This SF.Net email is sponsored by the Verizon Developer Community Take advantage of Verizon's best-in-class app development support A streamlined, 14 day to market process makes app distribution fast and easy Join now and get one step closer to millions of Verizon customers http://p.sf.net/sfu/verizon-dev2dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev