[PATCH] wined3d: improve drawStridedInstanced()
Rico Schüller
kgbricola at web.de
Sun Apr 6 11:50:52 CDT 2008
---
dlls/wined3d/drawprim.c | 17 ++++++++---------
1 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index fc09b75..9bb8132 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -838,15 +838,15 @@ static inline void drawStridedInstanced(IWineD3DDevice *iface, WineDirect3DVerte
/* First, figure out how many instances we have to draw */
for(i = 0; i < MAX_STREAMS; i++) {
- /* Look at all non-instanced streams */
- if(!(stateblock->streamFlags[i] & WINED3DSTREAMSOURCE_INSTANCEDATA) &&
- stateblock->streamSource[i]) {
- int inst = stateblock->streamFreq[i];
-
- if(numInstances && inst != numInstances) {
- ERR("Two streams specify a different number of instances. Got %d, new is %d\n", numInstances, inst);
- }
- numInstances = inst;
+ /* Look at the streams and take the first one which matches */
+ if(((stateblock->streamFlags[i] & WINED3DSTREAMSOURCE_INSTANCEDATA) || (stateblock->streamFlags[i] & WINED3DSTREAMSOURCE_INDEXEDDATA)) && stateblock->streamSource[i]) {
+ /* D3d9 could set StreamFreq 0 with (INSTANCEDATA or INDEXEDDATA) and then it is handled as 1. See d3d9/tests/visual.c-> stream_test() */
+ if(stateblock->streamFreq[i] == 0){
+ numInstances = 1;
+ } else {
+ numInstances = stateblock->streamFreq[i]; /* use the specified number of instances from the first matched stream. See d3d9/tests/visual.c-> stream_test() */
+ }
+ break; /* break, bacause only the first suitable value is interesting */
}
}
--
1.5.3.3
--------------030505070003050808010904--
More information about the wine-patches
mailing list