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
52a900d4
Commit
52a900d4
authored
Dec 31, 2008
by
Henri Verbeet
Committed by
Alexandre Julliard
Jan 02, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Convert streamSource and streamFreq to bitmaps in struct SAVEDSTATES.
parent
457037f4
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
24 deletions
+40
-24
device.c
dlls/wined3d/device.c
+2
-2
stateblock.c
dlls/wined3d/stateblock.c
+36
-20
wined3d_private.h
dlls/wined3d/wined3d_private.h
+2
-2
No files found.
dlls/wined3d/device.c
View file @
52a900d4
...
...
@@ -2547,7 +2547,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetStreamSource(IWineD3DDevice *iface,
oldSrc
=
This
->
updateStateBlock
->
streamSource
[
StreamNumber
];
TRACE
(
"(%p) : StreamNo: %u, OldStream (%p), NewStream (%p), OffsetInBytes %u, NewStride %u
\n
"
,
This
,
StreamNumber
,
oldSrc
,
pStreamData
,
OffsetInBytes
,
Stride
);
This
->
updateStateBlock
->
changed
.
streamSource
[
StreamNumber
]
=
TRUE
;
This
->
updateStateBlock
->
changed
.
streamSource
|=
1
<<
StreamNumber
;
if
(
oldSrc
==
pStreamData
&&
This
->
updateStateBlock
->
streamStride
[
StreamNumber
]
==
Stride
&&
...
...
@@ -2635,7 +2635,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetStreamSourceFreq(IWineD3DDevice *ifa
TRACE
(
"(%p) StreamNumber(%d), Divider(%d)
\n
"
,
This
,
StreamNumber
,
Divider
);
This
->
updateStateBlock
->
streamFlags
[
StreamNumber
]
=
Divider
&
(
WINED3DSTREAMSOURCE_INSTANCEDATA
|
WINED3DSTREAMSOURCE_INDEXEDDATA
);
This
->
updateStateBlock
->
changed
.
streamFreq
[
StreamNumber
]
=
TRUE
;
This
->
updateStateBlock
->
changed
.
streamFreq
|=
1
<<
StreamNumber
;
This
->
updateStateBlock
->
streamFreq
[
StreamNumber
]
=
Divider
&
0x7FFFFF
;
if
(
This
->
updateStateBlock
->
streamFreq
[
StreamNumber
]
!=
oldFreq
||
...
...
dlls/wined3d/stateblock.c
View file @
52a900d4
...
...
@@ -86,8 +86,8 @@ static void stateblock_savedstates_copy(IWineD3DStateBlock* iface, SAVEDSTATES *
dest
->
scissorRect
=
dest
->
scissorRect
;
/* Fixed size arrays */
memcpy
(
dest
->
streamSource
,
source
->
streamSource
,
bsize
*
MAX_STREAMS
)
;
memcpy
(
dest
->
streamFreq
,
source
->
streamFreq
,
bsize
*
MAX_STREAMS
)
;
dest
->
streamSource
=
source
->
streamSource
;
dest
->
streamFreq
=
source
->
streamFreq
;
memcpy
(
dest
->
textures
,
source
->
textures
,
bsize
*
MAX_COMBINED_SAMPLERS
);
memcpy
(
dest
->
transform
,
source
->
transform
,
bsize
*
(
HIGHEST_TRANSFORMSTATE
+
1
));
memcpy
(
dest
->
renderState
,
source
->
renderState
,
bsize
*
(
WINEHIGHEST_RENDER_STATE
+
1
));
...
...
@@ -123,8 +123,8 @@ void stateblock_savedstates_set(
states
->
scissorRect
=
value
;
/* Fixed size arrays */
memset
(
states
->
streamSource
,
value
,
bsize
*
MAX_STREAMS
)
;
memset
(
states
->
streamFreq
,
value
,
bsize
*
MAX_STREAMS
)
;
states
->
streamSource
=
value
?
0xffff
:
0
;
states
->
streamFreq
=
value
?
0xffff
:
0
;
memset
(
states
->
textures
,
value
,
bsize
*
MAX_COMBINED_SAMPLERS
);
memset
(
states
->
transform
,
value
,
bsize
*
(
HIGHEST_TRANSFORMSTATE
+
1
));
memset
(
states
->
renderState
,
value
,
bsize
*
(
WINEHIGHEST_RENDER_STATE
+
1
));
...
...
@@ -372,6 +372,7 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
IWineD3DStateBlockImpl
*
This
=
(
IWineD3DStateBlockImpl
*
)
iface
;
IWineD3DStateBlockImpl
*
targetStateBlock
=
This
->
wineD3DDevice
->
stateBlock
;
unsigned
int
i
,
j
;
WORD
map
;
TRACE
(
"(%p) : Updating state block %p ------------------v
\n
"
,
targetStateBlock
,
This
);
...
...
@@ -510,10 +511,14 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
targetStateBlock
->
scissorRect
=
This
->
scissorRect
;
}
for
(
i
=
0
;
i
<
MAX_STREAMS
;
i
++
)
{
if
(
This
->
changed
.
streamSource
[
i
]
&&
((
This
->
streamStride
[
i
]
!=
targetStateBlock
->
streamStride
[
i
])
||
(
This
->
streamSource
[
i
]
!=
targetStateBlock
->
streamSource
[
i
])))
{
map
=
This
->
changed
.
streamSource
;
for
(
i
=
0
;
map
;
map
>>=
1
,
++
i
)
{
if
(
!
(
map
&
1
))
continue
;
if
(
This
->
streamStride
[
i
]
!=
targetStateBlock
->
streamStride
[
i
]
||
This
->
streamSource
[
i
]
!=
targetStateBlock
->
streamSource
[
i
])
{
TRACE
(
"Updating stream source %u to %p, stride to %u
\n
"
,
i
,
targetStateBlock
->
streamSource
[
i
],
targetStateBlock
->
streamStride
[
i
]);
This
->
streamStride
[
i
]
=
targetStateBlock
->
streamStride
[
i
];
...
...
@@ -521,14 +526,20 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
if
(
This
->
streamSource
[
i
])
IWineD3DVertexBuffer_Release
(
This
->
streamSource
[
i
]);
This
->
streamSource
[
i
]
=
targetStateBlock
->
streamSource
[
i
];
}
}
map
=
This
->
changed
.
streamFreq
;
for
(
i
=
0
;
map
;
map
>>=
1
,
++
i
)
{
if
(
!
(
map
&
1
))
continue
;
if
(
This
->
changed
.
streamFreq
[
i
]
&&
(
This
->
streamFreq
[
i
]
!=
targetStateBlock
->
streamFreq
[
i
]
||
This
->
streamFlags
[
i
]
!=
targetStateBlock
->
streamFlags
[
i
]))
{
TRACE
(
"Updating stream frequency %u to %u flags to %#x
\n
"
,
i
,
targetStateBlock
->
streamFreq
[
i
],
targetStateBlock
->
streamFlags
[
i
]);
This
->
streamFreq
[
i
]
=
targetStateBlock
->
streamFreq
[
i
];
This
->
streamFlags
[
i
]
=
targetStateBlock
->
streamFlags
[
i
];
if
(
This
->
streamFreq
[
i
]
!=
targetStateBlock
->
streamFreq
[
i
]
||
This
->
streamFlags
[
i
]
!=
targetStateBlock
->
streamFlags
[
i
])
{
TRACE
(
"Updating stream frequency %u to %u flags to %#x
\n
"
,
i
,
targetStateBlock
->
streamFreq
[
i
],
targetStateBlock
->
streamFlags
[
i
]);
This
->
streamFreq
[
i
]
=
targetStateBlock
->
streamFreq
[
i
];
This
->
streamFlags
[
i
]
=
targetStateBlock
->
streamFlags
[
i
];
}
}
...
...
@@ -714,6 +725,7 @@ should really perform a delta so that only the changes get updated*/
UINT
i
;
UINT
j
;
WORD
map
;
TRACE
(
"(%p) : Applying state block %p ------------------v
\n
"
,
This
,
pDevice
);
...
...
@@ -806,12 +818,16 @@ should really perform a delta so that only the changes get updated*/
}
/* TODO: Proper implementation using SetStreamSource offset (set to 0 for the moment)\n") */
for
(
i
=
0
;
i
<
MAX_STREAMS
;
i
++
)
{
if
(
This
->
changed
.
streamSource
[
i
])
IWineD3DDevice_SetStreamSource
(
pDevice
,
i
,
This
->
streamSource
[
i
],
0
,
This
->
streamStride
[
i
]);
map
=
This
->
changed
.
streamSource
;
for
(
i
=
0
;
map
;
map
>>=
1
,
++
i
)
{
if
(
map
&
1
)
IWineD3DDevice_SetStreamSource
(
pDevice
,
i
,
This
->
streamSource
[
i
],
0
,
This
->
streamStride
[
i
]);
}
if
(
This
->
changed
.
streamFreq
[
i
])
IWineD3DDevice_SetStreamSourceFreq
(
pDevice
,
i
,
This
->
streamFreq
[
i
]
|
This
->
streamFlags
[
i
]);
map
=
This
->
changed
.
streamFreq
;
for
(
i
=
0
;
map
;
map
>>=
1
,
++
i
)
{
if
(
map
&
1
)
IWineD3DDevice_SetStreamSourceFreq
(
pDevice
,
i
,
This
->
streamFreq
[
i
]
|
This
->
streamFlags
[
i
]);
}
for
(
j
=
0
;
j
<
MAX_COMBINED_SAMPLERS
;
j
++
){
if
(
This
->
changed
.
textures
[
j
])
{
...
...
dlls/wined3d/wined3d_private.h
View file @
52a900d4
...
...
@@ -1758,8 +1758,8 @@ extern const IWineD3DVertexDeclarationVtbl IWineD3DVertexDeclaration_Vtbl;
/* Note: Very long winded but gl Lists are not flexible enough */
/* to resolve everything we need, so doing it manually for now */
typedef
struct
SAVEDSTATES
{
BOOL
streamSource
[
MAX_STREAMS
];
BOOL
streamFreq
[
MAX_STREAMS
];
WORD
streamSource
;
/* MAX_STREAMS, 16 */
WORD
streamFreq
;
/* MAX_STREAMS, 16 */
BOOL
textures
[
MAX_COMBINED_SAMPLERS
];
BOOL
transform
[
HIGHEST_TRANSFORMSTATE
+
1
];
BOOL
renderState
[
WINEHIGHEST_RENDER_STATE
+
1
];
...
...
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