[1/2] wined3d: unbound texture units should sample black instead of white.
stefandoesinger at gmx.at
Fri Jul 2 05:37:05 CDT 2010
Am 01.07.2010 um 20:58 schrieb Fabian Bieler:
> I hoped that OpenGL took care of those cases. According to the spec samplers
> with incomplete textures bound to them should return (0, 0, 0, 1), too.
> Wouldn't sampling from a texture unit to which the binding of matching
> dimensionality is 0 count as incomplete? (At least as long as no one uploads
> an image to it, I'm not sure if it's legal to use texture name 0)
Part of the problem is that we don't maintain a texture dimension that isn't used on a sampler. E.g.
bind Volume texture to sampler 0
draw with a shader reading the volume texture
bind 2D texture to sampler 0
draw with a shader reading the 2D texture
bind a shader reading volume textures
draw with that shader
The last step reads from the volume texture bound in step 0, but I guess the correct thing would be to return 0,0,0,1 because the sampler doesn't match the shader. That's why I am afraid you'll have to fix this in the shader, by not sampling at all if the texture doesn't match.
> Anyhow, I just did some testing and found out that nvidia returns (0, 0, 0, 0)
> for incomplete textures and 'unbound' texture units i.e. bound to 0.
> Maybe it does that on windows for D3D, too. I only tested on AMD and the
> reference rasterizer (which both return (0, 0, 0, 1)) and bug 14942 only
> depends on the rgb components.
I can do some testing, but first I have to fix the existing tests. I get about 1000 failures on my Win7+Nvidia box.
> Also: If you want to work around the issue with more dummy textures, wouldn't
> you also have to bind dummy textures to all available texture units (and not
> just the ones exposed to the fixed-function-pipeline)?
I don't think dummy textures are the way to go here. They're needed for fixed function for texture ops that don't involve textures, because otherwise ARB_texture_combiners returns an error. E.g.
stage 1 texture: NULL
stage 1 color op: D3DTOP_ADD
stage 1 color arg1: D3DTA_PREVIOUS
stage 1 color arg2: D3DTA_TEXFACTOR
The texture isn't used here, but the texture_combiner API says that using a stage without a texture is an error, hence the dummy textures. We shouldn't need them for the nvrc, arbfp and atifs pipelines.
More information about the wine-devel