wined3d: Explicitly pass d3d_info and gl_info to context_stream_info_from_declaration().
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
8bdbbf4fcf
commit
2338060142
|
@ -3045,12 +3045,13 @@ static BOOL fixed_get_input(BYTE usage, BYTE usage_idx, unsigned int *regnum)
|
|||
}
|
||||
|
||||
/* Context activation is done by the caller. */
|
||||
void context_stream_info_from_declaration(struct wined3d_context *context,
|
||||
const struct wined3d_state *state, struct wined3d_stream_info *stream_info)
|
||||
void wined3d_stream_info_from_declaration(struct wined3d_stream_info *stream_info,
|
||||
const struct wined3d_state *state, const struct wined3d_gl_info *gl_info,
|
||||
const struct wined3d_d3d_info *d3d_info)
|
||||
{
|
||||
/* We need to deal with frequency data! */
|
||||
struct wined3d_vertex_declaration *declaration = state->vertex_declaration;
|
||||
BOOL generic_attributes = context->d3d_info->ffp_generic_attributes;
|
||||
BOOL generic_attributes = d3d_info->ffp_generic_attributes;
|
||||
BOOL use_vshader = use_vs(state);
|
||||
unsigned int i;
|
||||
|
||||
|
@ -3142,7 +3143,7 @@ void context_stream_info_from_declaration(struct wined3d_context *context,
|
|||
stream_info->elements[idx].divisor = 0;
|
||||
}
|
||||
|
||||
if (!context->gl_info->supported[ARB_VERTEX_ARRAY_BGRA]
|
||||
if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA]
|
||||
&& element->format->id == WINED3DFMT_B8G8R8A8_UNORM)
|
||||
{
|
||||
stream_info->swizzle_map |= 1u << idx;
|
||||
|
@ -3162,7 +3163,7 @@ static void context_update_stream_info(struct wined3d_context *context, const st
|
|||
unsigned int i;
|
||||
WORD map;
|
||||
|
||||
context_stream_info_from_declaration(context, state, stream_info);
|
||||
wined3d_stream_info_from_declaration(stream_info, state, gl_info, d3d_info);
|
||||
|
||||
stream_info->all_vbo = 1;
|
||||
context->num_buffer_queries = 0;
|
||||
|
@ -3510,7 +3511,7 @@ BOOL context_apply_draw_state(struct wined3d_context *context,
|
|||
context_load_unordered_access_resources(context, state->shader[WINED3D_SHADER_TYPE_PIXEL],
|
||||
state->unordered_access_view[WINED3D_PIPELINE_GRAPHICS]);
|
||||
/* TODO: Right now the dependency on the vertex shader is necessary
|
||||
* since context_stream_info_from_declaration depends on the reg_maps of
|
||||
* since wined3d_stream_info_from_declaration() depends on the reg_maps of
|
||||
* the current VS but maybe it's possible to relax the coupling in some
|
||||
* situations at least. */
|
||||
if (isStateDirty(context, STATE_VDECL) || isStateDirty(context, STATE_STREAMSRC)
|
||||
|
|
|
@ -3080,7 +3080,6 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device,
|
|||
struct wined3d_state *state = &device->state;
|
||||
struct wined3d_stream_info stream_info;
|
||||
struct wined3d_resource *resource;
|
||||
struct wined3d_context *context;
|
||||
struct wined3d_box box = {0};
|
||||
struct wined3d_shader *vs;
|
||||
unsigned int i;
|
||||
|
@ -3097,9 +3096,7 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device,
|
|||
|
||||
vs = state->shader[WINED3D_SHADER_TYPE_VERTEX];
|
||||
state->shader[WINED3D_SHADER_TYPE_VERTEX] = NULL;
|
||||
context = context_acquire(device, NULL, 0);
|
||||
context_stream_info_from_declaration(context, state, &stream_info);
|
||||
context_release(context);
|
||||
wined3d_stream_info_from_declaration(&stream_info, state, &device->adapter->gl_info, &device->adapter->d3d_info);
|
||||
state->shader[WINED3D_SHADER_TYPE_VERTEX] = vs;
|
||||
|
||||
/* We can't convert FROM a VBO, and vertex buffers used to source into
|
||||
|
|
|
@ -72,6 +72,49 @@
|
|||
#define WINED3D_QUIRK_LIMITED_TEX_FILTERING 0x00000100
|
||||
#define WINED3D_QUIRK_BROKEN_ARB_FOG 0x00000200
|
||||
|
||||
enum wined3d_ffp_idx
|
||||
{
|
||||
WINED3D_FFP_POSITION = 0,
|
||||
WINED3D_FFP_BLENDWEIGHT = 1,
|
||||
WINED3D_FFP_BLENDINDICES = 2,
|
||||
WINED3D_FFP_NORMAL = 3,
|
||||
WINED3D_FFP_PSIZE = 4,
|
||||
WINED3D_FFP_DIFFUSE = 5,
|
||||
WINED3D_FFP_SPECULAR = 6,
|
||||
WINED3D_FFP_TEXCOORD0 = 7,
|
||||
WINED3D_FFP_TEXCOORD1 = 8,
|
||||
WINED3D_FFP_TEXCOORD2 = 9,
|
||||
WINED3D_FFP_TEXCOORD3 = 10,
|
||||
WINED3D_FFP_TEXCOORD4 = 11,
|
||||
WINED3D_FFP_TEXCOORD5 = 12,
|
||||
WINED3D_FFP_TEXCOORD6 = 13,
|
||||
WINED3D_FFP_TEXCOORD7 = 14,
|
||||
WINED3D_FFP_ATTRIBS_COUNT = 15,
|
||||
};
|
||||
|
||||
enum wined3d_ffp_emit_idx
|
||||
{
|
||||
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,
|
||||
};
|
||||
|
||||
/* Texture format fixups */
|
||||
|
||||
enum fixup_channel_source
|
||||
|
@ -110,6 +153,47 @@ struct color_fixup_desc
|
|||
};
|
||||
#include <poppack.h>
|
||||
|
||||
struct wined3d_d3d_limits
|
||||
{
|
||||
unsigned int vs_version, hs_version, ds_version, gs_version, ps_version, cs_version;
|
||||
DWORD vs_uniform_count;
|
||||
DWORD ps_uniform_count;
|
||||
unsigned int varying_count;
|
||||
unsigned int ffp_textures;
|
||||
unsigned int ffp_blend_stages;
|
||||
unsigned int ffp_vertex_blend_matrices;
|
||||
unsigned int active_light_count;
|
||||
};
|
||||
|
||||
typedef void (WINE_GLAPI *wined3d_ffp_attrib_func)(const void *data);
|
||||
typedef void (WINE_GLAPI *wined3d_ffp_texcoord_func)(GLenum unit, const void *data);
|
||||
typedef void (WINE_GLAPI *wined3d_generic_attrib_func)(GLuint idx, const void *data);
|
||||
extern wined3d_ffp_attrib_func specular_func_3ubv DECLSPEC_HIDDEN;
|
||||
|
||||
struct wined3d_ffp_attrib_ops
|
||||
{
|
||||
wined3d_ffp_attrib_func position[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_attrib_func diffuse[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_attrib_func specular[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_attrib_func normal[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_texcoord_func texcoord[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_generic_attrib_func generic[WINED3D_FFP_EMIT_COUNT];
|
||||
};
|
||||
|
||||
struct wined3d_d3d_info
|
||||
{
|
||||
struct wined3d_d3d_limits limits;
|
||||
struct wined3d_ffp_attrib_ops ffp_attrib_ops;
|
||||
BOOL xyzrhw;
|
||||
BOOL emulated_flatshading;
|
||||
BOOL ffp_generic_attributes;
|
||||
BOOL vs_clipping;
|
||||
BOOL shader_color_key;
|
||||
DWORD valid_rt_mask;
|
||||
DWORD wined3d_creation_flags;
|
||||
BOOL shader_double_precision;
|
||||
};
|
||||
|
||||
static const struct color_fixup_desc COLOR_FIXUP_IDENTITY =
|
||||
{0, CHANNEL_SOURCE_X, 0, CHANNEL_SOURCE_Y, 0, CHANNEL_SOURCE_Z, 0, CHANNEL_SOURCE_W};
|
||||
|
||||
|
@ -1288,49 +1372,6 @@ do { \
|
|||
#define checkGLcall(A) do {} while(0)
|
||||
#endif
|
||||
|
||||
enum wined3d_ffp_idx
|
||||
{
|
||||
WINED3D_FFP_POSITION = 0,
|
||||
WINED3D_FFP_BLENDWEIGHT = 1,
|
||||
WINED3D_FFP_BLENDINDICES = 2,
|
||||
WINED3D_FFP_NORMAL = 3,
|
||||
WINED3D_FFP_PSIZE = 4,
|
||||
WINED3D_FFP_DIFFUSE = 5,
|
||||
WINED3D_FFP_SPECULAR = 6,
|
||||
WINED3D_FFP_TEXCOORD0 = 7,
|
||||
WINED3D_FFP_TEXCOORD1 = 8,
|
||||
WINED3D_FFP_TEXCOORD2 = 9,
|
||||
WINED3D_FFP_TEXCOORD3 = 10,
|
||||
WINED3D_FFP_TEXCOORD4 = 11,
|
||||
WINED3D_FFP_TEXCOORD5 = 12,
|
||||
WINED3D_FFP_TEXCOORD6 = 13,
|
||||
WINED3D_FFP_TEXCOORD7 = 14,
|
||||
WINED3D_FFP_ATTRIBS_COUNT = 15,
|
||||
};
|
||||
|
||||
enum wined3d_ffp_emit_idx
|
||||
{
|
||||
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
|
||||
{
|
||||
GLuint buffer_object;
|
||||
|
@ -1366,6 +1407,10 @@ struct wined3d_stream_info
|
|||
WORD use_map; /* MAX_ATTRIBS, 16 */
|
||||
};
|
||||
|
||||
void wined3d_stream_info_from_declaration(struct wined3d_stream_info *stream_info,
|
||||
const struct wined3d_state *state, const struct wined3d_gl_info *gl_info,
|
||||
const struct wined3d_d3d_info *d3d_info) DECLSPEC_HIDDEN;
|
||||
|
||||
void draw_primitive(struct wined3d_device *device, const struct wined3d_state *state,
|
||||
int base_vertex_idx, unsigned int start_idx, unsigned int index_count,
|
||||
unsigned int start_instance, unsigned int instance_count, BOOL indexed) DECLSPEC_HIDDEN;
|
||||
|
@ -1887,8 +1932,6 @@ void context_state_drawbuf(struct wined3d_context *context,
|
|||
void context_state_fb(struct wined3d_context *context,
|
||||
const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN;
|
||||
void context_surface_update(struct wined3d_context *context, const struct wined3d_surface *surface) DECLSPEC_HIDDEN;
|
||||
void context_stream_info_from_declaration(struct wined3d_context *context,
|
||||
const struct wined3d_state *state, struct wined3d_stream_info *stream_info) DECLSPEC_HIDDEN;
|
||||
|
||||
/*****************************************************************************
|
||||
* Internal representation of a light
|
||||
|
@ -2287,47 +2330,6 @@ struct wined3d_driver_info
|
|||
DWORD version_low;
|
||||
};
|
||||
|
||||
struct wined3d_d3d_limits
|
||||
{
|
||||
unsigned int vs_version, hs_version, ds_version, gs_version, ps_version, cs_version;
|
||||
DWORD vs_uniform_count;
|
||||
DWORD ps_uniform_count;
|
||||
UINT varying_count;
|
||||
UINT ffp_textures;
|
||||
UINT ffp_blend_stages;
|
||||
UINT ffp_vertex_blend_matrices;
|
||||
unsigned int active_light_count;
|
||||
};
|
||||
|
||||
typedef void (WINE_GLAPI *wined3d_ffp_attrib_func)(const void *data);
|
||||
typedef void (WINE_GLAPI *wined3d_ffp_texcoord_func)(GLenum unit, const void *data);
|
||||
typedef void (WINE_GLAPI *wined3d_generic_attrib_func)(GLuint idx, const void *data);
|
||||
extern wined3d_ffp_attrib_func specular_func_3ubv DECLSPEC_HIDDEN;
|
||||
|
||||
struct wined3d_ffp_attrib_ops
|
||||
{
|
||||
wined3d_ffp_attrib_func position[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_attrib_func diffuse[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_attrib_func specular[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_attrib_func normal[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_ffp_texcoord_func texcoord[WINED3D_FFP_EMIT_COUNT];
|
||||
wined3d_generic_attrib_func generic[WINED3D_FFP_EMIT_COUNT];
|
||||
};
|
||||
|
||||
struct wined3d_d3d_info
|
||||
{
|
||||
struct wined3d_d3d_limits limits;
|
||||
struct wined3d_ffp_attrib_ops ffp_attrib_ops;
|
||||
BOOL xyzrhw;
|
||||
BOOL emulated_flatshading;
|
||||
BOOL ffp_generic_attributes;
|
||||
BOOL vs_clipping;
|
||||
BOOL shader_color_key;
|
||||
DWORD valid_rt_mask;
|
||||
DWORD wined3d_creation_flags;
|
||||
BOOL shader_double_precision;
|
||||
};
|
||||
|
||||
/* The adapter structure */
|
||||
struct wined3d_adapter
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue