Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
b9f4fdcc
Commit
b9f4fdcc
authored
Sep 27, 2010
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 27, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Capture stateblock state from a wined3d_state structure.
parent
9f75633a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
106 additions
and
115 deletions
+106
-115
stateblock.c
dlls/wined3d/stateblock.c
+106
-115
No files found.
dlls/wined3d/stateblock.c
View file @
b9f4fdcc
...
...
@@ -600,22 +600,24 @@ static void record_lights(IWineD3DStateBlockImpl *This, const struct wined3d_sta
static
HRESULT
WINAPI
IWineD3DStateBlockImpl_Capture
(
IWineD3DStateBlock
*
iface
)
{
IWineD3DStateBlockImpl
*
This
=
(
IWineD3DStateBlockImpl
*
)
iface
;
IWineD3DStateBlockImpl
*
targetStateBlock
=
This
->
device
->
stateBlock
;
const
struct
wined3d_state
*
src_state
=
&
This
->
device
->
stateBlock
->
state
;
unsigned
int
i
;
DWORD
map
;
TRACE
(
"
(%p) : Updating state block %p ------------------v
\n
"
,
targetStateBlock
,
This
);
TRACE
(
"
iface %p.
\n
"
,
iface
);
if
(
This
->
changed
.
vertexShader
&&
This
->
state
.
vertex_shader
!=
targetStateBlock
->
state
.
vertex_shader
)
TRACE
(
"Capturing state %p.
\n
"
,
src_state
);
if
(
This
->
changed
.
vertexShader
&&
This
->
state
.
vertex_shader
!=
src_state
->
vertex_shader
)
{
TRACE
(
"Updating vertex shader from %p to %p
\n
"
,
This
->
state
.
vertex_shader
,
targetStateBlock
->
state
.
vertex_shader
);
This
->
state
.
vertex_shader
,
src_state
->
vertex_shader
);
if
(
targetStateBlock
->
state
.
vertex_shader
)
IWineD3DVertexShader_AddRef
((
IWineD3DVertexShader
*
)
targetStateBlock
->
state
.
vertex_shader
);
if
(
src_state
->
vertex_shader
)
IWineD3DVertexShader_AddRef
((
IWineD3DVertexShader
*
)
src_state
->
vertex_shader
);
if
(
This
->
state
.
vertex_shader
)
IWineD3DVertexShader_Release
((
IWineD3DVertexShader
*
)
This
->
state
.
vertex_shader
);
This
->
state
.
vertex_shader
=
targetStateBlock
->
state
.
vertex_shader
;
This
->
state
.
vertex_shader
=
src_state
->
vertex_shader
;
}
/* Vertex Shader Float Constants */
...
...
@@ -623,17 +625,16 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
unsigned
int
idx
=
This
->
contained_vs_consts_f
[
i
];
TRACE
(
"Setting %p from %p %u to {%.8e, %.8e, %.8e, %.8e}.
\n
"
,
This
,
targetStateBlock
,
idx
,
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
0
],
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
1
],
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
2
],
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
3
]);
TRACE
(
"Setting vs_consts_f[%u] to {%.8e, %.8e, %.8e, %.8e}.
\n
"
,
idx
,
src_state
->
vs_consts_f
[
idx
*
4
+
0
],
src_state
->
vs_consts_f
[
idx
*
4
+
1
],
src_state
->
vs_consts_f
[
idx
*
4
+
2
],
src_state
->
vs_consts_f
[
idx
*
4
+
3
]);
This
->
state
.
vs_consts_f
[
idx
*
4
+
0
]
=
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
0
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
1
]
=
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
1
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
2
]
=
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
2
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
3
]
=
targetStateBlock
->
state
.
vs_consts_f
[
idx
*
4
+
3
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
0
]
=
src_state
->
vs_consts_f
[
idx
*
4
+
0
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
1
]
=
src_state
->
vs_consts_f
[
idx
*
4
+
1
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
2
]
=
src_state
->
vs_consts_f
[
idx
*
4
+
2
];
This
->
state
.
vs_consts_f
[
idx
*
4
+
3
]
=
src_state
->
vs_consts_f
[
idx
*
4
+
3
];
}
/* Vertex Shader Integer Constants */
...
...
@@ -641,17 +642,16 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
unsigned
int
idx
=
This
->
contained_vs_consts_i
[
i
];
TRACE
(
"Setting %p from %p %u to {%d, %d, %d, %d}.
\n
"
,
This
,
targetStateBlock
,
idx
,
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
0
],
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
1
],
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
2
],
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
3
]);
TRACE
(
"Setting vs_consts[%u] to {%d, %d, %d, %d}.
\n
"
,
idx
,
src_state
->
vs_consts_i
[
idx
*
4
+
0
],
src_state
->
vs_consts_i
[
idx
*
4
+
1
],
src_state
->
vs_consts_i
[
idx
*
4
+
2
],
src_state
->
vs_consts_i
[
idx
*
4
+
3
]);
This
->
state
.
vs_consts_i
[
idx
*
4
+
0
]
=
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
0
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
1
]
=
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
1
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
2
]
=
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
2
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
3
]
=
targetStateBlock
->
state
.
vs_consts_i
[
idx
*
4
+
3
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
0
]
=
src_state
->
vs_consts_i
[
idx
*
4
+
0
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
1
]
=
src_state
->
vs_consts_i
[
idx
*
4
+
1
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
2
]
=
src_state
->
vs_consts_i
[
idx
*
4
+
2
];
This
->
state
.
vs_consts_i
[
idx
*
4
+
3
]
=
src_state
->
vs_consts_i
[
idx
*
4
+
3
];
}
/* Vertex Shader Boolean Constants */
...
...
@@ -659,11 +659,10 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
unsigned
int
idx
=
This
->
contained_vs_consts_b
[
i
];
TRACE
(
"Setting %p from %p %u to %s.
\n
"
,
This
,
targetStateBlock
,
idx
,
targetStateBlock
->
state
.
vs_consts_b
[
idx
]
?
"TRUE"
:
"FALSE"
);
TRACE
(
"Setting vs_consts_b[%u] to %s.
\n
"
,
idx
,
src_state
->
vs_consts_b
[
idx
]
?
"TRUE"
:
"FALSE"
);
This
->
state
.
vs_consts_b
[
idx
]
=
targetStateBlock
->
state
.
vs_consts_b
[
idx
];
This
->
state
.
vs_consts_b
[
idx
]
=
src_state
->
vs_consts_b
[
idx
];
}
/* Pixel Shader Float Constants */
...
...
@@ -671,44 +670,42 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
unsigned
int
idx
=
This
->
contained_ps_consts_f
[
i
];
TRACE
(
"Setting %p from %p %u to {%.8e, %.8e, %.8e, %.8e}.
\n
"
,
This
,
targetStateBlock
,
idx
,
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
0
],
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
1
],
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
2
],
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
3
]);
TRACE
(
"Setting ps_consts_f[%u] to {%.8e, %.8e, %.8e, %.8e}.
\n
"
,
idx
,
src_state
->
ps_consts_f
[
idx
*
4
+
0
],
src_state
->
ps_consts_f
[
idx
*
4
+
1
],
src_state
->
ps_consts_f
[
idx
*
4
+
2
],
src_state
->
ps_consts_f
[
idx
*
4
+
3
]);
This
->
state
.
ps_consts_f
[
idx
*
4
+
0
]
=
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
0
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
1
]
=
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
1
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
2
]
=
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
2
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
3
]
=
targetStateBlock
->
state
.
ps_consts_f
[
idx
*
4
+
3
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
0
]
=
src_state
->
ps_consts_f
[
idx
*
4
+
0
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
1
]
=
src_state
->
ps_consts_f
[
idx
*
4
+
1
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
2
]
=
src_state
->
ps_consts_f
[
idx
*
4
+
2
];
This
->
state
.
ps_consts_f
[
idx
*
4
+
3
]
=
src_state
->
ps_consts_f
[
idx
*
4
+
3
];
}
/* Pixel Shader Integer Constants */
for
(
i
=
0
;
i
<
This
->
num_contained_ps_consts_i
;
++
i
)
{
unsigned
int
idx
=
This
->
contained_ps_consts_i
[
i
];
TRACE
(
"Setting %p from %p %u to {%d, %d, %d, %d}.
\n
"
,
This
,
targetStateBlock
,
idx
,
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
0
],
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
1
],
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
2
],
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
3
]);
TRACE
(
"Setting ps_consts_i[%u] to {%d, %d, %d, %d}.
\n
"
,
idx
,
src_state
->
ps_consts_i
[
idx
*
4
+
0
],
src_state
->
ps_consts_i
[
idx
*
4
+
1
],
src_state
->
ps_consts_i
[
idx
*
4
+
2
],
src_state
->
ps_consts_i
[
idx
*
4
+
3
]);
This
->
state
.
ps_consts_i
[
idx
*
4
+
0
]
=
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
0
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
1
]
=
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
1
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
2
]
=
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
2
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
3
]
=
targetStateBlock
->
state
.
ps_consts_i
[
idx
*
4
+
3
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
0
]
=
src_state
->
ps_consts_i
[
idx
*
4
+
0
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
1
]
=
src_state
->
ps_consts_i
[
idx
*
4
+
1
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
2
]
=
src_state
->
ps_consts_i
[
idx
*
4
+
2
];
This
->
state
.
ps_consts_i
[
idx
*
4
+
3
]
=
src_state
->
ps_consts_i
[
idx
*
4
+
3
];
}
/* Pixel Shader Boolean Constants */
for
(
i
=
0
;
i
<
This
->
num_contained_ps_consts_b
;
++
i
)
{
unsigned
int
idx
=
This
->
contained_ps_consts_b
[
i
];
TRACE
(
"Setting
%p from %p %u to %s.
\n
"
,
This
,
targetStateBlock
,
idx
,
targetStateBlock
->
state
.
ps_consts_b
[
idx
]
?
"TRUE"
:
"FALSE"
);
TRACE
(
"Setting
ps_consts_b[%u] to %s.
\n
"
,
idx
,
src_state
->
ps_consts_b
[
idx
]
?
"TRUE"
:
"FALSE"
);
This
->
state
.
ps_consts_b
[
idx
]
=
targetStateBlock
->
state
.
ps_consts_b
[
idx
];
This
->
state
.
ps_consts_b
[
idx
]
=
src_state
->
ps_consts_b
[
idx
];
}
/* Others + Render & Texture */
...
...
@@ -718,63 +715,61 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
TRACE
(
"Updating transform %#x.
\n
"
,
transform
);
This
->
state
.
transforms
[
transform
]
=
targetStateBlock
->
state
.
transforms
[
transform
];
This
->
state
.
transforms
[
transform
]
=
src_state
->
transforms
[
transform
];
}
if
(
This
->
changed
.
primitive_type
)
This
->
state
.
gl_primitive_type
=
targetStateBlock
->
state
.
gl_primitive_type
;
if
(
This
->
changed
.
primitive_type
)
This
->
state
.
gl_primitive_type
=
src_state
->
gl_primitive_type
;
if
(
This
->
changed
.
indices
&&
((
This
->
state
.
index_buffer
!=
targetStateBlock
->
state
.
index_buffer
)
||
(
This
->
state
.
base_vertex_index
!=
targetStateBlock
->
state
.
base_vertex_index
)
||
(
This
->
state
.
index_format
!=
targetStateBlock
->
state
.
index_format
)))
&&
((
This
->
state
.
index_buffer
!=
src_state
->
index_buffer
)
||
(
This
->
state
.
base_vertex_index
!=
src_state
->
base_vertex_index
)
||
(
This
->
state
.
index_format
!=
src_state
->
index_format
)))
{
TRACE
(
"Updating index buffer to %p, base
VertexI
ndex to %d.
\n
"
,
targetStateBlock
->
state
.
index_buffer
,
targetStateBlock
->
state
.
base_vertex_index
);
TRACE
(
"Updating index buffer to %p, base
vertex i
ndex to %d.
\n
"
,
src_state
->
index_buffer
,
src_state
->
base_vertex_index
);
if
(
targetStateBlock
->
state
.
index_buffer
)
IWineD3DBuffer_AddRef
((
IWineD3DBuffer
*
)
targetStateBlock
->
state
.
index_buffer
);
if
(
src_state
->
index_buffer
)
IWineD3DBuffer_AddRef
((
IWineD3DBuffer
*
)
src_state
->
index_buffer
);
if
(
This
->
state
.
index_buffer
)
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
This
->
state
.
index_buffer
);
This
->
state
.
index_buffer
=
targetStateBlock
->
state
.
index_buffer
;
This
->
state
.
base_vertex_index
=
targetStateBlock
->
state
.
base_vertex_index
;
This
->
state
.
index_format
=
targetStateBlock
->
state
.
index_format
;
This
->
state
.
index_buffer
=
src_state
->
index_buffer
;
This
->
state
.
base_vertex_index
=
src_state
->
base_vertex_index
;
This
->
state
.
index_format
=
src_state
->
index_format
;
}
if
(
This
->
changed
.
vertexDecl
&&
This
->
state
.
vertex_declaration
!=
targetStateBlock
->
state
.
vertex_declaration
)
if
(
This
->
changed
.
vertexDecl
&&
This
->
state
.
vertex_declaration
!=
src_state
->
vertex_declaration
)
{
TRACE
(
"Updating vertex declaration from %p to %p.
\n
"
,
This
->
state
.
vertex_declaration
,
targetStateBlock
->
state
.
vertex_declaration
);
This
->
state
.
vertex_declaration
,
src_state
->
vertex_declaration
);
if
(
targetStateBlock
->
state
.
vertex_declaration
)
IWineD3DVertexDeclaration_AddRef
(
(
IWineD3DVertexDeclaration
*
)
targetStateBlock
->
state
.
vertex_declaration
);
if
(
src_state
->
vertex_declaration
)
IWineD3DVertexDeclaration_AddRef
((
IWineD3DVertexDeclaration
*
)
src_state
->
vertex_declaration
);
if
(
This
->
state
.
vertex_declaration
)
IWineD3DVertexDeclaration_Release
((
IWineD3DVertexDeclaration
*
)
This
->
state
.
vertex_declaration
);
This
->
state
.
vertex_declaration
=
targetStateBlock
->
state
.
vertex_declaration
;
This
->
state
.
vertex_declaration
=
src_state
->
vertex_declaration
;
}
if
(
This
->
changed
.
material
&&
memcmp
(
&
targetStateBlock
->
state
.
material
,
&
This
->
state
.
material
,
sizeof
(
This
->
state
.
material
)))
if
(
This
->
changed
.
material
&&
memcmp
(
&
src_state
->
material
,
&
This
->
state
.
material
,
sizeof
(
This
->
state
.
material
)))
{
TRACE
(
"Updating material.
\n
"
);
This
->
state
.
material
=
targetStateBlock
->
state
.
material
;
This
->
state
.
material
=
src_state
->
material
;
}
if
(
This
->
changed
.
viewport
&&
memcmp
(
&
targetStateBlock
->
state
.
viewport
,
&
This
->
state
.
viewport
,
sizeof
(
This
->
state
.
viewport
)))
if
(
This
->
changed
.
viewport
&&
memcmp
(
&
src_state
->
viewport
,
&
This
->
state
.
viewport
,
sizeof
(
This
->
state
.
viewport
)))
{
TRACE
(
"Updating viewport.
\n
"
);
This
->
state
.
viewport
=
targetStateBlock
->
state
.
viewport
;
This
->
state
.
viewport
=
src_state
->
viewport
;
}
if
(
This
->
changed
.
scissorRect
&&
memcmp
(
&
targetStateBlock
->
state
.
scissor_rect
,
if
(
This
->
changed
.
scissorRect
&&
memcmp
(
&
src_state
->
scissor_rect
,
&
This
->
state
.
scissor_rect
,
sizeof
(
This
->
state
.
scissor_rect
)))
{
TRACE
(
"Updating scissor rect.
\n
"
);
This
->
state
.
scissor_rect
=
targetStateBlock
->
state
.
scissor_rect
;
This
->
state
.
scissor_rect
=
src_state
->
scissor_rect
;
}
map
=
This
->
changed
.
streamSource
;
...
...
@@ -782,19 +777,19 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
if
(
!
(
map
&
1
))
continue
;
if
(
This
->
state
.
streams
[
i
].
stride
!=
targetStateBlock
->
state
.
streams
[
i
].
stride
||
This
->
state
.
streams
[
i
].
buffer
!=
targetStateBlock
->
state
.
streams
[
i
].
buffer
)
if
(
This
->
state
.
streams
[
i
].
stride
!=
src_state
->
streams
[
i
].
stride
||
This
->
state
.
streams
[
i
].
buffer
!=
src_state
->
streams
[
i
].
buffer
)
{
TRACE
(
"Updating stream source %u to %p, stride to %u.
\n
"
,
i
,
targetStateBlock
->
state
.
streams
[
i
].
buffer
,
targetStateBlock
->
state
.
streams
[
i
].
stride
);
i
,
src_state
->
streams
[
i
].
buffer
,
src_state
->
streams
[
i
].
stride
);
This
->
state
.
streams
[
i
].
stride
=
targetStateBlock
->
state
.
streams
[
i
].
stride
;
if
(
targetStateBlock
->
state
.
streams
[
i
].
buffer
)
IWineD3DBuffer_AddRef
((
IWineD3DBuffer
*
)
targetStateBlock
->
state
.
streams
[
i
].
buffer
);
This
->
state
.
streams
[
i
].
stride
=
src_state
->
streams
[
i
].
stride
;
if
(
src_state
->
streams
[
i
].
buffer
)
IWineD3DBuffer_AddRef
((
IWineD3DBuffer
*
)
src_state
->
streams
[
i
].
buffer
);
if
(
This
->
state
.
streams
[
i
].
buffer
)
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
This
->
state
.
streams
[
i
].
buffer
);
This
->
state
.
streams
[
i
].
buffer
=
targetStateBlock
->
state
.
streams
[
i
].
buffer
;
This
->
state
.
streams
[
i
].
buffer
=
src_state
->
streams
[
i
].
buffer
;
}
}
...
...
@@ -803,14 +798,14 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
if
(
!
(
map
&
1
))
continue
;
if
(
This
->
state
.
streams
[
i
].
frequency
!=
targetStateBlock
->
state
.
streams
[
i
].
frequency
||
This
->
state
.
streams
[
i
].
flags
!=
targetStateBlock
->
state
.
streams
[
i
].
flags
)
if
(
This
->
state
.
streams
[
i
].
frequency
!=
src_state
->
streams
[
i
].
frequency
||
This
->
state
.
streams
[
i
].
flags
!=
src_state
->
streams
[
i
].
flags
)
{
TRACE
(
"Updating stream frequency %u to %u flags to %#x.
\n
"
,
i
,
targetStateBlock
->
state
.
streams
[
i
].
frequency
,
targetStateBlock
->
state
.
streams
[
i
].
flags
);
i
,
src_state
->
streams
[
i
].
frequency
,
src_state
->
streams
[
i
].
flags
);
This
->
state
.
streams
[
i
].
frequency
=
targetStateBlock
->
state
.
streams
[
i
].
frequency
;
This
->
state
.
streams
[
i
].
flags
=
targetStateBlock
->
state
.
streams
[
i
].
flags
;
This
->
state
.
streams
[
i
].
frequency
=
src_state
->
streams
[
i
].
frequency
;
This
->
state
.
streams
[
i
].
flags
=
src_state
->
streams
[
i
].
flags
;
}
}
...
...
@@ -819,12 +814,10 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
if
(
!
(
map
&
1
))
continue
;
if
(
memcmp
(
targetStateBlock
->
state
.
clip_planes
[
i
],
This
->
state
.
clip_planes
[
i
],
sizeof
(
*
This
->
state
.
clip_planes
)))
if
(
memcmp
(
src_state
->
clip_planes
[
i
],
This
->
state
.
clip_planes
[
i
],
sizeof
(
*
This
->
state
.
clip_planes
)))
{
TRACE
(
"Updating clipplane %u.
\n
"
,
i
);
memcpy
(
This
->
state
.
clip_planes
[
i
],
targetStateBlock
->
state
.
clip_planes
[
i
],
sizeof
(
*
This
->
state
.
clip_planes
));
memcpy
(
This
->
state
.
clip_planes
[
i
],
src_state
->
clip_planes
[
i
],
sizeof
(
*
This
->
state
.
clip_planes
));
}
}
...
...
@@ -833,9 +826,9 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
WINED3DRENDERSTATETYPE
rs
=
This
->
contained_render_states
[
i
];
TRACE
(
"Updating render state %#x to %u.
\n
"
,
rs
,
targetStateBlock
->
state
.
render_states
[
rs
]);
TRACE
(
"Updating render state %#x to %u.
\n
"
,
rs
,
src_state
->
render_states
[
rs
]);
This
->
state
.
render_states
[
rs
]
=
targetStateBlock
->
state
.
render_states
[
rs
];
This
->
state
.
render_states
[
rs
]
=
src_state
->
render_states
[
rs
];
}
/* Texture states */
...
...
@@ -845,10 +838,9 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
DWORD
state
=
This
->
contained_tss_states
[
i
].
state
;
TRACE
(
"Updating texturestage state %u, %u to %#x (was %#x).
\n
"
,
stage
,
state
,
targetStateBlock
->
state
.
texture_states
[
stage
][
state
],
This
->
state
.
texture_states
[
stage
][
state
]);
src_state
->
texture_states
[
stage
][
state
],
This
->
state
.
texture_states
[
stage
][
state
]);
This
->
state
.
texture_states
[
stage
][
state
]
=
targetStateBlock
->
state
.
texture_states
[
stage
][
state
];
This
->
state
.
texture_states
[
stage
][
state
]
=
src_state
->
texture_states
[
stage
][
state
];
}
/* Samplers */
...
...
@@ -858,13 +850,13 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
if
(
!
(
map
&
1
))
continue
;
TRACE
(
"Updating texture %u to %p (was %p).
\n
"
,
i
,
targetStateBlock
->
state
.
textures
[
i
],
This
->
state
.
textures
[
i
]);
i
,
src_state
->
textures
[
i
],
This
->
state
.
textures
[
i
]);
if
(
targetStateBlock
->
state
.
textures
[
i
])
IWineD3DBaseTexture_AddRef
((
IWineD3DBaseTexture
*
)
targetStateBlock
->
state
.
textures
[
i
]);
if
(
src_state
->
textures
[
i
])
IWineD3DBaseTexture_AddRef
((
IWineD3DBaseTexture
*
)
src_state
->
textures
[
i
]);
if
(
This
->
state
.
textures
[
i
])
IWineD3DBaseTexture_Release
((
IWineD3DBaseTexture
*
)
This
->
state
.
textures
[
i
]);
This
->
state
.
textures
[
i
]
=
targetStateBlock
->
state
.
textures
[
i
];
This
->
state
.
textures
[
i
]
=
src_state
->
textures
[
i
];
}
for
(
i
=
0
;
i
<
This
->
num_contained_sampler_states
;
++
i
)
...
...
@@ -873,24 +865,23 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
DWORD
state
=
This
->
contained_sampler_states
[
i
].
state
;
TRACE
(
"Updating sampler state %u, %u to %#x (was %#x).
\n
"
,
stage
,
state
,
targetStateBlock
->
state
.
sampler_states
[
stage
][
state
],
This
->
state
.
sampler_states
[
stage
][
state
]);
src_state
->
sampler_states
[
stage
][
state
],
This
->
state
.
sampler_states
[
stage
][
state
]);
This
->
state
.
sampler_states
[
stage
][
state
]
=
targetStateBlock
->
state
.
sampler_states
[
stage
][
state
];
This
->
state
.
sampler_states
[
stage
][
state
]
=
src_state
->
sampler_states
[
stage
][
state
];
}
if
(
This
->
changed
.
pixelShader
&&
This
->
state
.
pixel_shader
!=
targetStateBlock
->
state
.
pixel_shader
)
if
(
This
->
changed
.
pixelShader
&&
This
->
state
.
pixel_shader
!=
src_state
->
pixel_shader
)
{
if
(
targetStateBlock
->
state
.
pixel_shader
)
IWineD3DPixelShader_AddRef
((
IWineD3DPixelShader
*
)
targetStateBlock
->
state
.
pixel_shader
);
if
(
src_state
->
pixel_shader
)
IWineD3DPixelShader_AddRef
((
IWineD3DPixelShader
*
)
src_state
->
pixel_shader
);
if
(
This
->
state
.
pixel_shader
)
IWineD3DPixelShader_Release
((
IWineD3DPixelShader
*
)
This
->
state
.
pixel_shader
);
This
->
state
.
pixel_shader
=
targetStateBlock
->
state
.
pixel_shader
;
This
->
state
.
pixel_shader
=
src_state
->
pixel_shader
;
}
record_lights
(
This
,
&
targetStateBlock
->
state
);
record_lights
(
This
,
src_
state
);
TRACE
(
"
(%p) : Updated state block %p ------------------^
\n
"
,
targetStateBlock
,
This
);
TRACE
(
"
Captue done.
\n
"
);
return
WINED3D_OK
;
}
...
...
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