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
153d8d43
Commit
153d8d43
authored
Sep 20, 2010
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 21, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Move stream state to wined3d_state.
parent
d9116227
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
76 additions
and
73 deletions
+76
-73
buffer.c
dlls/wined3d/buffer.c
+1
-1
device.c
dlls/wined3d/device.c
+29
-27
drawprim.c
dlls/wined3d/drawprim.c
+15
-14
state.c
dlls/wined3d/state.c
+8
-8
stateblock.c
dlls/wined3d/stateblock.c
+21
-19
wined3d_private.h
dlls/wined3d/wined3d_private.h
+2
-4
No files found.
dlls/wined3d/buffer.c
View file @
153d8d43
...
...
@@ -231,7 +231,7 @@ static BOOL buffer_process_converted_attribute(struct wined3d_buffer *This,
const
enum
wined3d_buffer_conversion_type
conversion_type
,
const
struct
wined3d_stream_info_element
*
attrib
,
DWORD
*
stride_this_run
)
{
DWORD
offset
=
This
->
resource
.
device
->
stateBlock
->
streams
[
attrib
->
stream_idx
].
offset
;
DWORD
offset
=
This
->
resource
.
device
->
stateBlock
->
st
ate
.
st
reams
[
attrib
->
stream_idx
].
offset
;
DWORD
attrib_size
;
BOOL
ret
=
FALSE
;
unsigned
int
i
;
...
...
dlls/wined3d/device.c
View file @
153d8d43
...
...
@@ -191,7 +191,7 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
for
(
i
=
0
;
i
<
declaration
->
element_count
;
++
i
)
{
const
struct
wined3d_vertex_declaration_element
*
element
=
&
declaration
->
elements
[
i
];
struct
wined3d_buffer
*
buffer
=
This
->
stateBlock
->
streams
[
element
->
input_slot
].
buffer
;
struct
wined3d_buffer
*
buffer
=
This
->
stateBlock
->
st
ate
.
st
reams
[
element
->
input_slot
].
buffer
;
GLuint
buffer_object
=
0
;
const
BYTE
*
data
=
NULL
;
BOOL
stride_used
;
...
...
@@ -203,8 +203,8 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
if
(
!
buffer
)
continue
;
stride
=
This
->
stateBlock
->
streams
[
element
->
input_slot
].
stride
;
if
(
This
->
stateBlock
->
st
reamIsUP
)
stride
=
This
->
stateBlock
->
st
ate
.
st
reams
[
element
->
input_slot
].
stride
;
if
(
This
->
stateBlock
->
st
ate
.
user_stream
)
{
TRACE
(
"Stream %u is UP, %p
\n
"
,
element
->
input_slot
,
buffer
);
buffer_object
=
0
;
...
...
@@ -306,7 +306,7 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
}
This
->
num_buffer_queries
=
0
;
if
(
!
This
->
stateBlock
->
st
reamIsUP
)
if
(
!
This
->
stateBlock
->
st
ate
.
user_stream
)
{
WORD
map
=
stream_info
->
use_map
;
...
...
@@ -319,7 +319,7 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
if
(
!
(
map
&
1
))
continue
;
element
=
&
stream_info
->
elements
[
i
];
buffer
=
This
->
stateBlock
->
streams
[
element
->
stream_idx
].
buffer
;
buffer
=
This
->
stateBlock
->
st
ate
.
st
reams
[
element
->
stream_idx
].
buffer
;
IWineD3DBuffer_PreLoad
((
IWineD3DBuffer
*
)
buffer
);
/* If PreLoad dropped the buffer object, update the stream info. */
...
...
@@ -2278,7 +2278,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetStreamSource(IWineD3DDevice *iface,
return
WINED3DERR_INVALIDCALL
;
}
stream
=
&
This
->
updateStateBlock
->
streams
[
StreamNumber
];
stream
=
&
This
->
updateStateBlock
->
st
ate
.
st
reams
[
StreamNumber
];
oldSrc
=
(
IWineD3DBuffer
*
)
stream
->
buffer
;
This
->
updateStateBlock
->
changed
.
streamSource
|=
1
<<
StreamNumber
;
...
...
@@ -2337,7 +2337,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetStreamSource(IWineD3DDevice *iface,
return
WINED3DERR_INVALIDCALL
;
}
stream
=
&
This
->
stateBlock
->
streams
[
StreamNumber
];
stream
=
&
This
->
stateBlock
->
st
ate
.
st
reams
[
StreamNumber
];
*
pStream
=
(
IWineD3DBuffer
*
)
stream
->
buffer
;
*
pStride
=
stream
->
stride
;
if
(
pOffset
)
*
pOffset
=
stream
->
offset
;
...
...
@@ -2371,7 +2371,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetStreamSourceFreq(IWineD3DDevice *ifa
return
WINED3DERR_INVALIDCALL
;
}
stream
=
&
This
->
updateStateBlock
->
streams
[
StreamNumber
];
stream
=
&
This
->
updateStateBlock
->
st
ate
.
st
reams
[
StreamNumber
];
oldFlags
=
stream
->
flags
;
oldFreq
=
stream
->
frequency
;
...
...
@@ -2392,7 +2392,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetStreamSourceFreq(IWineD3DDevice *ifa
TRACE
(
"iface %p, stream_idx %u, divider %p.
\n
"
,
iface
,
StreamNumber
,
Divider
);
stream
=
&
This
->
updateStateBlock
->
streams
[
StreamNumber
];
stream
=
&
This
->
updateStateBlock
->
st
ate
.
st
reams
[
StreamNumber
];
*
Divider
=
stream
->
flags
|
stream
->
frequency
;
TRACE
(
"Returning %#x.
\n
"
,
*
Divider
);
...
...
@@ -4140,7 +4140,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface,
struct
wined3d_stream_info
stream_info
;
const
struct
wined3d_gl_info
*
gl_info
;
struct
wined3d_context
*
context
;
BOOL
vbo
=
FALSE
,
streamWasUP
=
This
->
stateBlock
->
st
reamIsUP
;
BOOL
vbo
=
FALSE
,
streamWasUP
=
This
->
stateBlock
->
st
ate
.
user_stream
;
HRESULT
hr
;
TRACE
(
"(%p)->(%d,%d,%d,%p,%p,%d
\n
"
,
This
,
SrcStartIndex
,
DestIndex
,
VertexCount
,
pDestBuffer
,
pVertexDecl
,
Flags
);
...
...
@@ -4156,9 +4156,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface,
/* ProcessVertices reads from vertex buffers, which have to be assigned. DrawPrimitive and DrawPrimitiveUP
* control the streamIsUP flag, thus restore it afterwards.
*/
This
->
stateBlock
->
st
reamIsUP
=
FALSE
;
This
->
stateBlock
->
st
ate
.
user_stream
=
FALSE
;
device_stream_info_from_declaration
(
This
,
FALSE
,
&
stream_info
,
&
vbo
);
This
->
stateBlock
->
st
reamIsUP
=
streamWasUP
;
This
->
stateBlock
->
st
ate
.
user_stream
=
streamWasUP
;
if
(
vbo
||
SrcStartIndex
)
{
unsigned
int
i
;
...
...
@@ -4176,7 +4176,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface,
e
=
&
stream_info
.
elements
[
i
];
if
(
e
->
buffer_object
)
{
struct
wined3d_buffer
*
vb
=
This
->
stateBlock
->
streams
[
e
->
stream_idx
].
buffer
;
struct
wined3d_buffer
*
vb
=
This
->
stateBlock
->
st
ate
.
st
reams
[
e
->
stream_idx
].
buffer
;
e
->
buffer_object
=
0
;
e
->
data
=
(
BYTE
*
)((
ULONG_PTR
)
e
->
data
+
(
ULONG_PTR
)
buffer_get_sysmem
(
vb
,
gl_info
));
ENTER_GL
();
...
...
@@ -4681,9 +4681,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitive(IWineD3DDevice *iface, UI
}
/* The index buffer is not needed here, but restore it, otherwise it is hell to keep track of */
if
(
This
->
stateBlock
->
streamIsUP
)
{
if
(
This
->
stateBlock
->
state
.
user_stream
)
{
IWineD3DDeviceImpl_MarkStateDirty
(
This
,
STATE_INDEXBUFFER
);
This
->
stateBlock
->
st
reamIsUP
=
FALSE
;
This
->
stateBlock
->
st
ate
.
user_stream
=
FALSE
;
}
if
(
This
->
stateBlock
->
loadBaseVertexIndex
)
...
...
@@ -4719,9 +4720,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *if
return
WINED3DERR_INVALIDCALL
;
}
if
(
This
->
stateBlock
->
streamIsUP
)
{
if
(
This
->
stateBlock
->
state
.
user_stream
)
{
IWineD3DDeviceImpl_MarkStateDirty
(
This
,
STATE_INDEXBUFFER
);
This
->
stateBlock
->
st
reamIsUP
=
FALSE
;
This
->
stateBlock
->
st
ate
.
user_stream
=
FALSE
;
}
vbo
=
((
struct
wined3d_buffer
*
)
pIB
)
->
buffer_object
;
...
...
@@ -4761,13 +4763,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveUP(IWineD3DDevice *iface,
}
/* Note in the following, it's not this type, but that's the purpose of streamIsUP */
stream
=
&
This
->
stateBlock
->
streams
[
0
];
stream
=
&
This
->
stateBlock
->
st
ate
.
st
reams
[
0
];
vb
=
(
IWineD3DBuffer
*
)
stream
->
buffer
;
stream
->
buffer
=
(
struct
wined3d_buffer
*
)
pVertexStreamZeroData
;
if
(
vb
)
IWineD3DBuffer_Release
(
vb
);
stream
->
offset
=
0
;
stream
->
stride
=
VertexStreamZeroStride
;
This
->
stateBlock
->
st
reamIsUP
=
TRUE
;
This
->
stateBlock
->
st
ate
.
user_stream
=
TRUE
;
This
->
stateBlock
->
loadBaseVertexIndex
=
0
;
/* TODO: Only mark dirty if drawing from a different UP address */
...
...
@@ -4810,14 +4812,13 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *
idxStride
=
4
;
}
/* Note in the following, it's not this type, but that's the purpose of streamIsUP */
stream
=
&
This
->
stateBlock
->
streams
[
0
];
stream
=
&
This
->
stateBlock
->
state
.
streams
[
0
];
vb
=
(
IWineD3DBuffer
*
)
stream
->
buffer
;
stream
->
buffer
=
(
struct
wined3d_buffer
*
)
pVertexStreamZeroData
;
if
(
vb
)
IWineD3DBuffer_Release
(
vb
);
stream
->
offset
=
0
;
stream
->
stride
=
VertexStreamZeroStride
;
This
->
stateBlock
->
st
reamIsUP
=
TRUE
;
This
->
stateBlock
->
st
ate
.
user_stream
=
TRUE
;
/* Set to 0 as per msdn. Do it now due to the stream source loading during drawPrimitive */
This
->
stateBlock
->
baseVertexIndex
=
0
;
...
...
@@ -4874,7 +4875,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveStrided(IWineD3DDev
*/
IWineD3DDeviceImpl_MarkStateDirty
(
This
,
STATE_VDECL
);
IWineD3DDeviceImpl_MarkStateDirty
(
This
,
STATE_INDEXBUFFER
);
This
->
stateBlock
->
st
reamIsUP
=
TRUE
;
This
->
stateBlock
->
st
ate
.
user_stream
=
TRUE
;
This
->
stateBlock
->
baseVertexIndex
=
0
;
This
->
up_strided
=
DrawPrimStrideData
;
drawPrimitive
(
iface
,
vertex_count
,
0
/* start_idx */
,
idxSize
,
pIndexData
);
...
...
@@ -6621,19 +6622,20 @@ void device_resource_released(IWineD3DDeviceImpl *device, IWineD3DResource *reso
case
WINED3DRTYPE_BUFFER
:
for
(
i
=
0
;
i
<
MAX_STREAMS
;
++
i
)
{
if
(
device
->
stateBlock
&&
device
->
stateBlock
->
streams
[
i
].
buffer
==
(
struct
wined3d_buffer
*
)
resource
)
if
(
device
->
stateBlock
&&
device
->
stateBlock
->
state
.
streams
[
i
].
buffer
==
(
struct
wined3d_buffer
*
)
resource
)
{
ERR
(
"Buffer %p is still in use by stateblock %p, stream %u.
\n
"
,
resource
,
device
->
stateBlock
,
i
);
device
->
stateBlock
->
streams
[
i
].
buffer
=
NULL
;
device
->
stateBlock
->
st
ate
.
st
reams
[
i
].
buffer
=
NULL
;
}
if
(
device
->
updateStateBlock
!=
device
->
stateBlock
&&
device
->
updateStateBlock
->
streams
[
i
].
buffer
==
(
struct
wined3d_buffer
*
)
resource
)
&&
device
->
updateStateBlock
->
st
ate
.
st
reams
[
i
].
buffer
==
(
struct
wined3d_buffer
*
)
resource
)
{
ERR
(
"Buffer %p is still in use by stateblock %p, stream %u.
\n
"
,
resource
,
device
->
updateStateBlock
,
i
);
device
->
updateStateBlock
->
streams
[
i
].
buffer
=
NULL
;
device
->
updateStateBlock
->
st
ate
.
st
reams
[
i
].
buffer
=
NULL
;
}
}
...
...
dlls/wined3d/drawprim.c
View file @
153d8d43
...
...
@@ -69,7 +69,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, const struct wined3d_context
const
DWORD
*
pIdxBufL
=
NULL
;
UINT
vx_index
;
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
const
struct
wined3d_stream_state
*
streams
=
This
->
stateBlock
->
streams
;
const
struct
wined3d_stream_state
*
streams
=
This
->
stateBlock
->
st
ate
.
st
reams
;
LONG
SkipnStrides
=
startIdx
+
This
->
stateBlock
->
loadBaseVertexIndex
;
BOOL
pixelShader
=
use_ps
(
This
->
stateBlock
);
BOOL
specular_fog
=
FALSE
;
...
...
@@ -464,9 +464,9 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const struct wined3d_stream
{
if
(
!
(
si
->
use_map
&
(
1
<<
i
)))
continue
;
ptr
=
si
->
elements
[
i
].
data
+
si
->
elements
[
i
].
stride
*
SkipnStrides
+
stateblock
->
streams
[
si
->
elements
[
i
].
stream_idx
].
offset
;
ptr
=
si
->
elements
[
i
].
data
+
si
->
elements
[
i
].
stride
*
SkipnStrides
+
stateblock
->
state
.
streams
[
si
->
elements
[
i
].
stream_idx
].
offset
;
send_attribute
(
This
,
si
->
elements
[
i
].
format
->
id
,
i
,
ptr
);
}
...
...
@@ -505,13 +505,14 @@ static inline void drawStridedInstanced(IWineD3DDevice *iface, const struct wine
for
(
i
=
0
;
i
<
MAX_STREAMS
;
++
i
)
{
/* Look at the streams and take the first one which matches */
if
(
stateblock
->
streams
[
i
].
buffer
&&
((
stateblock
->
streams
[
i
].
flags
&
WINED3DSTREAMSOURCE_INSTANCEDATA
)
||
(
stateblock
->
streams
[
i
].
flags
&
WINED3DSTREAMSOURCE_INDEXEDDATA
)))
if
(
stateblock
->
state
.
streams
[
i
].
buffer
&&
((
stateblock
->
state
.
streams
[
i
].
flags
&
WINED3DSTREAMSOURCE_INSTANCEDATA
)
||
(
stateblock
->
state
.
streams
[
i
].
flags
&
WINED3DSTREAMSOURCE_INDEXEDDATA
)))
{
/* Use the specified number of instances from the first matched
* stream. A streamFreq of 0 (with INSTANCEDATA or INDEXEDDATA)
* is handled as 1. See d3d9/tests/visual.c-> stream_test(). */
numInstances
=
stateblock
->
st
reams
[
i
].
frequency
?
stateblock
->
streams
[
i
].
frequency
:
1
;
numInstances
=
stateblock
->
st
ate
.
streams
[
i
].
frequency
?
stateblock
->
state
.
streams
[
i
].
frequency
:
1
;
break
;
}
}
...
...
@@ -520,7 +521,7 @@ static inline void drawStridedInstanced(IWineD3DDevice *iface, const struct wine
{
if
(
!
(
si
->
use_map
&
(
1
<<
i
)))
continue
;
if
(
stateblock
->
streams
[
si
->
elements
[
i
].
stream_idx
].
flags
&
WINED3DSTREAMSOURCE_INSTANCEDATA
)
if
(
stateblock
->
st
ate
.
st
reams
[
si
->
elements
[
i
].
stream_idx
].
flags
&
WINED3DSTREAMSOURCE_INSTANCEDATA
)
{
instancedData
[
numInstancedAttribs
]
=
i
;
numInstancedAttribs
++
;
...
...
@@ -531,12 +532,12 @@ static inline void drawStridedInstanced(IWineD3DDevice *iface, const struct wine
for
(
i
=
0
;
i
<
numInstances
;
i
++
)
{
/* Specify the instanced attributes using immediate mode calls */
for
(
j
=
0
;
j
<
numInstancedAttribs
;
j
++
)
{
const
BYTE
*
ptr
=
si
->
elements
[
instancedData
[
j
]].
data
+
si
->
elements
[
instancedData
[
j
]].
stride
*
i
+
stateblock
->
streams
[
si
->
elements
[
instancedData
[
j
]].
stream_idx
].
offset
;
const
BYTE
*
ptr
=
si
->
elements
[
instancedData
[
j
]].
data
+
si
->
elements
[
instancedData
[
j
]].
stride
*
i
+
stateblock
->
state
.
streams
[
si
->
elements
[
instancedData
[
j
]].
stream_idx
].
offset
;
if
(
si
->
elements
[
instancedData
[
j
]].
buffer_object
)
{
struct
wined3d_buffer
*
vb
=
stateblock
->
streams
[
si
->
elements
[
instancedData
[
j
]].
stream_idx
].
buffer
;
struct
wined3d_buffer
*
vb
=
stateblock
->
st
ate
.
st
reams
[
si
->
elements
[
instancedData
[
j
]].
stream_idx
].
buffer
;
ptr
+=
(
ULONG_PTR
)
buffer_get_sysmem
(
vb
,
&
This
->
adapter
->
gl_info
);
}
...
...
@@ -563,7 +564,7 @@ static inline void remove_vbos(IWineD3DDeviceImpl *This, const struct wined3d_gl
e
=
&
s
->
elements
[
i
];
if
(
e
->
buffer_object
)
{
struct
wined3d_buffer
*
vb
=
This
->
stateBlock
->
streams
[
e
->
stream_idx
].
buffer
;
struct
wined3d_buffer
*
vb
=
This
->
stateBlock
->
st
ate
.
st
reams
[
e
->
stream_idx
].
buffer
;
e
->
buffer_object
=
0
;
e
->
data
=
(
BYTE
*
)((
ULONG_PTR
)
e
->
data
+
(
ULONG_PTR
)
buffer_get_sysmem
(
vb
,
gl_info
));
}
...
...
@@ -800,7 +801,7 @@ HRESULT tesselate_rectpatch(IWineD3DDeviceImpl *This,
e
=
&
stream_info
.
elements
[
WINED3D_FFP_POSITION
];
if
(
e
->
buffer_object
)
{
struct
wined3d_buffer
*
vb
=
This
->
stateBlock
->
streams
[
e
->
stream_idx
].
buffer
;
struct
wined3d_buffer
*
vb
=
This
->
stateBlock
->
st
ate
.
st
reams
[
e
->
stream_idx
].
buffer
;
e
->
data
=
(
BYTE
*
)((
ULONG_PTR
)
e
->
data
+
(
ULONG_PTR
)
buffer_get_sysmem
(
vb
,
context
->
gl_info
));
}
vtxStride
=
e
->
stride
;
...
...
dlls/wined3d/state.c
View file @
153d8d43
...
...
@@ -3333,7 +3333,7 @@ static void loadTexCoords(const struct wined3d_gl_info *gl_info, IWineD3DStateBl
if
(
coordIdx
<
MAX_TEXTURES
&&
(
si
->
use_map
&
(
1
<<
(
WINED3D_FFP_TEXCOORD0
+
coordIdx
))))
{
const
struct
wined3d_stream_info_element
*
e
=
&
si
->
elements
[
WINED3D_FFP_TEXCOORD0
+
coordIdx
];
const
struct
wined3d_stream_state
*
stream
=
&
stateblock
->
streams
[
e
->
stream_idx
];
const
struct
wined3d_stream_state
*
stream
=
&
stateblock
->
st
ate
.
st
reams
[
e
->
stream_idx
];
TRACE
(
"Setting up texture %u, idx %d, cordindx %u, data %p
\n
"
,
textureNo
,
mapped_stage
,
coordIdx
,
e
->
data
);
...
...
@@ -4148,7 +4148,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
continue
;
}
stream
=
&
stateblock
->
streams
[
stream_info
->
elements
[
i
].
stream_idx
];
stream
=
&
stateblock
->
st
ate
.
st
reams
[
stream_info
->
elements
[
i
].
stream_idx
];
/* Do not load instance data. It will be specified using glTexCoord by drawprim */
if
(
stream
->
flags
&
WINED3DSTREAMSOURCE_INSTANCEDATA
)
...
...
@@ -4327,7 +4327,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
||
si
->
use_map
&
(
1
<<
WINED3D_FFP_BLENDINDICES
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_BLENDWEIGHT
];
stream
=
&
stateblock
->
streams
[
e
->
stream_idx
];
stream
=
&
stateblock
->
st
ate
.
st
reams
[
e
->
stream_idx
];
if
(
gl_info
->
supported
[
ARB_VERTEX_BLEND
])
{
...
...
@@ -4394,7 +4394,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
if
(
si
->
use_map
&
(
1
<<
WINED3D_FFP_POSITION
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_POSITION
];
stream
=
&
stateblock
->
streams
[
e
->
stream_idx
];
stream
=
&
stateblock
->
st
ate
.
st
reams
[
e
->
stream_idx
];
if
(
curVBO
!=
e
->
buffer_object
)
{
...
...
@@ -4435,7 +4435,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
if
(
si
->
use_map
&
(
1
<<
WINED3D_FFP_NORMAL
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_NORMAL
];
stream
=
&
stateblock
->
streams
[
e
->
stream_idx
];
stream
=
&
stateblock
->
st
ate
.
st
reams
[
e
->
stream_idx
];
if
(
curVBO
!=
e
->
buffer_object
)
{
...
...
@@ -4469,7 +4469,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
if
(
si
->
use_map
&
(
1
<<
WINED3D_FFP_DIFFUSE
))
{
e
=
&
si
->
elements
[
WINED3D_FFP_DIFFUSE
];
stream
=
&
stateblock
->
streams
[
e
->
stream_idx
];
stream
=
&
stateblock
->
st
ate
.
st
reams
[
e
->
stream_idx
];
if
(
curVBO
!=
e
->
buffer_object
)
{
...
...
@@ -4498,7 +4498,7 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
TRACE
(
"setting specular colour
\n
"
);
e
=
&
si
->
elements
[
WINED3D_FFP_SPECULAR
];
stream
=
&
stateblock
->
streams
[
e
->
stream_idx
];
stream
=
&
stateblock
->
st
ate
.
st
reams
[
e
->
stream_idx
];
if
(
gl_info
->
supported
[
EXT_SECONDARY_COLOR
])
{
...
...
@@ -4950,7 +4950,7 @@ static void indexbuffer(DWORD state, IWineD3DStateBlockImpl *stateblock, struct
{
const
struct
wined3d_gl_info
*
gl_info
=
context
->
gl_info
;
if
(
stateblock
->
st
reamIsUP
||
!
stateblock
->
pIndexData
)
if
(
stateblock
->
st
ate
.
user_stream
||
!
stateblock
->
pIndexData
)
{
GL_EXTCALL
(
glBindBufferARB
(
GL_ELEMENT_ARRAY_BUFFER_ARB
,
0
));
}
else
{
...
...
dlls/wined3d/stateblock.c
View file @
153d8d43
...
...
@@ -503,7 +503,7 @@ static ULONG WINAPI IWineD3DStateBlockImpl_Release(IWineD3DStateBlock *iface) {
for
(
counter
=
0
;
counter
<
MAX_STREAMS
;
++
counter
)
{
struct
wined3d_buffer
*
buffer
=
This
->
streams
[
counter
].
buffer
;
struct
wined3d_buffer
*
buffer
=
This
->
st
ate
.
st
reams
[
counter
].
buffer
;
if
(
buffer
)
{
if
(
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
buffer
))
...
...
@@ -777,18 +777,19 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
if
(
!
(
map
&
1
))
continue
;
if
(
This
->
st
reams
[
i
].
stride
!=
targetStateBlock
->
streams
[
i
].
stride
||
This
->
st
reams
[
i
].
buffer
!=
targetStateBlock
->
streams
[
i
].
buffer
)
if
(
This
->
st
ate
.
streams
[
i
].
stride
!=
targetStateBlock
->
state
.
streams
[
i
].
stride
||
This
->
st
ate
.
streams
[
i
].
buffer
!=
targetStateBlock
->
state
.
streams
[
i
].
buffer
)
{
TRACE
(
"Updating stream source %u to %p, stride to %u.
\n
"
,
i
,
targetStateBlock
->
streams
[
i
].
buffer
,
targetStateBlock
->
streams
[
i
].
stride
);
This
->
streams
[
i
].
stride
=
targetStateBlock
->
streams
[
i
].
stride
;
if
(
targetStateBlock
->
streams
[
i
].
buffer
)
IWineD3DBuffer_AddRef
((
IWineD3DBuffer
*
)
targetStateBlock
->
streams
[
i
].
buffer
);
if
(
This
->
streams
[
i
].
buffer
)
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
This
->
streams
[
i
].
buffer
);
This
->
streams
[
i
].
buffer
=
targetStateBlock
->
streams
[
i
].
buffer
;
i
,
targetStateBlock
->
state
.
streams
[
i
].
buffer
,
targetStateBlock
->
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
);
if
(
This
->
state
.
streams
[
i
].
buffer
)
IWineD3DBuffer_Release
((
IWineD3DBuffer
*
)
This
->
state
.
streams
[
i
].
buffer
);
This
->
state
.
streams
[
i
].
buffer
=
targetStateBlock
->
state
.
streams
[
i
].
buffer
;
}
}
...
...
@@ -797,14 +798,14 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Capture(IWineD3DStateBlock *iface)
{
if
(
!
(
map
&
1
))
continue
;
if
(
This
->
st
reams
[
i
].
frequency
!=
targetStateBlock
->
streams
[
i
].
frequency
||
This
->
st
reams
[
i
].
flags
!=
targetStateBlock
->
streams
[
i
].
flags
)
if
(
This
->
st
ate
.
streams
[
i
].
frequency
!=
targetStateBlock
->
state
.
streams
[
i
].
frequency
||
This
->
st
ate
.
streams
[
i
].
flags
!=
targetStateBlock
->
state
.
streams
[
i
].
flags
)
{
TRACE
(
"Updating stream frequency %u to %u flags to %#x.
\n
"
,
i
,
targetStateBlock
->
st
reams
[
i
].
frequency
,
targetStateBlock
->
streams
[
i
].
flags
);
i
,
targetStateBlock
->
st
ate
.
streams
[
i
].
frequency
,
targetStateBlock
->
state
.
streams
[
i
].
flags
);
This
->
st
reams
[
i
].
frequency
=
targetStateBlock
->
streams
[
i
].
frequency
;
This
->
st
reams
[
i
].
flags
=
targetStateBlock
->
streams
[
i
].
flags
;
This
->
st
ate
.
streams
[
i
].
frequency
=
targetStateBlock
->
state
.
streams
[
i
].
frequency
;
This
->
st
ate
.
streams
[
i
].
flags
=
targetStateBlock
->
state
.
streams
[
i
].
flags
;
}
}
...
...
@@ -1026,15 +1027,16 @@ static HRESULT WINAPI IWineD3DStateBlockImpl_Apply(IWineD3DStateBlock *iface)
{
if
(
map
&
1
)
IWineD3DDevice_SetStreamSource
(
device
,
i
,
(
IWineD3DBuffer
*
)
This
->
streams
[
i
].
buffer
,
0
,
This
->
streams
[
i
].
stride
);
(
IWineD3DBuffer
*
)
This
->
st
ate
.
st
reams
[
i
].
buffer
,
0
,
This
->
st
ate
.
st
reams
[
i
].
stride
);
}
map
=
This
->
changed
.
streamFreq
;
for
(
i
=
0
;
map
;
map
>>=
1
,
++
i
)
{
if
(
map
&
1
)
IWineD3DDevice_SetStreamSourceFreq
(
device
,
i
,
This
->
streams
[
i
].
frequency
|
This
->
streams
[
i
].
flags
);
IWineD3DDevice_SetStreamSourceFreq
(
device
,
i
,
This
->
state
.
streams
[
i
].
frequency
|
This
->
state
.
streams
[
i
].
flags
);
}
map
=
This
->
changed
.
textures
;
...
...
dlls/wined3d/wined3d_private.h
View file @
153d8d43
...
...
@@ -2350,6 +2350,8 @@ struct wined3d_stream_state
struct
wined3d_state
{
IWineD3DVertexDeclarationImpl
*
vertex_declaration
;
struct
wined3d_stream_state
streams
[
MAX_STREAMS
+
1
/* tesselated pseudo-stream */
];
BOOL
user_stream
;
struct
IWineD3DVertexShaderImpl
*
vertex_shader
;
BOOL
vs_consts_b
[
MAX_CONST_B
];
...
...
@@ -2391,10 +2393,6 @@ struct IWineD3DStateBlockImpl
/* primitive type */
GLenum
gl_primitive_type
;
/* Stream Source */
BOOL
streamIsUP
;
struct
wined3d_stream_state
streams
[
MAX_STREAMS
+
1
/* tesselated pseudo-stream */
];
/* Indices */
IWineD3DBuffer
*
pIndexData
;
enum
wined3d_format_id
IndexFmt
;
...
...
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