wined3d: Simplify "ffp_attrib_ops" initialization.

Signed-off-by: Józef Kucia <jkucia@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Józef Kucia 2016-05-23 00:41:55 +02:00 committed by Alexandre Julliard
parent 91a67856db
commit 77608ba4fc
2 changed files with 34 additions and 99 deletions

View File

@ -5620,13 +5620,13 @@ HRESULT CDECL wined3d_device_create(struct wined3d *wined3d, UINT adapter_idx, e
static void WINE_GLAPI invalid_func(const void *data)
{
ERR("Invalid vertex attribute function called\n");
ERR("Invalid vertex attribute function called.\n");
DebugBreak();
}
static void WINE_GLAPI invalid_texcoord_func(GLenum unit, const void *data)
{
ERR("Invalid texcoord function called\n");
ERR("Invalid texcoord function called.\n");
DebugBreak();
}
@ -5643,7 +5643,7 @@ static void WINE_GLAPI position_d3dcolor(const void *data)
{
DWORD pos = *((const DWORD *)data);
FIXME("Add a test for fixed function position from d3dcolor type\n");
FIXME("Add a test for fixed function position from d3dcolor type.\n");
context_get_current()->gl_info->gl_ops.gl.p_glVertex4s(D3DCOLOR_B_R(pos),
D3DCOLOR_B_G(pos),
D3DCOLOR_B_B(pos),
@ -5691,7 +5691,7 @@ static void WINE_GLAPI specular_d3dcolor(const void *data)
static void WINE_GLAPI warn_no_specular_func(const void *data)
{
WARN("GL_EXT_secondary_color not supported\n");
WARN("GL_EXT_secondary_color not supported.\n");
}
static void WINE_GLAPI generic_d3dcolor(GLuint idx, const void *data)
@ -5740,112 +5740,56 @@ static void wined3d_adapter_init_ffp_attrib_ops(struct wined3d_adapter *adapter)
const struct wined3d_gl_info *gl_info = &adapter->gl_info;
struct wined3d_d3d_info *d3d_info = &adapter->d3d_info;
struct wined3d_ffp_attrib_ops *ops = &d3d_info->ffp_attrib_ops;
unsigned int i;
for (i = 0; i < WINED3D_FFP_EMIT_COUNT; ++i)
{
ops->position[i] = invalid_func;
ops->diffuse[i] = invalid_func;
ops->specular[i] = invalid_func;
ops->normal[i] = invalid_func;
ops->texcoord[i] = invalid_texcoord_func;
ops->generic[i] = invalid_generic_attrib_func;
}
ops->position[WINED3D_FFP_EMIT_FLOAT1] = invalid_func;
ops->position[WINED3D_FFP_EMIT_FLOAT2] = invalid_func;
ops->position[WINED3D_FFP_EMIT_FLOAT3] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glVertex3fv;
if (!d3d_info->xyzrhw)
ops->position[WINED3D_FFP_EMIT_FLOAT4] = position_float4;
else
ops->position[WINED3D_FFP_EMIT_FLOAT4] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glVertex4fv;
ops->position[WINED3D_FFP_EMIT_D3DCOLOR] = position_d3dcolor;
ops->position[WINED3D_FFP_EMIT_UBYTE4] = invalid_func;
ops->position[WINED3D_FFP_EMIT_SHORT2] = invalid_func;
ops->position[WINED3D_FFP_EMIT_SHORT4] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glVertex2sv;
ops->position[WINED3D_FFP_EMIT_UBYTE4N] = invalid_func;
ops->position[WINED3D_FFP_EMIT_SHORT2N] = invalid_func;
ops->position[WINED3D_FFP_EMIT_SHORT4N] = invalid_func;
ops->position[WINED3D_FFP_EMIT_USHORT2N] = invalid_func;
ops->position[WINED3D_FFP_EMIT_USHORT4N] = invalid_func;
ops->position[WINED3D_FFP_EMIT_UDEC3] = invalid_func;
ops->position[WINED3D_FFP_EMIT_DEC3N] = invalid_func;
ops->position[WINED3D_FFP_EMIT_FLOAT16_2] = invalid_func;
ops->position[WINED3D_FFP_EMIT_FLOAT16_4] = invalid_func;
ops->position[WINED3D_FFP_EMIT_INVALID] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_FLOAT1] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_FLOAT2] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_FLOAT3] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glColor3fv;
ops->diffuse[WINED3D_FFP_EMIT_FLOAT4] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glColor4fv;
ops->diffuse[WINED3D_FFP_EMIT_D3DCOLOR] = diffuse_d3dcolor;
ops->diffuse[WINED3D_FFP_EMIT_UBYTE4] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_SHORT2] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_SHORT4] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_UBYTE4N] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glColor4ubv;
ops->diffuse[WINED3D_FFP_EMIT_SHORT2N] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_SHORT4N] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glColor4sv;
ops->diffuse[WINED3D_FFP_EMIT_USHORT2N] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_USHORT4N] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glColor4usv;
ops->diffuse[WINED3D_FFP_EMIT_UDEC3] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_DEC3N] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_FLOAT16_2] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_FLOAT16_4] = invalid_func;
ops->diffuse[WINED3D_FFP_EMIT_INVALID] = invalid_func;
/* No 4 component entry points here. */
ops->specular[WINED3D_FFP_EMIT_FLOAT1] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_FLOAT2] = invalid_func;
if (gl_info->supported[EXT_SECONDARY_COLOR])
ops->specular[WINED3D_FFP_EMIT_FLOAT3] = (wined3d_ffp_attrib_func)GL_EXTCALL(glSecondaryColor3fvEXT);
else
ops->specular[WINED3D_FFP_EMIT_FLOAT3] = warn_no_specular_func;
ops->specular[WINED3D_FFP_EMIT_FLOAT4] = invalid_func;
if (gl_info->supported[EXT_SECONDARY_COLOR])
ops->specular[WINED3D_FFP_EMIT_D3DCOLOR] = specular_d3dcolor;
else
ops->specular[WINED3D_FFP_EMIT_D3DCOLOR] = warn_no_specular_func;
ops->specular[WINED3D_FFP_EMIT_UBYTE4] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_SHORT2] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_SHORT4] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_UBYTE4N] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_SHORT2N] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_SHORT4N] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_USHORT2N] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_USHORT4N] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_UDEC3] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_DEC3N] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_FLOAT16_2] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_FLOAT16_4] = invalid_func;
ops->specular[WINED3D_FFP_EMIT_INVALID] = invalid_func;
/* Only 3 component entry points here. Test how others behave. Float4
* normals are used by one of our tests, trying to pass it to the pixel
* shader, which fails on Windows. */
ops->normal[WINED3D_FFP_EMIT_FLOAT1] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_FLOAT2] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_FLOAT3] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glNormal3fv;
/* Just ignore the 4th value. */
ops->normal[WINED3D_FFP_EMIT_FLOAT4] = (wined3d_ffp_attrib_func)gl_info->gl_ops.gl.p_glNormal3fv;
ops->normal[WINED3D_FFP_EMIT_D3DCOLOR] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_UBYTE4] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_SHORT2] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_SHORT4] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_UBYTE4N] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_SHORT2N] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_SHORT4N] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_USHORT2N] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_USHORT4N] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_UDEC3] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_DEC3N] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_FLOAT16_2] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_FLOAT16_4] = invalid_func;
ops->normal[WINED3D_FFP_EMIT_INVALID] = invalid_func;
ops->texcoord[WINED3D_FFP_EMIT_FLOAT1] = (wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord1fvARB;
ops->texcoord[WINED3D_FFP_EMIT_FLOAT2] = (wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord2fvARB;
ops->texcoord[WINED3D_FFP_EMIT_FLOAT3] = (wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord3fvARB;
ops->texcoord[WINED3D_FFP_EMIT_FLOAT4] = (wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord4fvARB;
ops->texcoord[WINED3D_FFP_EMIT_D3DCOLOR] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_UBYTE4] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_SHORT2] = (wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord2svARB;
ops->texcoord[WINED3D_FFP_EMIT_SHORT4] = (wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord4svARB;
ops->texcoord[WINED3D_FFP_EMIT_UBYTE4N] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_SHORT2N] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_SHORT4N] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_USHORT2N] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_USHORT4N] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_UDEC3] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_DEC3N] = invalid_texcoord_func;
if (gl_info->supported[NV_HALF_FLOAT])
{
/* Not supported by ARB_HALF_FLOAT_VERTEX, so check for NV_HALF_FLOAT. */
@ -5854,12 +5798,6 @@ static void wined3d_adapter_init_ffp_attrib_ops(struct wined3d_adapter *adapter)
ops->texcoord[WINED3D_FFP_EMIT_FLOAT16_4] =
(wined3d_ffp_texcoord_func)gl_info->gl_ops.ext.p_glMultiTexCoord4hvNV;
}
else
{
ops->texcoord[WINED3D_FFP_EMIT_FLOAT16_2] = invalid_texcoord_func;
ops->texcoord[WINED3D_FFP_EMIT_FLOAT16_4] = invalid_texcoord_func;
}
ops->texcoord[WINED3D_FFP_EMIT_INVALID] = invalid_texcoord_func;
ops->generic[WINED3D_FFP_EMIT_FLOAT1] = (wined3d_generic_attrib_func)gl_info->gl_ops.ext.p_glVertexAttrib1fv;
ops->generic[WINED3D_FFP_EMIT_FLOAT2] = (wined3d_generic_attrib_func)gl_info->gl_ops.ext.p_glVertexAttrib2fv;
@ -5878,8 +5816,6 @@ static void wined3d_adapter_init_ffp_attrib_ops(struct wined3d_adapter *adapter)
ops->generic[WINED3D_FFP_EMIT_SHORT4N] = (wined3d_generic_attrib_func)gl_info->gl_ops.ext.p_glVertexAttrib4Nsv;
ops->generic[WINED3D_FFP_EMIT_USHORT2N] = generic_ushort2n;
ops->generic[WINED3D_FFP_EMIT_USHORT4N] = (wined3d_generic_attrib_func)gl_info->gl_ops.ext.p_glVertexAttrib4Nusv;
ops->generic[WINED3D_FFP_EMIT_UDEC3] = invalid_generic_attrib_func;
ops->generic[WINED3D_FFP_EMIT_DEC3N] = invalid_generic_attrib_func;
if (gl_info->supported[NV_HALF_FLOAT] && gl_info->supported[NV_VERTEX_PROGRAM])
{
ops->generic[WINED3D_FFP_EMIT_FLOAT16_2] =
@ -5892,7 +5828,6 @@ static void wined3d_adapter_init_ffp_attrib_ops(struct wined3d_adapter *adapter)
ops->generic[WINED3D_FFP_EMIT_FLOAT16_2] = generic_float16_2;
ops->generic[WINED3D_FFP_EMIT_FLOAT16_4] = generic_float16_4;
}
ops->generic[WINED3D_FFP_EMIT_INVALID] = invalid_generic_attrib_func;
}
static void wined3d_adapter_init_fb_cfgs(struct wined3d_adapter *adapter, HDC dc)

View File

@ -1149,25 +1149,25 @@ enum wined3d_ffp_idx
enum wined3d_ffp_emit_idx
{
WINED3D_FFP_EMIT_FLOAT1 = 0,
WINED3D_FFP_EMIT_FLOAT2 = 1,
WINED3D_FFP_EMIT_FLOAT3 = 2,
WINED3D_FFP_EMIT_FLOAT4 = 3,
WINED3D_FFP_EMIT_D3DCOLOR = 4,
WINED3D_FFP_EMIT_UBYTE4 = 5,
WINED3D_FFP_EMIT_SHORT2 = 6,
WINED3D_FFP_EMIT_SHORT4 = 7,
WINED3D_FFP_EMIT_UBYTE4N = 8,
WINED3D_FFP_EMIT_SHORT2N = 9,
WINED3D_FFP_EMIT_SHORT4N = 10,
WINED3D_FFP_EMIT_USHORT2N = 11,
WINED3D_FFP_EMIT_USHORT4N = 12,
WINED3D_FFP_EMIT_UDEC3 = 13,
WINED3D_FFP_EMIT_DEC3N = 14,
WINED3D_FFP_EMIT_FLOAT16_2 = 15,
WINED3D_FFP_EMIT_FLOAT16_4 = 16,
WINED3D_FFP_EMIT_INVALID = 17,
WINED3D_FFP_EMIT_COUNT = 18
WINED3D_FFP_EMIT_FLOAT1,
WINED3D_FFP_EMIT_FLOAT2,
WINED3D_FFP_EMIT_FLOAT3,
WINED3D_FFP_EMIT_FLOAT4,
WINED3D_FFP_EMIT_D3DCOLOR,
WINED3D_FFP_EMIT_UBYTE4,
WINED3D_FFP_EMIT_SHORT2,
WINED3D_FFP_EMIT_SHORT4,
WINED3D_FFP_EMIT_UBYTE4N,
WINED3D_FFP_EMIT_SHORT2N,
WINED3D_FFP_EMIT_SHORT4N,
WINED3D_FFP_EMIT_USHORT2N,
WINED3D_FFP_EMIT_USHORT4N,
WINED3D_FFP_EMIT_UDEC3,
WINED3D_FFP_EMIT_DEC3N,
WINED3D_FFP_EMIT_FLOAT16_2,
WINED3D_FFP_EMIT_FLOAT16_4,
WINED3D_FFP_EMIT_INVALID,
WINED3D_FFP_EMIT_COUNT
};
struct wined3d_bo_address