Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
da1e5573
Commit
da1e5573
authored
Aug 03, 2009
by
Henri Verbeet
Committed by
Alexandre Julliard
Aug 03, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Rename WineD3DContext to struct wined3d_context.
parent
1d647283
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
414 additions
and
285 deletions
+414
-285
arb_program_shader.c
dlls/wined3d/arb_program_shader.c
+18
-11
ati_fragment_shader.c
dlls/wined3d/ati_fragment_shader.c
+10
-5
context.c
dlls/wined3d/context.c
+47
-38
device.c
dlls/wined3d/device.c
+8
-8
drawprim.c
dlls/wined3d/drawprim.c
+2
-2
gl_compat.c
dlls/wined3d/gl_compat.c
+9
-9
nvidia_texture_shader.c
dlls/wined3d/nvidia_texture_shader.c
+10
-5
query.c
dlls/wined3d/query.c
+2
-2
state.c
dlls/wined3d/state.c
+202
-105
surface.c
dlls/wined3d/surface.c
+2
-2
swapchain.c
dlls/wined3d/swapchain.c
+5
-4
utils.c
dlls/wined3d/utils.c
+4
-2
wined3d_private.h
dlls/wined3d/wined3d_private.h
+95
-92
No files found.
dlls/wined3d/arb_program_shader.c
View file @
da1e5573
...
...
@@ -534,7 +534,7 @@ static void shader_arb_load_constants(
IWineD3DDeviceImpl
*
deviceImpl
=
(
IWineD3DDeviceImpl
*
)
device
;
IWineD3DStateBlockImpl
*
stateBlock
=
deviceImpl
->
stateBlock
;
const
struct
WineD3DC
ontext
*
context
=
context_get_current
();
const
struct
wined3d_c
ontext
*
context
=
context_get_current
();
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
if
(
useVertexShader
)
{
...
...
@@ -560,7 +560,7 @@ static void shader_arb_load_constants(
static
void
shader_arb_update_float_vertex_constants
(
IWineD3DDevice
*
iface
,
UINT
start
,
UINT
count
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
struct
WineD3DC
ontext
*
context
=
context_get_current
();
struct
wined3d_c
ontext
*
context
=
context_get_current
();
/* We don't want shader constant dirtification to be an O(contexts), so just dirtify the active
* context. On a context switch the old context will be fully dirtified */
...
...
@@ -573,7 +573,7 @@ static void shader_arb_update_float_vertex_constants(IWineD3DDevice *iface, UINT
static
void
shader_arb_update_float_pixel_constants
(
IWineD3DDevice
*
iface
,
UINT
start
,
UINT
count
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
struct
WineD3DC
ontext
*
context
=
context_get_current
();
struct
wined3d_c
ontext
*
context
=
context_get_current
();
/* We don't want shader constant dirtification to be an O(contexts), so just dirtify the active
* context. On a context switch the old context will be fully dirtified */
...
...
@@ -4215,7 +4215,7 @@ static inline void find_arb_vs_compile_args(IWineD3DVertexShaderImpl *shader, IW
static
void
shader_arb_select
(
IWineD3DDevice
*
iface
,
BOOL
usePS
,
BOOL
useVS
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
struct
shader_arb_priv
*
priv
=
This
->
shader_priv
;
struct
WineD3DC
ontext
*
context
=
context_get_current
();
struct
wined3d_c
ontext
*
context
=
context_get_current
();
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
int
i
;
...
...
@@ -5161,7 +5161,8 @@ static void arbfp_get_caps(WINED3DDEVTYPE devtype, const struct wined3d_gl_info
#undef GLINFO_LOCATION
#define GLINFO_LOCATION stateblock->wineD3DDevice->adapter->gl_info
static
void
state_texfactor_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_texfactor_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
...
...
@@ -5182,7 +5183,8 @@ static void state_texfactor_arbfp(DWORD state, IWineD3DStateBlockImpl *statebloc
}
static
void
state_arb_specularenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_arb_specularenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
...
...
@@ -5209,7 +5211,8 @@ static void state_arb_specularenable(DWORD state, IWineD3DStateBlockImpl *stateb
checkGLcall
(
"glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, ARB_FFP_CONST_SPECULAR_ENABLE, col)"
);
}
static
void
set_bumpmat_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
set_bumpmat_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
float
mat
[
2
][
2
];
...
...
@@ -5244,7 +5247,8 @@ static void set_bumpmat_arbfp(DWORD state, IWineD3DStateBlockImpl *stateblock, W
checkGLcall
(
"glProgramEnvParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, ARB_FFP_CONST_BUMPMAT(stage), &mat[0][0])"
);
}
static
void
tex_bumpenvlum_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
tex_bumpenvlum_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
float
param
[
4
];
...
...
@@ -5751,7 +5755,8 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, IWi
return
ret
;
}
static
void
fragment_prog_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
fragment_prog_arbfp
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
struct
shader_arb_priv
*
priv
=
device
->
fragment_priv
;
BOOL
use_pshader
=
use_ps
(
stateblock
);
...
...
@@ -5848,7 +5853,8 @@ static void fragment_prog_arbfp(DWORD state, IWineD3DStateBlockImpl *stateblock,
* is that changing the fog start and fog end(which links to FOGENABLE in vertex) results in the
* fragment_prog_arbfp function being called because FOGENABLE is dirty, which calls this function here
*/
static
void
state_arbfp_fog
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_arbfp_fog
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
enum
fogsource
new_source
;
TRACE
(
"state %#x, stateblock %p, context %p
\n
"
,
state
,
stateblock
,
context
);
...
...
@@ -5878,7 +5884,8 @@ static void state_arbfp_fog(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
textransform
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
textransform
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
!
isStateDirty
(
context
,
STATE_PIXELSHADER
))
{
fragment_prog_arbfp
(
state
,
stateblock
,
context
);
}
...
...
dlls/wined3d/ati_fragment_shader.c
View file @
da1e5573
...
...
@@ -796,7 +796,8 @@ static GLuint gen_ati_shader(const struct texture_stage_op op[MAX_TEXTURES], con
#undef GLINFO_LOCATION
#define GLINFO_LOCATION stateblock->wineD3DDevice->adapter->gl_info
static
void
set_tex_op_atifs
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
set_tex_op_atifs
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
This
=
stateblock
->
wineD3DDevice
;
const
struct
atifs_ffp_desc
*
desc
;
struct
ffp_frag_settings
settings
;
...
...
@@ -842,7 +843,8 @@ static void set_tex_op_atifs(DWORD state, IWineD3DStateBlockImpl *stateblock, Wi
GL_EXTCALL
(
glBindFragmentShaderATI
(
desc
->
shader
));
}
static
void
state_texfactor_atifs
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_texfactor_atifs
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
D3DCOLORTOGLFLOAT4
(
stateblock
->
renderState
[
WINED3DRS_TEXTUREFACTOR
],
col
);
...
...
@@ -850,7 +852,8 @@ static void state_texfactor_atifs(DWORD state, IWineD3DStateBlockImpl *statebloc
checkGLcall
(
"glSetFragmentShaderConstantATI(ATI_FFP_CONST_TFACTOR, col)"
);
}
static
void
set_bumpmat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
set_bumpmat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
float
mat
[
2
][
2
];
...
...
@@ -873,13 +876,15 @@ static void set_bumpmat(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
checkGLcall
(
"glSetFragmentShaderConstantATI(ATI_FFP_CONST_BUMPMAT(stage), mat)"
);
}
static
void
textransform
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
textransform
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
!
isStateDirty
(
context
,
STATE_PIXELSHADER
))
{
set_tex_op_atifs
(
state
,
stateblock
,
context
);
}
}
static
void
atifs_apply_pixelshader
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
atifs_apply_pixelshader
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
BOOL
use_vshader
=
use_vs
(
stateblock
);
...
...
dlls/wined3d/context.c
View file @
da1e5573
...
...
@@ -35,7 +35,7 @@ static DWORD wined3d_context_tls_idx;
/* FBO helper functions */
/* GL locking is done by the caller */
void
context_bind_fbo
(
struct
WineD3DC
ontext
*
context
,
GLenum
target
,
GLuint
*
fbo
)
void
context_bind_fbo
(
struct
wined3d_c
ontext
*
context
,
GLenum
target
,
GLuint
*
fbo
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
GLuint
f
;
...
...
@@ -101,7 +101,7 @@ static void context_clean_fbo_attachments(const struct wined3d_gl_info *gl_info)
}
/* GL locking is done by the caller */
static
void
context_destroy_fbo
(
struct
WineD3DC
ontext
*
context
,
GLuint
*
fbo
)
static
void
context_destroy_fbo
(
struct
wined3d_c
ontext
*
context
,
GLuint
*
fbo
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -178,7 +178,7 @@ static void context_apply_attachment_filter_states(IWineD3DSurface *surface, BOO
}
/* GL locking is done by the caller */
void
context_attach_depth_stencil_fbo
(
struct
WineD3DC
ontext
*
context
,
void
context_attach_depth_stencil_fbo
(
struct
wined3d_c
ontext
*
context
,
GLenum
fbo_target
,
IWineD3DSurface
*
depth_stencil
,
BOOL
use_render_buffer
)
{
IWineD3DSurfaceImpl
*
depth_stencil_impl
=
(
IWineD3DSurfaceImpl
*
)
depth_stencil
;
...
...
@@ -250,7 +250,7 @@ void context_attach_depth_stencil_fbo(struct WineD3DContext *context,
}
/* GL locking is done by the caller */
void
context_attach_surface_fbo
(
const
struct
WineD3DC
ontext
*
context
,
void
context_attach_surface_fbo
(
const
struct
wined3d_c
ontext
*
context
,
GLenum
fbo_target
,
DWORD
idx
,
IWineD3DSurface
*
surface
)
{
const
IWineD3DSurfaceImpl
*
surface_impl
=
(
IWineD3DSurfaceImpl
*
)
surface
;
...
...
@@ -272,7 +272,7 @@ void context_attach_surface_fbo(const struct WineD3DContext *context,
}
/* GL locking is done by the caller */
static
void
context_check_fbo_status
(
struct
WineD3DC
ontext
*
context
)
static
void
context_check_fbo_status
(
struct
wined3d_c
ontext
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
GLenum
status
;
...
...
@@ -307,7 +307,7 @@ static void context_check_fbo_status(struct WineD3DContext *context)
}
}
static
struct
fbo_entry
*
context_create_fbo_entry
(
struct
WineD3DC
ontext
*
context
)
static
struct
fbo_entry
*
context_create_fbo_entry
(
struct
wined3d_c
ontext
*
context
)
{
IWineD3DDeviceImpl
*
device
=
((
IWineD3DSurfaceImpl
*
)
context
->
surface
)
->
resource
.
wineD3DDevice
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -324,7 +324,7 @@ static struct fbo_entry *context_create_fbo_entry(struct WineD3DContext *context
}
/* GL locking is done by the caller */
static
void
context_reuse_fbo_entry
(
struct
WineD3DC
ontext
*
context
,
struct
fbo_entry
*
entry
)
static
void
context_reuse_fbo_entry
(
struct
wined3d_c
ontext
*
context
,
struct
fbo_entry
*
entry
)
{
IWineD3DDeviceImpl
*
device
=
((
IWineD3DSurfaceImpl
*
)
context
->
surface
)
->
resource
.
wineD3DDevice
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -338,7 +338,7 @@ static void context_reuse_fbo_entry(struct WineD3DContext *context, struct fbo_e
}
/* GL locking is done by the caller */
static
void
context_destroy_fbo_entry
(
struct
WineD3DC
ontext
*
context
,
struct
fbo_entry
*
entry
)
static
void
context_destroy_fbo_entry
(
struct
wined3d_c
ontext
*
context
,
struct
fbo_entry
*
entry
)
{
if
(
entry
->
id
)
{
...
...
@@ -353,7 +353,7 @@ static void context_destroy_fbo_entry(struct WineD3DContext *context, struct fbo
/* GL locking is done by the caller */
static
struct
fbo_entry
*
context_find_fbo_entry
(
struct
WineD3DC
ontext
*
context
)
static
struct
fbo_entry
*
context_find_fbo_entry
(
struct
wined3d_c
ontext
*
context
)
{
IWineD3DDeviceImpl
*
device
=
((
IWineD3DSurfaceImpl
*
)
context
->
surface
)
->
resource
.
wineD3DDevice
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -388,7 +388,7 @@ static struct fbo_entry *context_find_fbo_entry(struct WineD3DContext *context)
}
/* GL locking is done by the caller */
static
void
context_apply_fbo_entry
(
struct
WineD3DC
ontext
*
context
,
struct
fbo_entry
*
entry
)
static
void
context_apply_fbo_entry
(
struct
wined3d_c
ontext
*
context
,
struct
fbo_entry
*
entry
)
{
IWineD3DDeviceImpl
*
device
=
((
IWineD3DSurfaceImpl
*
)
context
->
surface
)
->
resource
.
wineD3DDevice
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -436,7 +436,7 @@ static void context_apply_fbo_entry(struct WineD3DContext *context, struct fbo_e
}
/* GL locking is done by the caller */
static
void
context_apply_fbo_state
(
struct
WineD3DC
ontext
*
context
)
static
void
context_apply_fbo_state
(
struct
wined3d_c
ontext
*
context
)
{
IWineD3DDeviceImpl
*
device
=
((
IWineD3DSurfaceImpl
*
)
context
->
surface
)
->
resource
.
wineD3DDevice
;
...
...
@@ -453,7 +453,7 @@ static void context_apply_fbo_state(struct WineD3DContext *context)
}
/* Context activation is done by the caller. */
void
context_alloc_occlusion_query
(
struct
WineD3DC
ontext
*
context
,
struct
wined3d_occlusion_query
*
query
)
void
context_alloc_occlusion_query
(
struct
wined3d_c
ontext
*
context
,
struct
wined3d_occlusion_query
*
query
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -485,7 +485,7 @@ void context_alloc_occlusion_query(struct WineD3DContext *context, struct wined3
void
context_free_occlusion_query
(
struct
wined3d_occlusion_query
*
query
)
{
struct
WineD3DC
ontext
*
context
=
query
->
context
;
struct
wined3d_c
ontext
*
context
=
query
->
context
;
list_remove
(
&
query
->
entry
);
query
->
context
=
NULL
;
...
...
@@ -510,7 +510,7 @@ void context_free_occlusion_query(struct wined3d_occlusion_query *query)
}
/* Context activation is done by the caller. */
void
context_alloc_event_query
(
struct
WineD3DC
ontext
*
context
,
struct
wined3d_event_query
*
query
)
void
context_alloc_event_query
(
struct
wined3d_c
ontext
*
context
,
struct
wined3d_event_query
*
query
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -551,7 +551,7 @@ void context_alloc_event_query(struct WineD3DContext *context, struct wined3d_ev
void
context_free_event_query
(
struct
wined3d_event_query
*
query
)
{
struct
WineD3DC
ontext
*
context
=
query
->
context
;
struct
wined3d_c
ontext
*
context
=
query
->
context
;
list_remove
(
&
query
->
entry
);
query
->
context
=
NULL
;
...
...
@@ -590,7 +590,7 @@ void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource
for
(
i
=
0
;
i
<
This
->
numContexts
;
++
i
)
{
WineD3DC
ontext
*
context
=
This
->
contexts
[
i
];
struct
wined3d_c
ontext
*
context
=
This
->
contexts
[
i
];
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
struct
fbo_entry
*
entry
,
*
entry2
;
...
...
@@ -627,7 +627,7 @@ void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource
}
}
static
void
context_destroy_gl_resources
(
struct
WineD3DC
ontext
*
context
)
static
void
context_destroy_gl_resources
(
struct
wined3d_c
ontext
*
context
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
struct
wined3d_occlusion_query
*
occlusion_query
;
...
...
@@ -720,14 +720,14 @@ void context_set_tls_idx(DWORD idx)
wined3d_context_tls_idx
=
idx
;
}
struct
WineD3DC
ontext
*
context_get_current
(
void
)
struct
wined3d_c
ontext
*
context_get_current
(
void
)
{
return
TlsGetValue
(
wined3d_context_tls_idx
);
}
BOOL
context_set_current
(
struct
WineD3DC
ontext
*
ctx
)
BOOL
context_set_current
(
struct
wined3d_c
ontext
*
ctx
)
{
struct
WineD3DC
ontext
*
old
=
context_get_current
();
struct
wined3d_c
ontext
*
old
=
context_get_current
();
if
(
old
==
ctx
)
{
...
...
@@ -785,7 +785,8 @@ BOOL context_set_current(struct WineD3DContext *ctx)
* StateTable: Pointer to the state table in use(for state grouping)
*
*****************************************************************************/
static
void
Context_MarkStateDirty
(
WineD3DContext
*
context
,
DWORD
state
,
const
struct
StateEntry
*
StateTable
)
{
static
void
Context_MarkStateDirty
(
struct
wined3d_context
*
context
,
DWORD
state
,
const
struct
StateEntry
*
StateTable
)
{
DWORD
rep
=
StateTable
[
state
].
representative
;
DWORD
idx
;
BYTE
shift
;
...
...
@@ -814,8 +815,10 @@ static void Context_MarkStateDirty(WineD3DContext *context, DWORD state, const s
* pbuffer: optional pbuffer used with this context
*
*****************************************************************************/
static
WineD3DContext
*
AddContextToArray
(
IWineD3DDeviceImpl
*
This
,
HWND
win_handle
,
HDC
hdc
,
HGLRC
glCtx
,
HPBUFFERARB
pbuffer
)
{
WineD3DContext
**
oldArray
=
This
->
contexts
;
static
struct
wined3d_context
*
AddContextToArray
(
IWineD3DDeviceImpl
*
This
,
HWND
win_handle
,
HDC
hdc
,
HGLRC
glCtx
,
HPBUFFERARB
pbuffer
)
{
struct
wined3d_context
**
oldArray
=
This
->
contexts
;
DWORD
state
;
This
->
contexts
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
This
->
contexts
)
*
(
This
->
numContexts
+
1
));
...
...
@@ -828,7 +831,7 @@ static WineD3DContext *AddContextToArray(IWineD3DDeviceImpl *This, HWND win_hand
memcpy
(
This
->
contexts
,
oldArray
,
sizeof
(
*
This
->
contexts
)
*
This
->
numContexts
);
}
This
->
contexts
[
This
->
numContexts
]
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
WineD3DContext
));
This
->
contexts
[
This
->
numContexts
]
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
**
This
->
contexts
));
if
(
This
->
contexts
[
This
->
numContexts
]
==
NULL
)
{
ERR
(
"Unable to allocate a new context
\n
"
);
HeapFree
(
GetProcessHeap
(),
0
,
This
->
contexts
);
...
...
@@ -1044,10 +1047,12 @@ static int WineD3D_ChoosePixelFormat(IWineD3DDeviceImpl *This, HDC hdc,
* pPresentParameters: contains the pixelformats to use for onscreen rendering
*
*****************************************************************************/
WineD3DContext
*
CreateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurfaceImpl
*
target
,
HWND
win_handle
,
BOOL
create_pbuffer
,
const
WINED3DPRESENT_PARAMETERS
*
pPresentParms
)
{
struct
wined3d_context
*
CreateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurfaceImpl
*
target
,
HWND
win_handle
,
BOOL
create_pbuffer
,
const
WINED3DPRESENT_PARAMETERS
*
pPresentParms
)
{
const
struct
wined3d_gl_info
*
gl_info
=
&
This
->
adapter
->
gl_info
;
struct
wined3d_context
*
ret
=
NULL
;
HPBUFFERARB
pbuffer
=
NULL
;
WineD3DContext
*
ret
=
NULL
;
unsigned
int
s
;
HGLRC
ctx
;
HDC
hdc
;
...
...
@@ -1382,8 +1387,9 @@ out:
* context: Context to remove
*
*****************************************************************************/
static
void
RemoveContextFromArray
(
IWineD3DDeviceImpl
*
This
,
WineD3DContext
*
context
)
{
WineD3DContext
**
new_array
;
static
void
RemoveContextFromArray
(
IWineD3DDeviceImpl
*
This
,
struct
wined3d_context
*
context
)
{
struct
wined3d_context
**
new_array
;
BOOL
found
=
FALSE
;
UINT
i
;
...
...
@@ -1438,7 +1444,7 @@ static void RemoveContextFromArray(IWineD3DDeviceImpl *This, WineD3DContext *con
* context: Context to destroy
*
*****************************************************************************/
void
DestroyContext
(
IWineD3DDeviceImpl
*
This
,
WineD3DC
ontext
*
context
)
void
DestroyContext
(
IWineD3DDeviceImpl
*
This
,
struct
wined3d_c
ontext
*
context
)
{
BOOL
destroy
;
...
...
@@ -1497,7 +1503,8 @@ static inline void set_blit_dimension(UINT width, UINT height) {
*
*****************************************************************************/
/* Context activation is done by the caller. */
static
inline
void
SetupForBlit
(
IWineD3DDeviceImpl
*
This
,
WineD3DContext
*
context
,
UINT
width
,
UINT
height
)
{
static
inline
void
SetupForBlit
(
IWineD3DDeviceImpl
*
This
,
struct
wined3d_context
*
context
,
UINT
width
,
UINT
height
)
{
int
i
,
sampler
;
const
struct
StateEntry
*
StateTable
=
This
->
StateTable
;
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
...
...
@@ -1686,7 +1693,8 @@ static inline void SetupForBlit(IWineD3DDeviceImpl *This, WineD3DContext *contex
* If none can be found the swapchain is requested to create a new context
*
*****************************************************************************/
static
WineD3DContext
*
findThreadContextForSwapChain
(
IWineD3DSwapChain
*
swapchain
,
DWORD
tid
)
{
static
struct
wined3d_context
*
findThreadContextForSwapChain
(
IWineD3DSwapChain
*
swapchain
,
DWORD
tid
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
((
IWineD3DSwapChainImpl
*
)
swapchain
)
->
num_contexts
;
i
++
)
{
...
...
@@ -1712,13 +1720,14 @@ static WineD3DContext *findThreadContextForSwapChain(IWineD3DSwapChain *swapchai
* Returns: The needed context
*
*****************************************************************************/
static
inline
WineD3DContext
*
FindContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurface
*
target
,
DWORD
tid
)
{
static
inline
struct
wined3d_context
*
FindContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurface
*
target
,
DWORD
tid
)
{
IWineD3DSwapChain
*
swapchain
=
NULL
;
BOOL
readTexture
=
wined3d_settings
.
offscreen_rendering_mode
!=
ORM_FBO
&&
This
->
render_offscreen
;
struct
WineD3DC
ontext
*
current_context
=
context_get_current
();
struct
wined3d_c
ontext
*
current_context
=
context_get_current
();
BOOL
oldRenderOffscreen
=
This
->
render_offscreen
;
const
struct
StateEntry
*
StateTable
=
This
->
StateTable
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
if
(
current_context
&&
current_context
->
destroyed
)
current_context
=
NULL
;
...
...
@@ -1914,7 +1923,7 @@ retry:
}
/* Context activation is done by the caller. */
static
void
context_apply_draw_buffer
(
struct
WineD3DC
ontext
*
context
,
BOOL
blit
)
static
void
context_apply_draw_buffer
(
struct
wined3d_c
ontext
*
context
,
BOOL
blit
)
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
IWineD3DSurface
*
rt
=
context
->
current_rt
;
...
...
@@ -1974,15 +1983,15 @@ static void context_apply_draw_buffer(struct WineD3DContext *context, BOOL blit)
* usage: Prepares the context for blitting, drawing or other actions
*
*****************************************************************************/
struct
WineD3DC
ontext
*
ActivateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurface
*
target
,
enum
ContextUsage
usage
)
struct
wined3d_c
ontext
*
ActivateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurface
*
target
,
enum
ContextUsage
usage
)
{
struct
WineD3DC
ontext
*
current_context
=
context_get_current
();
struct
wined3d_c
ontext
*
current_context
=
context_get_current
();
DWORD
tid
=
GetCurrentThreadId
();
DWORD
i
,
dirtyState
,
idx
;
BYTE
shift
;
WineD3DContext
*
context
;
const
struct
StateEntry
*
StateTable
=
This
->
StateTable
;
const
struct
wined3d_gl_info
*
gl_info
;
struct
wined3d_context
*
context
;
TRACE
(
"(%p): Selecting context for render target %p, thread %d
\n
"
,
This
,
target
,
tid
);
...
...
dlls/wined3d/device.c
View file @
da1e5573
...
...
@@ -4888,7 +4888,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa
UINT
drawable_width
,
drawable_height
;
IWineD3DSurfaceImpl
*
depth_stencil
=
(
IWineD3DSurfaceImpl
*
)
This
->
stencilBufferTarget
;
IWineD3DSwapChainImpl
*
swapchain
=
NULL
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
/* When we're clearing parts of the drawable, make sure that the target surface is well up to date in the
* drawable. After the clear we'll mark the drawable up to date, so we have to make sure that this is true
...
...
@@ -6011,7 +6011,7 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface,
const
WINED3DRECT
*
rect
,
const
float
color
[
4
])
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
IWineD3DSwapChain
*
swapchain
;
swapchain
=
get_swapchain
(
surface
);
...
...
@@ -6390,7 +6390,7 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
GLbitfield
mask
=
GL_COLOR_BUFFER_BIT
;
/* TODO: Support blitting depth/stencil surfaces */
IWineD3DSwapChain
*
src_swapchain
,
*
dst_swapchain
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
GLenum
gl_filter
;
POINT
offset
=
{
0
,
0
};
...
...
@@ -6593,7 +6593,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetDepthStencilSurface(IWineD3DDevice *
||
((
IWineD3DSurfaceImpl
*
)
This
->
stencilBufferTarget
)
->
Flags
&
SFLAG_DISCARD
)
{
surface_modify_ds_location
(
This
->
stencilBufferTarget
,
SFLAG_DS_DISCARDED
);
}
else
{
struct
WineD3DC
ontext
*
context
=
ActivateContext
(
This
,
This
->
render_targets
[
0
],
CTXUSAGE_RESOURCELOAD
);
struct
wined3d_c
ontext
*
context
=
ActivateContext
(
This
,
This
->
render_targets
[
0
],
CTXUSAGE_RESOURCELOAD
);
surface_load_ds_location
(
This
->
stencilBufferTarget
,
context
,
SFLAG_DS_OFFSCREEN
);
surface_modify_ds_location
(
This
->
stencilBufferTarget
,
SFLAG_DS_OFFSCREEN
);
}
...
...
@@ -7679,10 +7679,10 @@ const DWORD SavedVertexStates_S[NUM_SAVEDVERTEXSTATES_S] = {
void
IWineD3DDeviceImpl_MarkStateDirty
(
IWineD3DDeviceImpl
*
This
,
DWORD
state
)
{
DWORD
rep
=
This
->
StateTable
[
state
].
representative
;
struct
wined3d_context
*
context
;
DWORD
idx
;
BYTE
shift
;
UINT
i
;
WineD3DContext
*
context
;
if
(
!
rep
)
return
;
for
(
i
=
0
;
i
<
This
->
numContexts
;
i
++
)
{
...
...
@@ -7696,7 +7696,7 @@ void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state) {
}
}
void
get_drawable_size_pbuffer
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
void
get_drawable_size_pbuffer
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
{
IWineD3DDeviceImpl
*
device
=
((
IWineD3DSurfaceImpl
*
)
context
->
current_rt
)
->
resource
.
wineD3DDevice
;
/* The drawable size of a pbuffer render target is the current pbuffer size. */
...
...
@@ -7704,7 +7704,7 @@ void get_drawable_size_pbuffer(struct WineD3DContext *context, UINT *width, UINT
*
height
=
device
->
pbufferHeight
;
}
void
get_drawable_size_fbo
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
void
get_drawable_size_fbo
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
{
IWineD3DSurfaceImpl
*
surface
=
(
IWineD3DSurfaceImpl
*
)
context
->
current_rt
;
/* The drawable size of a fbo target is the opengl texture size, which is the power of two size. */
...
...
@@ -7712,7 +7712,7 @@ void get_drawable_size_fbo(struct WineD3DContext *context, UINT *width, UINT *he
*
height
=
surface
->
pow2Height
;
}
void
get_drawable_size_backbuffer
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
void
get_drawable_size_backbuffer
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
{
IWineD3DSurfaceImpl
*
surface
=
(
IWineD3DSurfaceImpl
*
)
context
->
surface
;
/* The drawable size of a backbuffer / aux buffer offscreen target is the size of the
...
...
dlls/wined3d/drawprim.c
View file @
da1e5573
...
...
@@ -73,7 +73,7 @@ static void drawStridedFast(IWineD3DDevice *iface, GLenum primitive_type,
static
void
drawStridedSlow
(
IWineD3DDevice
*
iface
,
const
struct
wined3d_stream_info
*
si
,
UINT
NumVertexes
,
GLenum
glPrimType
,
const
void
*
idxData
,
UINT
idxSize
,
UINT
minIndex
,
UINT
startIdx
)
{
struct
WineD3DC
ontext
*
context
=
context_get_current
();
struct
wined3d_c
ontext
*
context
=
context_get_current
();
unsigned
int
textureNo
=
0
;
const
WORD
*
pIdxBufS
=
NULL
;
const
DWORD
*
pIdxBufL
=
NULL
;
...
...
@@ -559,7 +559,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT numberOfVertice
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
IWineD3DSurfaceImpl
*
target
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
unsigned
int
i
;
if
(
!
index_count
)
return
;
...
...
dlls/wined3d/gl_compat.c
View file @
da1e5573
...
...
@@ -147,7 +147,7 @@ static void WINE_GLAPI wine_glGetDoublev(GLenum pname, GLdouble* params) {
static
void
(
WINE_GLAPI
*
old_fogcoord_glEnable
)
(
GLenum
cap
)
=
NULL
;
static
void
WINE_GLAPI
wine_glEnable
(
GLenum
cap
)
{
if
(
cap
==
GL_FOG
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
ctx
->
fog_enabled
=
1
;
if
(
ctx
->
gl_fog_source
!=
GL_FRAGMENT_DEPTH_EXT
)
return
;
}
...
...
@@ -157,7 +157,7 @@ static void WINE_GLAPI wine_glEnable(GLenum cap) {
static
void
(
WINE_GLAPI
*
old_fogcoord_glDisable
)
(
GLenum
cap
)
=
NULL
;
static
void
WINE_GLAPI
wine_glDisable
(
GLenum
cap
)
{
if
(
cap
==
GL_FOG
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
ctx
->
fog_enabled
=
0
;
if
(
ctx
->
gl_fog_source
!=
GL_FRAGMENT_DEPTH_EXT
)
return
;
}
...
...
@@ -166,7 +166,7 @@ static void WINE_GLAPI wine_glDisable(GLenum cap) {
static
void
(
WINE_GLAPI
*
old_fogcoord_glFogi
)
(
GLenum
pname
,
GLint
param
)
=
NULL
;
static
void
WINE_GLAPI
wine_glFogi
(
GLenum
pname
,
GLint
param
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
if
(
pname
==
GL_FOG_COORDINATE_SOURCE_EXT
)
{
ctx
->
gl_fog_source
=
param
;
...
...
@@ -188,7 +188,7 @@ static void WINE_GLAPI wine_glFogi(GLenum pname, GLint param) {
static
void
(
WINE_GLAPI
*
old_fogcoord_glFogiv
)
(
GLenum
pname
,
const
GLint
*
param
)
=
NULL
;
static
void
WINE_GLAPI
wine_glFogiv
(
GLenum
pname
,
const
GLint
*
param
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
if
(
pname
==
GL_FOG_COORDINATE_SOURCE_EXT
)
{
ctx
->
gl_fog_source
=
*
param
;
if
(
*
param
==
GL_FRAGMENT_DEPTH_EXT
)
{
...
...
@@ -209,7 +209,7 @@ static void WINE_GLAPI wine_glFogiv(GLenum pname, const GLint *param) {
static
void
(
WINE_GLAPI
*
old_fogcoord_glFogf
)
(
GLenum
pname
,
GLfloat
param
)
=
NULL
;
static
void
WINE_GLAPI
wine_glFogf
(
GLenum
pname
,
GLfloat
param
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
if
(
pname
==
GL_FOG_COORDINATE_SOURCE_EXT
)
{
ctx
->
gl_fog_source
=
(
GLint
)
param
;
if
(
param
==
GL_FRAGMENT_DEPTH_EXT
)
{
...
...
@@ -230,7 +230,7 @@ static void WINE_GLAPI wine_glFogf(GLenum pname, GLfloat param) {
static
void
(
WINE_GLAPI
*
old_fogcoord_glFogfv
)
(
GLenum
pname
,
const
GLfloat
*
param
)
=
NULL
;
static
void
WINE_GLAPI
wine_glFogfv
(
GLenum
pname
,
const
GLfloat
*
param
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
if
(
pname
==
GL_FOG_COORDINATE_SOURCE_EXT
)
{
ctx
->
gl_fog_source
=
(
GLint
)
*
param
;
if
(
*
param
==
GL_FRAGMENT_DEPTH_EXT
)
{
...
...
@@ -269,7 +269,7 @@ static void (WINE_GLAPI *old_fogcoord_glFogCoordfvEXT) (const GLfloat *f) = NULL
static
void
(
WINE_GLAPI
*
old_fogcoord_glFogCoorddvEXT
)
(
const
GLdouble
*
f
)
=
NULL
;
static
void
WINE_GLAPI
wine_glVertex4f
(
GLfloat
x
,
GLfloat
y
,
GLfloat
z
,
GLfloat
w
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
if
(
ctx
->
gl_fog_source
==
GL_FOG_COORDINATE_EXT
&&
ctx
->
fog_enabled
)
{
GLfloat
c
[
4
]
=
{
ctx
->
color
[
0
],
ctx
->
color
[
1
],
ctx
->
color
[
2
],
ctx
->
color
[
3
]};
GLfloat
i
;
...
...
@@ -299,7 +299,7 @@ static void WINE_GLAPI wine_glVertex3fv(const GLfloat *pos) {
}
static
void
WINE_GLAPI
wine_glColor4f
(
GLfloat
r
,
GLfloat
g
,
GLfloat
b
,
GLfloat
a
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
ctx
->
color
[
0
]
=
r
;
ctx
->
color
[
1
]
=
g
;
ctx
->
color
[
2
]
=
b
;
...
...
@@ -327,7 +327,7 @@ static void WINE_GLAPI wine_glColor4ub(GLubyte r, GLubyte g, GLubyte b, GLubyte
* precision function
*/
static
void
WINE_GLAPI
wine_glFogCoordfEXT
(
GLfloat
f
)
{
struct
WineD3DC
ontext
*
ctx
=
context_get_current
();
struct
wined3d_c
ontext
*
ctx
=
context_get_current
();
ctx
->
fog_coord_value
=
f
;
}
static
void
WINE_GLAPI
wine_glFogCoorddEXT
(
GLdouble
f
)
{
...
...
dlls/wined3d/nvidia_texture_shader.c
View file @
da1e5573
...
...
@@ -32,7 +32,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d);
/* GL locking for state handlers is done by the caller. */
static
void
nvts_activate_dimensions
(
DWORD
stage
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
nvts_activate_dimensions
(
DWORD
stage
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
BOOL
bumpmap
=
FALSE
;
if
(
stage
>
0
&&
(
stateblock
->
textureState
[
stage
-
1
][
WINED3DTSS_COLOROP
]
==
WINED3DTOP_BUMPENVMAPLUMINANCE
||
...
...
@@ -452,7 +453,8 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
}
static
void
nvrc_colorop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
nvrc_colorop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
stage
];
BOOL
tex_used
=
stateblock
->
wineD3DDevice
->
fixed_function_usage_map
&
(
1
<<
stage
);
...
...
@@ -544,7 +546,8 @@ static void nvrc_colorop(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3
}
}
static
void
nvts_texdim
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
nvts_texdim
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
sampler
=
state
-
STATE_SAMPLER
(
0
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
sampler
];
...
...
@@ -559,7 +562,8 @@ static void nvts_texdim(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
nvts_activate_dimensions
(
sampler
,
stateblock
,
context
);
}
static
void
nvts_bumpenvmat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
nvts_bumpenvmat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
stage
+
1
];
float
mat
[
2
][
2
];
...
...
@@ -586,7 +590,8 @@ static void nvts_bumpenvmat(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
nvrc_texfactor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
nvrc_texfactor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
D3DCOLORTOGLFLOAT4
(
stateblock
->
renderState
[
WINED3DRS_TEXTUREFACTOR
],
col
);
GL_EXTCALL
(
glCombinerParameterfvNV
(
GL_CONSTANT_COLOR0_NV
,
&
col
[
0
]));
...
...
dlls/wined3d/query.c
View file @
da1e5573
...
...
@@ -457,7 +457,7 @@ static HRESULT WINAPI IWineD3DEventQueryImpl_Issue(IWineD3DQuery* iface, DWORD
if
(
dwIssueFlags
&
WINED3DISSUE_END
)
{
struct
wined3d_event_query
*
query
=
This
->
extendedData
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
if
(
query
->
context
)
{
...
...
@@ -514,7 +514,7 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_Issue(IWineD3DQuery* iface, D
if
(
GL_SUPPORT
(
ARB_OCCLUSION_QUERY
))
{
struct
wined3d_occlusion_query
*
query
=
This
->
extendedData
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
/* This is allowed according to msdn and our tests. Reset the query and restart */
if
(
dwIssueFlags
&
WINED3DISSUE_BEGIN
)
...
...
dlls/wined3d/state.c
View file @
da1e5573
...
...
@@ -38,9 +38,10 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d_shader);
/* GL locking for state handlers is done by the caller. */
static
void
state_blendop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
static
void
state_blendop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
static
void
state_nogl
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_nogl
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* Used for states which are not mapped to a gl state as-is, but used somehow different,
* e.g as a parameter for drawing, or which are unimplemented in windows d3d
*/
...
...
@@ -53,7 +54,8 @@ static void state_nogl(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DC
}
}
static
void
state_undefined
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_undefined
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* Print a WARN, this allows the stateblock code to loop over all states to generate a display
* list without causing confusing terminal output. Deliberately no special debug name here
* because its undefined.
...
...
@@ -61,7 +63,8 @@ static void state_undefined(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
WARN
(
"undefined state %d
\n
"
,
state
);
}
static
void
state_fillmode
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_fillmode
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
WINED3DFILLMODE
Value
=
stateblock
->
renderState
[
WINED3DRS_FILLMODE
];
switch
(
Value
)
{
...
...
@@ -82,7 +85,8 @@ static void state_fillmode(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
static
void
state_lighting
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_lighting
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* Lighting is not enabled if transformed vertices are drawn
* but lighting does not affect the stream sources, so it is not grouped for performance reasons.
* This state reads the decoded vertex declaration, so if it is dirty don't do anything. The
...
...
@@ -104,7 +108,8 @@ static void state_lighting(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
static
void
state_zenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_zenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* No z test without depth stencil buffers */
if
(
stateblock
->
wineD3DDevice
->
stencilBufferTarget
==
NULL
)
{
TRACE
(
"No Z buffer - disabling depth test
\n
"
);
...
...
@@ -132,7 +137,8 @@ static void state_zenable(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD
}
}
static
void
state_cullmode
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_cullmode
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* glFrontFace() is set in context.c at context init and on an offscreen / onscreen rendering
* switch
*/
...
...
@@ -158,7 +164,8 @@ static void state_cullmode(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
static
void
state_shademode
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_shademode
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
switch
((
WINED3DSHADEMODE
)
stateblock
->
renderState
[
WINED3DRS_SHADEMODE
])
{
case
WINED3DSHADE_FLAT
:
glShadeModel
(
GL_FLAT
);
...
...
@@ -176,7 +183,8 @@ static void state_shademode(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
state_ditherenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_ditherenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_DITHERENABLE
])
{
glEnable
(
GL_DITHER
);
checkGLcall
(
"glEnable GL_DITHER"
);
...
...
@@ -186,7 +194,8 @@ static void state_ditherenable(DWORD state, IWineD3DStateBlockImpl *stateblock,
}
}
static
void
state_zwritenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_zwritenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* TODO: Test if in d3d z writing is enabled even if ZENABLE is off. If yes,
* this has to be merged with ZENABLE and ZFUNC
*/
...
...
@@ -199,7 +208,8 @@ static void state_zwritenable(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
state_zfunc
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_zfunc
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
int
glParm
=
CompareFunc
(
stateblock
->
renderState
[
WINED3DRS_ZFUNC
]);
if
(
glParm
)
{
...
...
@@ -222,7 +232,8 @@ static void state_zfunc(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
}
}
static
void
state_ambient
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_ambient
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
D3DCOLORTOGLFLOAT4
(
stateblock
->
renderState
[
WINED3DRS_AMBIENT
],
col
);
...
...
@@ -231,7 +242,8 @@ static void state_ambient(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD
checkGLcall
(
"glLightModel for MODEL_AMBIENT"
);
}
static
void
state_blend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_blend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
int
srcBlend
=
GL_ZERO
;
int
dstBlend
=
GL_ZERO
;
IWineD3DSurfaceImpl
*
target
=
(
IWineD3DSurfaceImpl
*
)
stateblock
->
wineD3DDevice
->
render_targets
[
0
];
...
...
@@ -443,11 +455,13 @@ static void state_blend(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
}
}
static
void
state_blendfactor_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_blendfactor_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
WARN
(
"Unsupported in local OpenGL implementation: glBlendColorEXT
\n
"
);
}
static
void
state_blendfactor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_blendfactor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
TRACE
(
"Setting BlendFactor to %d
\n
"
,
stateblock
->
renderState
[
WINED3DRS_BLENDFACTOR
]);
...
...
@@ -456,7 +470,8 @@ static void state_blendfactor(DWORD state, IWineD3DStateBlockImpl *stateblock, W
checkGLcall
(
"glBlendColor"
);
}
static
void
state_alpha
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_alpha
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
int
glParm
=
0
;
float
ref
;
BOOL
enable_ckey
=
FALSE
;
...
...
@@ -521,7 +536,8 @@ static void state_alpha(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
}
}
static
void
state_clipping
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_clipping
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
enable
=
0xFFFFFFFF
;
DWORD
disable
=
0x00000000
;
...
...
@@ -589,11 +605,13 @@ static void state_clipping(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
static
void
state_blendop_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_blendop_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
WARN
(
"Unsupported in local OpenGL implementation: glBlendEquation
\n
"
);
}
static
void
state_blendop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_blendop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
int
blendEquation
=
GL_FUNC_ADD
;
int
blendEquationAlpha
=
GL_FUNC_ADD
;
...
...
@@ -634,8 +652,8 @@ static void state_blendop(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD
}
}
static
void
state_specularenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_specularenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* Originally this used glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR)
* and (GL_LIGHT_MODEL_COLOR_CONTROL,GL_SINGLE_COLOR) to swap between enabled/disabled
* specular color. This is wrong:
...
...
@@ -734,7 +752,8 @@ state_specularenable(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCon
checkGLcall
(
"glMaterialfv(GL_EMISSION)"
);
}
static
void
state_texfactor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_texfactor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
unsigned
int
i
;
/* Note the texture color applies to all textures whereas
...
...
@@ -768,8 +787,8 @@ renderstate_stencil_twosided(IWineD3DStateBlockImpl *stateblock, GLint face, GLi
checkGLcall
(
"glStencilOp(...)"
);
}
static
void
state_stencil
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_stencil
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
onesided_enable
=
FALSE
;
DWORD
twosided_enable
=
FALSE
;
GLint
func
=
GL_ALWAYS
;
...
...
@@ -858,7 +877,8 @@ state_stencil(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *c
}
}
static
void
state_stencilwrite2s
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_stencilwrite2s
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
mask
;
if
(
stateblock
->
wineD3DDevice
->
stencilBufferTarget
)
{
...
...
@@ -876,7 +896,8 @@ static void state_stencilwrite2s(DWORD state, IWineD3DStateBlockImpl *stateblock
glStencilMask
(
mask
);
}
static
void
state_stencilwrite
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_stencilwrite
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
mask
;
if
(
stateblock
->
wineD3DDevice
->
stencilBufferTarget
)
{
...
...
@@ -889,7 +910,8 @@ static void state_stencilwrite(DWORD state, IWineD3DStateBlockImpl *stateblock,
checkGLcall
(
"glStencilMask"
);
}
static
void
state_fog_vertexpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_fog_vertexpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"state %#x, stateblock %p, context %p
\n
"
,
state
,
stateblock
,
context
);
...
...
@@ -926,7 +948,8 @@ static void state_fog_vertexpart(DWORD state, IWineD3DStateBlockImpl *stateblock
}
}
void
state_fogstartend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
state_fogstartend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
fogstart
,
fogend
;
union
{
DWORD
d
;
...
...
@@ -974,7 +997,8 @@ void state_fogstartend(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DC
TRACE
(
"Fog End == %f
\n
"
,
fogend
);
}
void
state_fog_fragpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
state_fog_fragpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
enum
fogsource
new_source
;
TRACE
(
"state %#x, stateblock %p, context %p
\n
"
,
state
,
stateblock
,
context
);
...
...
@@ -1115,13 +1139,15 @@ void state_fog_fragpart(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
}
}
static
void
state_rangefog_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_rangefog_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_RANGEFOGENABLE
])
{
WARN
(
"Range fog enabled, but not supported by this opengl implementation
\n
"
);
}
}
static
void
state_rangefog
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_rangefog
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_RANGEFOGENABLE
])
{
glFogi
(
GL_FOG_DISTANCE_MODE_NV
,
GL_EYE_RADIAL_NV
);
checkGLcall
(
"glFogi(GL_FOG_DISTANCE_MODE_NV, GL_EYE_RADIAL_NV)"
);
...
...
@@ -1131,14 +1157,16 @@ static void state_rangefog(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
void
state_fogcolor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
state_fogcolor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
float
col
[
4
];
D3DCOLORTOGLFLOAT4
(
stateblock
->
renderState
[
WINED3DRS_FOGCOLOR
],
col
);
glFogfv
(
GL_FOG_COLOR
,
&
col
[
0
]);
checkGLcall
(
"glFog GL_FOG_COLOR"
);
}
void
state_fogdensity
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
state_fogdensity
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1148,7 +1176,8 @@ void state_fogdensity(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCo
checkGLcall
(
"glFogf(GL_FOG_DENSITY, (float) Value)"
);
}
static
void
state_colormat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_colormat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
GLenum
Parm
=
0
;
const
struct
wined3d_stream_info_element
*
diffuse
=
&
device
->
strided_streams
.
elements
[
WINED3D_FFP_DIFFUSE
];
...
...
@@ -1260,7 +1289,8 @@ static void state_colormat(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
context
->
tracking_parm
=
Parm
;
}
static
void
state_linepattern
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_linepattern
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
WINED3DLINEPATTERN
lp
;
...
...
@@ -1280,7 +1310,8 @@ static void state_linepattern(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
state_zbias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_zbias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1308,7 +1339,8 @@ static void state_zbias(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
}
static
void
state_normalize
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_normalize
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
isStateDirty
(
context
,
STATE_VDECL
))
{
return
;
}
...
...
@@ -1328,7 +1360,8 @@ static void state_normalize(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
state_psizemin_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_psizemin_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1347,7 +1380,8 @@ static void state_psizemin_w(DWORD state, IWineD3DStateBlockImpl *stateblock, Wi
}
static
void
state_psizemin_ext
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_psizemin_ext
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1367,7 +1401,8 @@ static void state_psizemin_ext(DWORD state, IWineD3DStateBlockImpl *stateblock,
checkGLcall
(
"glPointParameterfEXT(...)"
);
}
static
void
state_psizemin_arb
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_psizemin_arb
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1387,7 +1422,8 @@ static void state_psizemin_arb(DWORD state, IWineD3DStateBlockImpl *stateblock,
checkGLcall
(
"glPointParameterfARB(...)"
);
}
static
void
state_pscale
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_pscale
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* TODO: Group this with the viewport */
/*
* POINTSCALEENABLE controls how point size value is treated. If set to
...
...
@@ -1457,7 +1493,8 @@ static void state_pscale(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3
checkGLcall
(
"glPointSize(...);"
);
}
static
void
state_colorwrite
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_colorwrite
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
Value
=
stateblock
->
renderState
[
WINED3DRS_COLORWRITEENABLE
];
TRACE
(
"Color mask: r(%d) g(%d) b(%d) a(%d)
\n
"
,
...
...
@@ -1482,7 +1519,8 @@ static void state_colorwrite(DWORD state, IWineD3DStateBlockImpl *stateblock, Wi
}
}
static
void
state_localviewer
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_localviewer
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_LOCALVIEWER
])
{
glLightModeli
(
GL_LIGHT_MODEL_LOCAL_VIEWER
,
1
);
checkGLcall
(
"glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1)"
);
...
...
@@ -1492,7 +1530,8 @@ static void state_localviewer(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
state_lastpixel
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_lastpixel
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_LASTPIXEL
])
{
TRACE
(
"Last Pixel Drawing Enabled
\n
"
);
}
else
{
...
...
@@ -1506,7 +1545,8 @@ static void state_lastpixel(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
state_pointsprite_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_pointsprite_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
BOOL
warned
=
FALSE
;
/* TODO: NV_POINT_SPRITE */
if
(
!
warned
&&
stateblock
->
renderState
[
WINED3DRS_POINTSPRITEENABLE
])
{
...
...
@@ -1516,7 +1556,8 @@ static void state_pointsprite_w(DWORD state, IWineD3DStateBlockImpl *stateblock,
}
}
static
void
state_pointsprite
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_pointsprite
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_POINTSPRITEENABLE
])
{
BOOL
warned
=
FALSE
;
if
(
GL_LIMITS
(
point_sprite_units
)
<
GL_LIMITS
(
textures
)
&&
!
warned
)
{
...
...
@@ -1534,7 +1575,8 @@ static void state_pointsprite(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
state_wrap
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_wrap
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/**
http://www.cosc.brocku.ca/Offerings/3P98/course/lectures/texture/
http://www.gamedev.net/reference/programming/features/rendererdll3/page2.asp
...
...
@@ -1564,13 +1606,15 @@ static void state_wrap(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DC
}
}
static
void
state_msaa_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_msaa_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_MULTISAMPLEANTIALIAS
])
{
WARN
(
"Multisample antialiasing not supported by gl
\n
"
);
}
}
static
void
state_msaa
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_msaa
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_MULTISAMPLEANTIALIAS
])
{
glEnable
(
GL_MULTISAMPLE_ARB
);
checkGLcall
(
"glEnable(GL_MULTISAMPLE_ARB)"
);
...
...
@@ -1580,7 +1624,8 @@ static void state_msaa(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DC
}
}
static
void
state_scissor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_scissor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_SCISSORTESTENABLE
])
{
glEnable
(
GL_SCISSOR_TEST
);
checkGLcall
(
"glEnable(GL_SCISSOR_TEST)"
);
...
...
@@ -1590,7 +1635,8 @@ static void state_scissor(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD
}
}
static
void
state_depthbias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_depthbias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1609,7 +1655,8 @@ static void state_depthbias(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
state_perspective
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_perspective
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_TEXTUREPERSPECTIVE
])
{
glHint
(
GL_PERSPECTIVE_CORRECTION_HINT
,
GL_NICEST
);
checkGLcall
(
"glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)"
);
...
...
@@ -1619,31 +1666,36 @@ static void state_perspective(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
state_stippledalpha
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_stippledalpha
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_STIPPLEDALPHA
])
FIXME
(
" Stippled Alpha not supported yet.
\n
"
);
}
static
void
state_antialias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_antialias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_ANTIALIAS
])
FIXME
(
" Antialias not supported yet.
\n
"
);
}
static
void
state_multisampmask
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_multisampmask
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_MULTISAMPLEMASK
]
!=
0xFFFFFFFF
)
FIXME
(
"(WINED3DRS_MULTISAMPLEMASK,%d) not yet implemented
\n
"
,
stateblock
->
renderState
[
WINED3DRS_MULTISAMPLEMASK
]);
}
static
void
state_patchedgestyle
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_patchedgestyle
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_PATCHEDGESTYLE
]
!=
WINED3DPATCHEDGE_DISCRETE
)
FIXME
(
"(WINED3DRS_PATCHEDGESTYLE,%d) not yet implemented
\n
"
,
stateblock
->
renderState
[
WINED3DRS_PATCHEDGESTYLE
]);
}
static
void
state_patchsegments
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_patchsegments
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
union
{
DWORD
d
;
float
f
;
...
...
@@ -1663,109 +1715,127 @@ static void state_patchsegments(DWORD state, IWineD3DStateBlockImpl *stateblock,
}
}
static
void
state_positiondegree
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_positiondegree
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_POSITIONDEGREE
]
!=
WINED3DDEGREE_CUBIC
)
FIXME
(
"(WINED3DRS_POSITIONDEGREE,%d) not yet implemented
\n
"
,
stateblock
->
renderState
[
WINED3DRS_POSITIONDEGREE
]);
}
static
void
state_normaldegree
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_normaldegree
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_NORMALDEGREE
]
!=
WINED3DDEGREE_LINEAR
)
FIXME
(
"(WINED3DRS_NORMALDEGREE,%d) not yet implemented
\n
"
,
stateblock
->
renderState
[
WINED3DRS_NORMALDEGREE
]);
}
static
void
state_tessellation
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_tessellation
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
TRACE
(
"Stub
\n
"
);
if
(
stateblock
->
renderState
[
WINED3DRS_ENABLEADAPTIVETESSELLATION
])
FIXME
(
"(WINED3DRS_ENABLEADAPTIVETESSELLATION,%d) not yet implemented
\n
"
,
stateblock
->
renderState
[
WINED3DRS_ENABLEADAPTIVETESSELLATION
]);
}
static
void
state_wrapu
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_wrapu
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_WRAPU
])
{
FIXME
(
"Render state WINED3DRS_WRAPU not implemented yet
\n
"
);
}
}
static
void
state_wrapv
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_wrapv
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_WRAPV
])
{
FIXME
(
"Render state WINED3DRS_WRAPV not implemented yet
\n
"
);
}
}
static
void
state_monoenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_monoenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_MONOENABLE
])
{
FIXME
(
"Render state WINED3DRS_MONOENABLE not implemented yet
\n
"
);
}
}
static
void
state_rop2
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_rop2
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_ROP2
])
{
FIXME
(
"Render state WINED3DRS_ROP2 not implemented yet
\n
"
);
}
}
static
void
state_planemask
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_planemask
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_PLANEMASK
])
{
FIXME
(
"Render state WINED3DRS_PLANEMASK not implemented yet
\n
"
);
}
}
static
void
state_subpixel
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_subpixel
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_SUBPIXEL
])
{
FIXME
(
"Render state WINED3DRS_SUBPIXEL not implemented yet
\n
"
);
}
}
static
void
state_subpixelx
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_subpixelx
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_SUBPIXELX
])
{
FIXME
(
"Render state WINED3DRS_SUBPIXELX not implemented yet
\n
"
);
}
}
static
void
state_stippleenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_stippleenable
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_STIPPLEENABLE
])
{
FIXME
(
"Render state WINED3DRS_STIPPLEENABLE not implemented yet
\n
"
);
}
}
static
void
state_bordercolor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_bordercolor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_BORDERCOLOR
])
{
FIXME
(
"Render state WINED3DRS_BORDERCOLOR not implemented yet
\n
"
);
}
}
static
void
state_mipmaplodbias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_mipmaplodbias
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_MIPMAPLODBIAS
])
{
FIXME
(
"Render state WINED3DRS_MIPMAPLODBIAS not implemented yet
\n
"
);
}
}
static
void
state_anisotropy
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_anisotropy
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_ANISOTROPY
])
{
FIXME
(
"Render state WINED3DRS_ANISOTROPY not implemented yet
\n
"
);
}
}
static
void
state_flushbatch
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_flushbatch
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_FLUSHBATCH
])
{
FIXME
(
"Render state WINED3DRS_FLUSHBATCH not implemented yet
\n
"
);
}
}
static
void
state_translucentsi
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_translucentsi
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_TRANSLUCENTSORTINDEPENDENT
])
{
FIXME
(
"Render state WINED3DRS_TRANSLUCENTSORTINDEPENDENT not implemented yet
\n
"
);
}
}
static
void
state_extents
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_extents
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_EXTENTS
])
{
FIXME
(
"Render state WINED3DRS_EXTENTS not implemented yet
\n
"
);
}
}
static
void
state_ckeyblend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_ckeyblend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
renderState
[
WINED3DRS_COLORKEYBLENDENABLE
])
{
FIXME
(
"Render state WINED3DRS_COLORKEYBLENDENABLE not implemented yet
\n
"
);
}
...
...
@@ -2844,7 +2914,8 @@ static void set_tex_op(IWineD3DDevice *iface, BOOL isAlpha, int Stage, WINED3DTE
}
static
void
tex_colorop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
tex_colorop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
stage
];
BOOL
tex_used
=
stateblock
->
wineD3DDevice
->
fixed_function_usage_map
&
(
1
<<
stage
);
...
...
@@ -2902,7 +2973,8 @@ static void tex_colorop(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
stateblock
->
textureState
[
stage
][
WINED3DTSS_COLORARG0
]);
}
void
tex_alphaop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
tex_alphaop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
stage
];
BOOL
tex_used
=
stateblock
->
wineD3DDevice
->
fixed_function_usage_map
&
(
1
<<
stage
);
...
...
@@ -3001,7 +3073,8 @@ void tex_alphaop(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext
}
}
static
void
transform_texture
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
transform_texture
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
texUnit
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
texUnit
];
BOOL
generated
;
...
...
@@ -3102,7 +3175,8 @@ static void loadTexCoords(IWineD3DStateBlockImpl *stateblock, const struct wined
checkGLcall
(
"loadTexCoords"
);
}
static
void
tex_coordindex
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
tex_coordindex
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
stage
];
static
const
GLfloat
s_plane
[]
=
{
1
.
0
f
,
0
.
0
f
,
0
.
0
f
,
0
.
0
f
};
...
...
@@ -3275,7 +3349,8 @@ static void tex_coordindex(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
static
void
shaderconstant
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
shaderconstant
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
/* Vertex and pixel shader states will call a shader upload, don't do anything as long one of them
...
...
@@ -3289,7 +3364,8 @@ static void shaderconstant(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
device
->
shader_backend
->
shader_load_constants
((
IWineD3DDevice
*
)
device
,
use_ps
(
stateblock
),
use_vs
(
stateblock
));
}
static
void
tex_bumpenvlscale
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
tex_bumpenvlscale
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
if
(
stateblock
->
pixelShader
&&
stage
!=
0
&&
...
...
@@ -3304,7 +3380,8 @@ static void tex_bumpenvlscale(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
sampler_texmatrix
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
sampler_texmatrix
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
const
DWORD
sampler
=
state
-
STATE_SAMPLER
(
0
);
IWineD3DBaseTexture
*
texture
=
stateblock
->
textures
[
sampler
];
...
...
@@ -3330,7 +3407,8 @@ static void sampler_texmatrix(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
sampler
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
sampler
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
sampler
=
state
-
STATE_SAMPLER
(
0
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
sampler
];
union
{
...
...
@@ -3402,7 +3480,8 @@ static void sampler(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCont
}
}
void
apply_pixelshader
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
apply_pixelshader
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
BOOL
use_pshader
=
use_ps
(
stateblock
);
BOOL
use_vshader
=
use_vs
(
stateblock
);
...
...
@@ -3447,7 +3526,8 @@ void apply_pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DC
}
}
static
void
shader_bumpenvmat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
shader_bumpenvmat
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
stage
=
(
state
-
STATE_TEXTURESTAGE
(
0
,
0
))
/
(
WINED3D_HIGHEST_TEXTURE_STATE
+
1
);
if
(
stateblock
->
pixelShader
&&
stage
!=
0
&&
((
IWineD3DPixelShaderImpl
*
)
stateblock
->
pixelShader
)
->
baseShader
.
reg_maps
.
bumpmat
[
stage
])
{
...
...
@@ -3461,7 +3541,8 @@ static void shader_bumpenvmat(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
transform_world
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
transform_world
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
/* This function is called by transform_view below if the view matrix was changed too
*
* Deliberately no check if the vertex declaration is dirty because the vdecl state
...
...
@@ -3489,7 +3570,8 @@ static void transform_world(DWORD state, IWineD3DStateBlockImpl *stateblock, Win
}
}
static
void
clipplane
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
clipplane
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
UINT
index
=
state
-
STATE_CLIPPLANE
(
0
);
if
(
isStateDirty
(
context
,
STATE_TRANSFORM
(
WINED3DTS_VIEW
))
||
index
>=
GL_LIMITS
(
clipplanes
))
{
...
...
@@ -3525,7 +3607,8 @@ static void clipplane(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCo
glPopMatrix
();
}
static
void
transform_worldex
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
transform_worldex
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
UINT
matrix
=
state
-
STATE_TRANSFORM
(
WINED3DTS_WORLDMATRIX
(
0
));
GLenum
glMat
;
TRACE
(
"Setting world matrix %d
\n
"
,
matrix
);
...
...
@@ -3564,7 +3647,8 @@ static void transform_worldex(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
state_vertexblend_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_vertexblend_w
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
static
BOOL
once
=
FALSE
;
switch
(
stateblock
->
renderState
[
WINED3DRS_VERTEXBLEND
])
{
...
...
@@ -3583,7 +3667,8 @@ static void state_vertexblend_w(DWORD state, IWineD3DStateBlockImpl *stateblock,
}
}
static
void
state_vertexblend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
state_vertexblend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
WINED3DVERTEXBLENDFLAGS
val
=
stateblock
->
renderState
[
WINED3DRS_VERTEXBLEND
];
switch
(
val
)
{
...
...
@@ -3625,7 +3710,8 @@ static void state_vertexblend(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
transform_view
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
transform_view
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
unsigned
int
k
;
/* If we are changing the View matrix, reset the light and clipping planes to the new view
...
...
@@ -3682,7 +3768,8 @@ static void transform_view(DWORD state, IWineD3DStateBlockImpl *stateblock, Wine
}
}
static
void
transform_projection
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
transform_projection
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
glMatrixMode
(
GL_PROJECTION
);
checkGLcall
(
"glMatrixMode(GL_PROJECTION)"
);
glLoadIdentity
();
...
...
@@ -3825,7 +3912,7 @@ static inline void unloadVertexData(IWineD3DStateBlockImpl *stateblock) {
unloadTexCoords
(
stateblock
);
}
static
inline
void
unload_numbered_array
(
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
,
int
i
)
static
inline
void
unload_numbered_array
(
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
,
int
i
)
{
GL_EXTCALL
(
glDisableVertexAttribArrayARB
(
i
));
checkGLcall
(
"glDisableVertexAttribArrayARB(reg)"
);
...
...
@@ -3836,7 +3923,7 @@ static inline void unload_numbered_array(IWineD3DStateBlockImpl *stateblock, Win
/* This should match any arrays loaded in loadNumberedArrays
* TODO: Only load / unload arrays if we have to.
*/
static
inline
void
unloadNumberedArrays
(
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
)
static
inline
void
unloadNumberedArrays
(
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
)
{
/* disable any attribs (this is the same for both GLSL and ARB modes) */
GLint
maxAttribs
=
16
;
...
...
@@ -3853,7 +3940,7 @@ static inline void unloadNumberedArrays(IWineD3DStateBlockImpl *stateblock, Wine
}
static
inline
void
loadNumberedArrays
(
IWineD3DStateBlockImpl
*
stateblock
,
const
struct
wined3d_stream_info
*
stream_info
,
WineD3DC
ontext
*
context
)
const
struct
wined3d_stream_info
*
stream_info
,
struct
wined3d_c
ontext
*
context
)
{
GLuint
curVBO
=
GL_SUPPORT
(
ARB_VERTEX_BUFFER_OBJECT
)
?
~
0U
:
0
;
int
i
;
...
...
@@ -4284,7 +4371,8 @@ static inline void drawPrimitiveTraceDataLocations(const struct wined3d_stream_i
return
;
}
static
void
streamsrc
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
streamsrc
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
IWineD3DDeviceImpl
*
device
=
stateblock
->
wineD3DDevice
;
BOOL
fixup
=
FALSE
;
struct
wined3d_stream_info
*
dataLocations
=
&
device
->
strided_streams
;
...
...
@@ -4363,7 +4451,8 @@ static void streamsrc(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCo
}
}
static
void
vertexdeclaration
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
vertexdeclaration
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
BOOL
updateFog
=
FALSE
;
BOOL
useVertexShaderFunction
=
use_vs
(
stateblock
);
BOOL
usePixelShaderFunction
=
use_ps
(
stateblock
);
...
...
@@ -4518,7 +4607,8 @@ static void vertexdeclaration(DWORD state, IWineD3DStateBlockImpl *stateblock, W
}
}
static
void
viewport_miscpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
viewport_miscpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
UINT
width
,
height
;
IWineD3DSurfaceImpl
*
target
;
...
...
@@ -4542,7 +4632,8 @@ static void viewport_miscpart(DWORD state, IWineD3DStateBlockImpl *stateblock, W
checkGLcall
(
"glViewport"
);
}
static
void
viewport_vertexpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
viewport_vertexpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
stateblock
->
wineD3DDevice
->
posFixup
[
2
]
=
1
.
0
f
/
stateblock
->
viewport
.
Width
;
stateblock
->
wineD3DDevice
->
posFixup
[
3
]
=
-
stateblock
->
wineD3DDevice
->
posFixup
[
1
]
/
stateblock
->
viewport
.
Height
;
if
(
!
isStateDirty
(
context
,
STATE_TRANSFORM
(
WINED3DTS_PROJECTION
)))
{
...
...
@@ -4553,7 +4644,8 @@ static void viewport_vertexpart(DWORD state, IWineD3DStateBlockImpl *stateblock,
}
}
static
void
light
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
light
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
UINT
Index
=
state
-
STATE_ACTIVELIGHT
(
0
);
const
PLIGHTINFOEL
*
lightInfo
=
stateblock
->
activeLights
[
Index
];
...
...
@@ -4668,7 +4760,8 @@ static void light(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContex
return
;
}
static
void
scissorrect
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
scissorrect
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
RECT
*
pRect
=
&
stateblock
->
scissorRect
;
UINT
height
;
UINT
width
;
...
...
@@ -4689,7 +4782,8 @@ static void scissorrect(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
checkGLcall
(
"glScissor"
);
}
static
void
indexbuffer
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
indexbuffer
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
streamIsUP
||
stateblock
->
pIndexData
==
NULL
)
{
GL_EXTCALL
(
glBindBufferARB
(
GL_ELEMENT_ARRAY_BUFFER_ARB
,
0
));
}
else
{
...
...
@@ -4698,7 +4792,8 @@ static void indexbuffer(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
}
}
static
void
frontface
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
frontface
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
wineD3DDevice
->
render_offscreen
)
{
glFrontFace
(
GL_CCW
);
checkGLcall
(
"glFrontFace(GL_CCW)"
);
...
...
@@ -5468,12 +5563,14 @@ static unsigned int num_handlers(const APPLYSTATEFUNC *funcs)
return
i
;
}
static
void
multistate_apply_2
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
multistate_apply_2
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
stateblock
->
wineD3DDevice
->
multistate_funcs
[
state
][
0
](
state
,
stateblock
,
context
);
stateblock
->
wineD3DDevice
->
multistate_funcs
[
state
][
1
](
state
,
stateblock
,
context
);
}
static
void
multistate_apply_3
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
static
void
multistate_apply_3
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
stateblock
->
wineD3DDevice
->
multistate_funcs
[
state
][
0
](
state
,
stateblock
,
context
);
stateblock
->
wineD3DDevice
->
multistate_funcs
[
state
][
1
](
state
,
stateblock
,
context
);
stateblock
->
wineD3DDevice
->
multistate_funcs
[
state
][
2
](
state
,
stateblock
,
context
);
...
...
dlls/wined3d/surface.c
View file @
da1e5573
...
...
@@ -3140,7 +3140,7 @@ static inline void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *This, IWine
float
left
,
right
,
top
,
bottom
;
/* Texture coordinates */
UINT
fbwidth
=
Src
->
currentDesc
.
Width
;
UINT
fbheight
=
Src
->
currentDesc
.
Height
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
GLenum
drawBuffer
=
GL_BACK
;
GLenum
texture_target
;
BOOL
noBackBufferBackup
;
...
...
@@ -4374,7 +4374,7 @@ void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location) {
}
/* Context activation is done by the caller. */
void
surface_load_ds_location
(
IWineD3DSurface
*
iface
,
struct
WineD3DC
ontext
*
context
,
DWORD
location
)
void
surface_load_ds_location
(
IWineD3DSurface
*
iface
,
struct
wined3d_c
ontext
*
context
,
DWORD
location
)
{
IWineD3DSurfaceImpl
*
This
=
(
IWineD3DSurfaceImpl
*
)
iface
;
IWineD3DDeviceImpl
*
device
=
This
->
resource
.
wineD3DDevice
;
...
...
dlls/wined3d/swapchain.c
View file @
da1e5573
...
...
@@ -372,10 +372,11 @@ const IWineD3DSwapChainVtbl IWineD3DSwapChain_Vtbl =
IWineD3DBaseSwapChainImpl_GetGammaRamp
};
WineD3DContext
*
IWineD3DSwapChainImpl_CreateContextForThread
(
IWineD3DSwapChain
*
iface
)
{
WineD3DContext
*
ctx
;
struct
wined3d_context
*
IWineD3DSwapChainImpl_CreateContextForThread
(
IWineD3DSwapChain
*
iface
)
{
IWineD3DSwapChainImpl
*
This
=
(
IWineD3DSwapChainImpl
*
)
iface
;
WineD3DContext
**
newArray
;
struct
wined3d_context
**
newArray
;
struct
wined3d_context
*
ctx
;
TRACE
(
"Creating a new context for swapchain %p, thread %d
\n
"
,
This
,
GetCurrentThreadId
());
...
...
@@ -402,7 +403,7 @@ WineD3DContext *IWineD3DSwapChainImpl_CreateContextForThread(IWineD3DSwapChain *
return
ctx
;
}
void
get_drawable_size_swapchain
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
void
get_drawable_size_swapchain
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
)
{
IWineD3DSurfaceImpl
*
surface
=
(
IWineD3DSurfaceImpl
*
)
context
->
current_rt
;
/* The drawable size of an onscreen drawable is the surface size.
...
...
dlls/wined3d/utils.c
View file @
da1e5573
...
...
@@ -2394,7 +2394,8 @@ void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *des
*/
#define GLINFO_LOCATION stateblock->wineD3DDevice->adapter->gl_info
/* GL locking is done by the caller (state handler) */
void
texture_activate_dimensions
(
DWORD
stage
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
texture_activate_dimensions
(
DWORD
stage
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
if
(
stateblock
->
textures
[
stage
])
{
switch
(
IWineD3DBaseTexture_GetTextureDimensions
(
stateblock
->
textures
[
stage
]))
{
case
GL_TEXTURE_2D
:
...
...
@@ -2468,7 +2469,8 @@ void texture_activate_dimensions(DWORD stage, IWineD3DStateBlockImpl *stateblock
}
/* GL locking is done by the caller (state handler) */
void
sampler_texdim
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
context
)
{
void
sampler_texdim
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
context
)
{
DWORD
sampler
=
state
-
STATE_SAMPLER
(
0
);
DWORD
mapped_stage
=
stateblock
->
wineD3DDevice
->
texUnitMap
[
sampler
];
...
...
dlls/wined3d/wined3d_private.h
View file @
da1e5573
...
...
@@ -1070,8 +1070,6 @@ extern glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT];
(((((d3dvtVertexType) >> (16 + (2 * (tex_num)))) + 1) & 0x03) + 1)
/* Routines and structures related to state management */
typedef
struct
WineD3DContext
WineD3DContext
;
typedef
void
(
*
APPLYSTATEFUNC
)(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DContext
*
ctx
);
#define STATE_RENDER(a) (a)
#define STATE_IS_RENDER(a) ((a) >= STATE_RENDER(1) && (a) <= STATE_RENDER(WINEHIGHEST_RENDER_STATE))
...
...
@@ -1123,63 +1121,6 @@ typedef void (*APPLYSTATEFUNC)(DWORD state, IWineD3DStateBlockImpl *stateblock,
#define STATE_HIGHEST (STATE_FRONTFACE)
struct
StateEntry
{
DWORD
representative
;
APPLYSTATEFUNC
apply
;
};
struct
StateEntryTemplate
{
DWORD
state
;
struct
StateEntry
content
;
GL_SupportedExt
extension
;
};
struct
fragment_caps
{
DWORD
PrimitiveMiscCaps
;
DWORD
TextureOpCaps
;
DWORD
MaxTextureBlendStages
;
DWORD
MaxSimultaneousTextures
;
};
struct
fragment_pipeline
{
void
(
*
enable_extension
)(
IWineD3DDevice
*
iface
,
BOOL
enable
);
void
(
*
get_caps
)(
WINED3DDEVTYPE
devtype
,
const
struct
wined3d_gl_info
*
gl_info
,
struct
fragment_caps
*
caps
);
HRESULT
(
*
alloc_private
)(
IWineD3DDevice
*
iface
);
void
(
*
free_private
)(
IWineD3DDevice
*
iface
);
BOOL
(
*
color_fixup_supported
)(
struct
color_fixup_desc
fixup
);
const
struct
StateEntryTemplate
*
states
;
BOOL
ffp_proj_control
;
};
extern
const
struct
StateEntryTemplate
misc_state_template
[];
extern
const
struct
StateEntryTemplate
ffp_vertexstate_template
[];
extern
const
struct
fragment_pipeline
ffp_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
nvrc_fragment_pipeline
;
/* "Base" state table */
HRESULT
compile_state_table
(
struct
StateEntry
*
StateTable
,
APPLYSTATEFUNC
**
dev_multistate_funcs
,
const
struct
wined3d_gl_info
*
gl_info
,
const
struct
StateEntryTemplate
*
vertex
,
const
struct
fragment_pipeline
*
fragment
,
const
struct
StateEntryTemplate
*
misc
);
/* Shaders for color conversions in blits */
struct
blit_shader
{
HRESULT
(
*
alloc_private
)(
IWineD3DDevice
*
iface
);
void
(
*
free_private
)(
IWineD3DDevice
*
iface
);
HRESULT
(
*
set_shader
)(
IWineD3DDevice
*
iface
,
const
struct
GlPixelFormatDesc
*
format_desc
,
GLenum
textype
,
UINT
width
,
UINT
height
);
void
(
*
unset_shader
)(
IWineD3DDevice
*
iface
);
BOOL
(
*
color_fixup_supported
)(
struct
color_fixup_desc
fixup
);
};
extern
const
struct
blit_shader
ffp_blit
;
extern
const
struct
blit_shader
arbfp_blit
;
enum
fogsource
{
FOGSOURCE_FFP
,
FOGSOURCE_VS
,
...
...
@@ -1192,18 +1133,17 @@ struct wined3d_occlusion_query
{
struct
list
entry
;
GLuint
id
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
};
struct
wined3d_event_query
{
struct
list
entry
;
GLuint
id
;
struct
WineD3DC
ontext
*
context
;
struct
wined3d_c
ontext
*
context
;
};
/* The new context manager that should deal with onscreen and offscreen rendering */
struct
WineD3DContext
struct
wined3d_context
{
const
struct
wined3d_gl_info
*
gl_info
;
/* State dirtification
...
...
@@ -1280,6 +1220,67 @@ struct WineD3DContext
GLuint
dummy_arbfp_prog
;
};
typedef
void
(
*
APPLYSTATEFUNC
)(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_context
*
ctx
);
struct
StateEntry
{
DWORD
representative
;
APPLYSTATEFUNC
apply
;
};
struct
StateEntryTemplate
{
DWORD
state
;
struct
StateEntry
content
;
GL_SupportedExt
extension
;
};
struct
fragment_caps
{
DWORD
PrimitiveMiscCaps
;
DWORD
TextureOpCaps
;
DWORD
MaxTextureBlendStages
;
DWORD
MaxSimultaneousTextures
;
};
struct
fragment_pipeline
{
void
(
*
enable_extension
)(
IWineD3DDevice
*
iface
,
BOOL
enable
);
void
(
*
get_caps
)(
WINED3DDEVTYPE
devtype
,
const
struct
wined3d_gl_info
*
gl_info
,
struct
fragment_caps
*
caps
);
HRESULT
(
*
alloc_private
)(
IWineD3DDevice
*
iface
);
void
(
*
free_private
)(
IWineD3DDevice
*
iface
);
BOOL
(
*
color_fixup_supported
)(
struct
color_fixup_desc
fixup
);
const
struct
StateEntryTemplate
*
states
;
BOOL
ffp_proj_control
;
};
extern
const
struct
StateEntryTemplate
misc_state_template
[];
extern
const
struct
StateEntryTemplate
ffp_vertexstate_template
[];
extern
const
struct
fragment_pipeline
ffp_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
nvrc_fragment_pipeline
;
/* "Base" state table */
HRESULT
compile_state_table
(
struct
StateEntry
*
StateTable
,
APPLYSTATEFUNC
**
dev_multistate_funcs
,
const
struct
wined3d_gl_info
*
gl_info
,
const
struct
StateEntryTemplate
*
vertex
,
const
struct
fragment_pipeline
*
fragment
,
const
struct
StateEntryTemplate
*
misc
);
/* Shaders for color conversions in blits */
struct
blit_shader
{
HRESULT
(
*
alloc_private
)(
IWineD3DDevice
*
iface
);
void
(
*
free_private
)(
IWineD3DDevice
*
iface
);
HRESULT
(
*
set_shader
)(
IWineD3DDevice
*
iface
,
const
struct
GlPixelFormatDesc
*
format_desc
,
GLenum
textype
,
UINT
width
,
UINT
height
);
void
(
*
unset_shader
)(
IWineD3DDevice
*
iface
);
BOOL
(
*
color_fixup_supported
)(
struct
color_fixup_desc
fixup
);
};
extern
const
struct
blit_shader
ffp_blit
;
extern
const
struct
blit_shader
arbfp_blit
;
typedef
enum
ContextUsage
{
CTXUSAGE_RESOURCELOAD
=
1
,
/* Only loads textures: No State is applied */
CTXUSAGE_DRAWPRIM
=
2
,
/* OpenGL states are set up for blitting DirectDraw surfaces */
...
...
@@ -1287,22 +1288,23 @@ typedef enum ContextUsage {
CTXUSAGE_CLEAR
=
4
,
/* Drawable and states are set up for clearing */
}
ContextUsage
;
struct
WineD3DContext
*
ActivateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurface
*
target
,
enum
ContextUsage
usage
);
WineD3DContext
*
CreateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurfaceImpl
*
target
,
HWND
win
,
BOOL
create_pbuffer
,
const
WINED3DPRESENT_PARAMETERS
*
pPresentParms
);
void
DestroyContext
(
IWineD3DDeviceImpl
*
This
,
WineD3DContext
*
context
);
void
context_alloc_event_query
(
struct
WineD3DContext
*
context
,
struct
wined3d_event_query
*
query
);
void
context_alloc_occlusion_query
(
struct
WineD3DContext
*
context
,
struct
wined3d_occlusion_query
*
query
);
struct
wined3d_context
*
ActivateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurface
*
target
,
enum
ContextUsage
usage
);
struct
wined3d_context
*
CreateContext
(
IWineD3DDeviceImpl
*
This
,
IWineD3DSurfaceImpl
*
target
,
HWND
win
,
BOOL
create_pbuffer
,
const
WINED3DPRESENT_PARAMETERS
*
pPresentParms
);
void
DestroyContext
(
IWineD3DDeviceImpl
*
This
,
struct
wined3d_context
*
context
);
void
context_alloc_event_query
(
struct
wined3d_context
*
context
,
struct
wined3d_event_query
*
query
);
void
context_alloc_occlusion_query
(
struct
wined3d_context
*
context
,
struct
wined3d_occlusion_query
*
query
);
void
context_resource_released
(
IWineD3DDevice
*
iface
,
IWineD3DResource
*
resource
,
WINED3DRESOURCETYPE
type
);
void
context_bind_fbo
(
struct
WineD3DC
ontext
*
context
,
GLenum
target
,
GLuint
*
fbo
);
void
context_attach_depth_stencil_fbo
(
struct
WineD3DC
ontext
*
context
,
void
context_bind_fbo
(
struct
wined3d_c
ontext
*
context
,
GLenum
target
,
GLuint
*
fbo
);
void
context_attach_depth_stencil_fbo
(
struct
wined3d_c
ontext
*
context
,
GLenum
fbo_target
,
IWineD3DSurface
*
depth_stencil
,
BOOL
use_render_buffer
);
void
context_attach_surface_fbo
(
const
struct
WineD3DC
ontext
*
context
,
void
context_attach_surface_fbo
(
const
struct
wined3d_c
ontext
*
context
,
GLenum
fbo_target
,
DWORD
idx
,
IWineD3DSurface
*
surface
);
void
context_free_event_query
(
struct
wined3d_event_query
*
query
);
void
context_free_occlusion_query
(
struct
wined3d_occlusion_query
*
query
);
struct
WineD3DC
ontext
*
context_get_current
(
void
);
struct
wined3d_c
ontext
*
context_get_current
(
void
);
DWORD
context_get_tls_idx
(
void
);
BOOL
context_set_current
(
struct
WineD3DC
ontext
*
ctx
);
BOOL
context_set_current
(
struct
wined3d_c
ontext
*
ctx
);
void
context_set_tls_idx
(
DWORD
idx
);
void
delete_opengl_contexts
(
IWineD3DDevice
*
iface
,
IWineD3DSwapChain
*
swapchain
);
...
...
@@ -1615,9 +1617,9 @@ struct IWineD3DDeviceImpl
const
WineDirect3DVertexStridedData
*
up_strided
;
/* Context management */
WineD3DContext
**
contexts
;
/* Dynamic array containing pointers to context structures */
struct
wined3d_context
**
contexts
;
UINT
numContexts
;
WineD3DContext
*
pbufferContext
;
/* The context that has a pbuffer as drawable */
struct
wined3d_context
*
pbufferContext
;
/* The context that has a pbuffer as drawable */
DWORD
pbufferWidth
,
pbufferHeight
;
/* Size of the buffer drawable */
/* High level patch management */
...
...
@@ -1640,7 +1642,8 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa
float
Z
,
DWORD
Stencil
);
void
IWineD3DDeviceImpl_FindTexUnitMap
(
IWineD3DDeviceImpl
*
This
);
void
IWineD3DDeviceImpl_MarkStateDirty
(
IWineD3DDeviceImpl
*
This
,
DWORD
state
);
static
inline
BOOL
isStateDirty
(
WineD3DContext
*
context
,
DWORD
state
)
{
static
inline
BOOL
isStateDirty
(
struct
wined3d_context
*
context
,
DWORD
state
)
{
DWORD
idx
=
state
>>
5
;
BYTE
shift
=
state
&
0x1f
;
return
context
->
isStateDirty
[
idx
]
&
(
1
<<
shift
);
...
...
@@ -1956,7 +1959,7 @@ struct IWineD3DSurfaceImpl
UINT
pow2Height
;
/* A method to retrieve the drawable size. Not in the Vtable to make it changeable */
void
(
*
get_drawable_size
)(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
(
*
get_drawable_size
)(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
/* Oversized texture */
RECT
glRect
;
...
...
@@ -2050,10 +2053,10 @@ HRESULT WINAPI IWineD3DBaseSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DL
void
WINAPI
IWineD3DBaseSurfaceImpl_BindTexture
(
IWineD3DSurface
*
iface
,
BOOL
srgb
);
const
void
*
WINAPI
IWineD3DBaseSurfaceImpl_GetData
(
IWineD3DSurface
*
iface
);
void
get_drawable_size_swapchain
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_backbuffer
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_pbuffer
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_fbo
(
struct
WineD3DC
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_swapchain
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_backbuffer
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_pbuffer
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
get_drawable_size_fbo
(
struct
wined3d_c
ontext
*
context
,
UINT
*
width
,
UINT
*
height
);
void
flip_surface
(
IWineD3DSurfaceImpl
*
front
,
IWineD3DSurfaceImpl
*
back
);
...
...
@@ -2463,7 +2466,7 @@ typedef struct IWineD3DSwapChainImpl
long
prev_time
,
frames
;
/* Performance tracking */
unsigned
int
vSyncCounter
;
WineD3DContext
**
context
;
/* Later a array for multithreading */
struct
wined3d_context
**
context
;
unsigned
int
num_contexts
;
HWND
win_handle
;
...
...
@@ -2486,7 +2489,7 @@ HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetPresentParameters(IWineD3DSwapChain
HRESULT
WINAPI
IWineD3DBaseSwapChainImpl_SetGammaRamp
(
IWineD3DSwapChain
*
iface
,
DWORD
Flags
,
CONST
WINED3DGAMMARAMP
*
pRamp
);
HRESULT
WINAPI
IWineD3DBaseSwapChainImpl_GetGammaRamp
(
IWineD3DSwapChain
*
iface
,
WINED3DGAMMARAMP
*
pRamp
);
WineD3DC
ontext
*
IWineD3DSwapChainImpl_CreateContextForThread
(
IWineD3DSwapChain
*
iface
);
struct
wined3d_c
ontext
*
IWineD3DSwapChainImpl_CreateContextForThread
(
IWineD3DSwapChain
*
iface
);
/*****************************************************************************
* Utility function prototypes
...
...
@@ -2521,18 +2524,18 @@ GLenum CompareFunc(DWORD func);
BOOL
is_invalid_op
(
IWineD3DDeviceImpl
*
This
,
int
stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
);
void
set_tex_op_nvrc
(
IWineD3DDevice
*
iface
,
BOOL
is_alpha
,
int
stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
,
INT
texture_idx
,
DWORD
dst
);
void
set_texture_matrix
(
const
float
*
smat
,
DWORD
flags
,
BOOL
calculatedCoords
,
BOOL
transformed
,
DWORD
coordtype
,
BOOL
ffp_can_disable_proj
);
void
texture_activate_dimensions
(
DWORD
stage
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
sampler_texdim
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
tex_alphaop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
apply_pixelshader
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
state_fogcolor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
state_fogdensity
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
state_fogstartend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
state_fog_fragpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
WineD3DC
ontext
*
context
);
void
texture_activate_dimensions
(
DWORD
stage
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
sampler_texdim
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
tex_alphaop
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
apply_pixelshader
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
state_fogcolor
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
state_fogdensity
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
state_fogstartend
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
state_fog_fragpart
(
DWORD
state
,
IWineD3DStateBlockImpl
*
stateblock
,
struct
wined3d_c
ontext
*
context
);
void
surface_add_dirty_rect
(
IWineD3DSurface
*
iface
,
const
RECT
*
dirty_rect
);
GLenum
surface_get_gl_buffer
(
IWineD3DSurface
*
iface
,
IWineD3DSwapChain
*
swapchain
);
void
surface_load_ds_location
(
IWineD3DSurface
*
iface
,
struct
WineD3DC
ontext
*
context
,
DWORD
location
);
void
surface_load_ds_location
(
IWineD3DSurface
*
iface
,
struct
wined3d_c
ontext
*
context
,
DWORD
location
);
void
surface_modify_ds_location
(
IWineD3DSurface
*
iface
,
DWORD
location
);
void
surface_set_compatible_renderbuffer
(
IWineD3DSurface
*
iface
,
unsigned
int
width
,
unsigned
int
height
);
void
surface_set_texture_name
(
IWineD3DSurface
*
iface
,
GLuint
name
,
BOOL
srgb_name
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment