[17/20] WineD3D: Vertex buffers can use the declaration from the device

Ivan Gyurdiev ivg231 at gmail.com
Sat Jan 6 15:06:48 CST 2007


Stefan Dösinger wrote:
> Now that the decoded vertex declaration is put into the device with 
> baseVertexIndex = 0, vertex buffers can just memcpy it instead of decoding it 
>   
Here's an issue I see - isn't introduced by your patch, but I am just 
confused.
In the vertex buffer code:

    if(device->stateBlock->vertexShader != NULL && 
wined3d_settings.vs_mode != VS_NONE
       &&((IWineD3DVertexShaderImpl 
*)device->stateBlock->vertexShader)->baseShader.function != NULL
       && GL_SUPPORT(ARB_VERTEX_PROGRAM)) {
        /* Case 1: Vertex Shader: No conversion */
        TRACE("Vertex Shader, no conversion needed\n");
    } else if(device->stateBlock->vertexDecl || 
device->stateBlock->vertexShader) {


1) No code should be looking at wined3d_settings.vs_mode.
 
This is the user spec from winecfg, which is taken into account as one 
of the things that determines shader mode. There are a number of other 
things involved - use device->shader_mode instead.

2) GL_SUPPORT(ARB_VERTEX_PROGRAM) has already been accounted for when 
selecting the shader mode in the device

3) This if statement looks kind of like the "useVertexShaderFunction" 
variable in drawprim

4) Why is the "device->stateblock->vertexShader" case included in the 
else statement? You cannot use this function with a vertex shader - it 
would not work at all, as the strided data is formatted differently 
(same issue as the trace function discussed earlier).




More information about the wine-patches mailing list