[PATCH 0/7] wined3d: blit set_shader texture_target activation cleanup

Roderick Colenbrander thunderbird2k at gmail.com
Wed May 19 04:30:24 CDT 2010


>> At a later stage I might disallow calling set_shader when we don't need the shader.
> How does the caller know when a shader is needed?
>

In the end set_shader will only be called by blit_shader->blit_surface.

The main issue I'm facing is p8 uploads which are completely broken
right now (a regression). At the beginning of the week I wanted to add
BLIT_OP_COMPLEX_UPLOAD to fix this but Henri didn't like that. This
'fixed' the bug where d3dfmt_get_conv was not allowed by
blit_supported to offer the 8-bit shader. This fix would only apply to
the LoadLocation part which is where the 8-bit upload takes place.

The suggested direction was to fix blit_supported to allow 8-bit blits
under 'special circumstances'. Such a change would not only allow
8-bit uploads but also allow 8-bit -> 8-bit Blt/BltFast
(blit_supported can't distinguish between the two uses since it has
too vague information). Allowing the 8-bit -> 8-Blt/BltFast led to
these changes (I'm not that happy about allowing those).

At this point BltOverride (and some of the other helpers derived from
it) blindly call set_shader when it is not needed which wouldn't work
here. The set_shader call at this point lacks the knowledge (it has
only one of the surfaces) to not apply the shader in this case. I
don't think I can add the missing surface because not all places which
call set_shader have it. For this reason I wanted to take the texture
target activation out of 'set_shader' and lift this to 'blit_surface'
which the current callers are supposed to become at some point. Some
places (e.g. swapchain_blit) imply that that the shader is needed when
a complex source fixup is detected and the same for blit_to_drawable,
so in BltOverride/arbfp_blit_surface I can just not call set_shader.

Right now I don't know anymore how it should be fixed at this stage
without re-adding the ugly extension checks which existed before in
d3dfmt_get_conv or other or other hacks like checking for
'is_complex_fixup' in d3dfmt_get_conv :(

Roderick



More information about the wine-devel mailing list