Christoph Bumiller wrote on 2010-02-25 19:39: > On 25.02.2010 19:00, Brian Paul wrote: > >> Roland Scheidegger wrote: >> >> >>> On 25.02.2010 18:39, michal wrote: >>> >>> >>>> Roland Scheidegger wrote on 2010-02-24 15:18: >>>> >>>> >>>>> On 24.02.2010 12:48, Christoph Bumiller wrote: >>>>> >>>>> >>>>> >>>>>> This wasn't a problem before because textures and samplers were >>>>>> linked 1:1, but in view of the gallium-gpu4-texture-opcodes branch, >>>>>> this coordinate normalization bit becomes a problem. >>>>>> >>>>>> NV50 hardware has that bit in the RESOURCE binding, and not the >>>>>> SAMPLER binding, and you can imagine that this will lead to us having >>>>>> to jump through a few annoying looking hoops to accomodate. >>>>>> >>>>>> As far as I can see, neither D3D10 nor D3D11 nor OpenGL nor CUDA have >>>>>> sampler states that are decoupled from the texture, and which contain >>>>>> a normalized coordinates bit, so it's worth considering not having it >>>>>> there >>>>>> in gallium either. >>>>>> >>>>>> For OpenGL, unnormalized coordinates are only used for RECT textures, >>>>>> and in this case it makes sense to make it a property of the texture. >>>>>> >>>>>> >>>>>> >>>>> I agree this is not sampler state, but I don't quite agree this should >>>>> be texture state. >>>>> This changes how texture coordinates get interpreted in the interpolator >>>>> - in that sense it is similar to the cylindrical texture coord wrap >>>>> which we moved away from sampler state recently. This one got moved to >>>>> shader declaration. I wonder if the normalization bit should be treated >>>>> the same. >>>>> Though OTOH you're quite right that in OpenGL this really is texture >>>>> property (it is a different texture target after all), and afaik d3d >>>>> doesn't support non-normalized coords (?). Hmm... >>>>> >>>>> >>>>> >>>>> >>>> Isn't it the case that for RECT targets we clear the bit, and for others >>>> we always set it? >>>> >>>> In mesa st I see: >>>> >>>> if (texobj->Target != GL_TEXTURE_RECTANGLE_ARB) >>>> sampler->normalized_coords = 1; >>>> >>>> By definition, RECT texture with normalised coordinates is just an NPOT. >>>> If we removed this apparently redundant flag, would that make nouveau >>>> developers life easier? >>>> >>>> >>> But we don't have rect targets in gallium hence we need the flag. I >>> think conceptually this makes sense since for texture layouts etc. >>> drivers won't care one bit if this is 2d npot or rect texture. >>> Though I guess introducing rect targets instead would be another option. >>> >>> >> We should also be thinking about texture array targets. With a 2D >> texture array, the S and T coords would be normalized, but not R. >> >> I think we either need new texture targets for RECT, 1D_ARRAY, >> 2D_ARRAY, etc. or per-dimension normalization flags. I'm thinking the >> former may be better (simpler) since textures are created as a >> particular type and not changed afterward. We also know the texture >> type/target when we execute TEX shader instructions. If it's part of >> sampler state it gives the impression that it's variable state, but it >> really isn't. >> >> >> > We'd also need a BUFFER target then, they also have scaled > coordinates. > The problem is I think that this drivers gallium a little towards > catering towards specific APIs (OpenGL). > > OpenCL for instance does have a per sampler normalization bit > iirc, but it seems there's no hardware that reflects this property. > > Then again, TGSI does have a RECT target already, so we might > as well add corresponding PIPE targets. > > I want to remind again that the normalization bit only becomes > problematic once samplers and textures can be independently > combined, and that it seems older hardware can't nicely do this > anyway, except if they take it upon them to recompile their shaders > (although I hear some need to do that already ...) > > I admit I'm actually being a bit selfish here, trying to get the interface > more adapted to nv50, but, if other hardware doesn't have conflicting > views, why not ? Maybe I should accept nv50 is getting old. > Why do you say that? NV50 is a DX10-level card -- it deserves better treatment. Your request is valid and we should go and ask gallium gatekeepers to get this change pushed.
Thanks. ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev