wined3d: GL_ARB_fragment_program ffp implementation.
This commit is contained in:
parent
bc4435e406
commit
14b24058d6
File diff suppressed because it is too large
Load Diff
|
@ -2234,8 +2234,8 @@ err_out:
|
||||||
IWineD3DStateBlock_Release((IWineD3DStateBlock *) This->stateBlock);
|
IWineD3DStateBlock_Release((IWineD3DStateBlock *) This->stateBlock);
|
||||||
This->stateBlock = NULL;
|
This->stateBlock = NULL;
|
||||||
}
|
}
|
||||||
This->shader_backend->shader_free_private(iface);
|
|
||||||
This->frag_pipe->free_private(iface);
|
This->frag_pipe->free_private(iface);
|
||||||
|
This->shader_backend->shader_free_private(iface);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2324,8 +2324,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface, D3DCB_D
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Destroy the shader backend. Note that this has to happen after all shaders are destroyed. */
|
/* Destroy the shader backend. Note that this has to happen after all shaders are destroyed. */
|
||||||
This->shader_backend->shader_free_private(iface);
|
|
||||||
This->frag_pipe->free_private(iface);
|
This->frag_pipe->free_private(iface);
|
||||||
|
This->shader_backend->shader_free_private(iface);
|
||||||
|
|
||||||
/* Release the buffers (with sanity checks)*/
|
/* Release the buffers (with sanity checks)*/
|
||||||
TRACE("Releasing the depth stencil buffer at %p\n", This->stencilBufferTarget);
|
TRACE("Releasing the depth stencil buffer at %p\n", This->stencilBufferTarget);
|
||||||
|
@ -7252,8 +7252,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Reset(IWineD3DDevice* iface, WINED3DPRE
|
||||||
This->depth_blt_rb_w = 0;
|
This->depth_blt_rb_w = 0;
|
||||||
This->depth_blt_rb_h = 0;
|
This->depth_blt_rb_h = 0;
|
||||||
}
|
}
|
||||||
This->shader_backend->shader_free_private(iface);
|
|
||||||
This->frag_pipe->free_private(iface);
|
This->frag_pipe->free_private(iface);
|
||||||
|
This->shader_backend->shader_free_private(iface);
|
||||||
|
|
||||||
for (i = 0; i < GL_LIMITS(textures); i++) {
|
for (i = 0; i < GL_LIMITS(textures); i++) {
|
||||||
/* Textures are recreated below */
|
/* Textures are recreated below */
|
||||||
|
|
|
@ -1963,6 +1963,7 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceType(IWineD3D *iface, UINT Adapter
|
||||||
/* Check if we support bumpmapping for a format */
|
/* Check if we support bumpmapping for a format */
|
||||||
static BOOL CheckBumpMapCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
|
static BOOL CheckBumpMapCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
|
||||||
{
|
{
|
||||||
|
/* TODO: Check this in the fixed function pipeline backend */
|
||||||
if(GL_SUPPORT(NV_REGISTER_COMBINERS) && GL_SUPPORT(NV_TEXTURE_SHADER2)) {
|
if(GL_SUPPORT(NV_REGISTER_COMBINERS) && GL_SUPPORT(NV_TEXTURE_SHADER2)) {
|
||||||
switch (CheckFormat) {
|
switch (CheckFormat) {
|
||||||
case WINED3DFMT_V8U8:
|
case WINED3DFMT_V8U8:
|
||||||
|
@ -1984,6 +1985,20 @@ static BOOL CheckBumpMapCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(GL_SUPPORT(ARB_FRAGMENT_PROGRAM)) {
|
||||||
|
switch (CheckFormat) {
|
||||||
|
case WINED3DFMT_V8U8:
|
||||||
|
case WINED3DFMT_V16U16:
|
||||||
|
case WINED3DFMT_L6V5U5:
|
||||||
|
case WINED3DFMT_X8L8V8U8:
|
||||||
|
case WINED3DFMT_Q8W8V8U8:
|
||||||
|
TRACE_(d3d_caps)("[OK]\n");
|
||||||
|
return TRUE;
|
||||||
|
default:
|
||||||
|
TRACE_(d3d_caps)("[FAILED]\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
TRACE_(d3d_caps)("[FAILED]\n");
|
TRACE_(d3d_caps)("[FAILED]\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2902,7 +2917,9 @@ static const struct fragment_pipeline *select_fragment_implementation(UINT Adapt
|
||||||
int ps_selected_mode;
|
int ps_selected_mode;
|
||||||
|
|
||||||
select_shader_mode(&GLINFO_LOCATION, DeviceType, &ps_selected_mode, &vs_selected_mode);
|
select_shader_mode(&GLINFO_LOCATION, DeviceType, &ps_selected_mode, &vs_selected_mode);
|
||||||
if(ps_selected_mode == SHADER_ATI) {
|
if((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL) && GL_SUPPORT(ARB_FRAGMENT_PROGRAM)) {
|
||||||
|
return &arbfp_fragment_pipeline;
|
||||||
|
} else if(ps_selected_mode == SHADER_ATI) {
|
||||||
return &atifs_fragment_pipeline;
|
return &atifs_fragment_pipeline;
|
||||||
} else if(GL_SUPPORT(NV_REGISTER_COMBINERS) && GL_SUPPORT(NV_TEXTURE_SHADER2)) {
|
} else if(GL_SUPPORT(NV_REGISTER_COMBINERS) && GL_SUPPORT(NV_TEXTURE_SHADER2)) {
|
||||||
return &nvts_fragment_pipeline;
|
return &nvts_fragment_pipeline;
|
||||||
|
|
|
@ -267,6 +267,8 @@ struct shader_arb_priv {
|
||||||
GLuint current_fprogram_id;
|
GLuint current_fprogram_id;
|
||||||
GLuint depth_blt_vprogram_id;
|
GLuint depth_blt_vprogram_id;
|
||||||
GLuint depth_blt_fprogram_id;
|
GLuint depth_blt_fprogram_id;
|
||||||
|
BOOL use_arbfp_fixed_func;
|
||||||
|
hash_table_t *fragment_shaders;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* X11 locking */
|
/* X11 locking */
|
||||||
|
@ -561,6 +563,7 @@ extern const struct StateEntryTemplate misc_state_template[];
|
||||||
extern const struct StateEntryTemplate ffp_vertexstate_template[];
|
extern const struct StateEntryTemplate ffp_vertexstate_template[];
|
||||||
extern const struct fragment_pipeline ffp_fragment_pipeline;
|
extern const struct fragment_pipeline ffp_fragment_pipeline;
|
||||||
extern const struct fragment_pipeline atifs_fragment_pipeline;
|
extern const struct fragment_pipeline atifs_fragment_pipeline;
|
||||||
|
extern const struct fragment_pipeline arbfp_fragment_pipeline;
|
||||||
extern const struct fragment_pipeline nvts_fragment_pipeline;
|
extern const struct fragment_pipeline nvts_fragment_pipeline;
|
||||||
extern const struct fragment_pipeline nvrc_fragment_pipeline;
|
extern const struct fragment_pipeline nvrc_fragment_pipeline;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue