[PATCH 3/5] wined3d: Pass an IWineD3DDeviceImpl pointer to drawStridedSlow().
Henri Verbeet
hverbeet at codeweavers.com
Mon Nov 29 16:08:38 CST 2010
---
dlls/wined3d/device.c | 12 ++++----
dlls/wined3d/drawprim.c | 59 ++++++++++++++++++---------------------
dlls/wined3d/wined3d_private.h | 2 +-
3 files changed, 34 insertions(+), 39 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index b743f9f..5e8c8cc 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4797,7 +4797,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitive(IWineD3DDevice *iface, UI
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC);
}
/* Account for the loading offset due to index buffers. Instead of reloading all sources correct it with the startvertex parameter */
- drawPrimitive(iface, vertex_count, StartVertex /* start_idx */, 0 /* indxSize */, NULL /* indxData */);
+ drawPrimitive(This, vertex_count, StartVertex /* start_idx */, 0 /* indxSize */, NULL /* indxData */);
return WINED3D_OK;
}
@@ -4845,7 +4845,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *if
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC);
}
- drawPrimitive(iface, index_count, startIndex, idxStride,
+ drawPrimitive(This, index_count, startIndex, idxStride,
vbo ? NULL : index_buffer->resource.allocatedMemory);
return WINED3D_OK;
@@ -4880,7 +4880,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveUP(IWineD3DDevice *iface,
/* TODO: Only mark dirty if drawing from a different UP address */
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_STREAMSRC);
- drawPrimitive(iface, vertex_count, 0 /* start_idx */, 0 /* indxSize*/, NULL /* indxData */);
+ drawPrimitive(This, vertex_count, 0 /* start_idx */, 0 /* indxSize*/, NULL /* indxData */);
/* MSDN specifies stream zero settings must be set to NULL */
stream->buffer = NULL;
@@ -4932,7 +4932,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_VDECL);
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER);
- drawPrimitive(iface, index_count, 0 /* start_idx */, idxStride, pIndexData);
+ drawPrimitive(This, index_count, 0 /* start_idx */, idxStride, pIndexData);
/* MSDN specifies stream zero settings and index buffer must be set to NULL */
stream->buffer = NULL;
@@ -4963,7 +4963,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveStrided(IWineD3DDevice *if
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_INDEXBUFFER);
This->stateBlock->state.base_vertex_index = 0;
This->up_strided = DrawPrimStrideData;
- drawPrimitive(iface, vertex_count, 0, 0, NULL);
+ drawPrimitive(This, vertex_count, 0, 0, NULL);
This->up_strided = NULL;
return WINED3D_OK;
}
@@ -4984,7 +4984,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveStrided(IWineD3DDev
This->stateBlock->state.user_stream = TRUE;
This->stateBlock->state.base_vertex_index = 0;
This->up_strided = DrawPrimStrideData;
- drawPrimitive(iface, vertex_count, 0 /* start_idx */, idxSize, pIndexData);
+ drawPrimitive(This, vertex_count, 0 /* start_idx */, idxSize, pIndexData);
This->up_strided = NULL;
return WINED3D_OK;
}
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 2f5a7c1..a3b0053 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -558,11 +558,9 @@ static void remove_vbos(const struct wined3d_gl_info *gl_info,
}
/* Routine common to the draw primitive and draw indexed primitive routines */
-void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT idxSize, const void *idxData)
+void drawPrimitive(IWineD3DDeviceImpl *device, UINT index_count, UINT StartIdx, UINT idxSize, const void *idxData)
{
-
- IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
- const struct wined3d_state *state = &This->stateBlock->state;
+ const struct wined3d_state *state = &device->stateBlock->state;
struct wined3d_context *context;
unsigned int i;
@@ -571,9 +569,9 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
if (state->render_states[WINED3DRS_COLORWRITEENABLE])
{
/* Invalidate the back buffer memory so LockRect will read it the next time */
- for (i = 0; i < This->adapter->gl_info.limits.buffers; ++i)
+ for (i = 0; i < device->adapter->gl_info.limits.buffers; ++i)
{
- IWineD3DSurfaceImpl *target = This->render_targets[i];
+ IWineD3DSurfaceImpl *target = device->render_targets[i];
if (target)
{
surface_load_location(target, SFLAG_INDRAWABLE, NULL);
@@ -583,9 +581,9 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
}
/* Signals other modules that a drawing is in progress and the stateblock finalized */
- This->isInDraw = TRUE;
+ device->isInDraw = TRUE;
- context = context_acquire(This, This->render_targets[0]);
+ context = context_acquire(device, device->render_targets[0]);
if (!context->valid)
{
context_release(context);
@@ -593,42 +591,39 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
return;
}
- context_apply_draw_state(context, This);
+ context_apply_draw_state(context, device);
- if (This->depth_stencil)
+ if (device->depth_stencil)
{
/* Note that this depends on the context_acquire() call above to set
- * This->render_offscreen properly. We don't currently take the
+ * context->render_offscreen properly. We don't currently take the
* Z-compare function into account, but we could skip loading the
* depthstencil for D3DCMP_NEVER and D3DCMP_ALWAYS as well. Also note
* that we never copy the stencil data.*/
DWORD location = context->render_offscreen ? SFLAG_DS_OFFSCREEN : SFLAG_DS_ONSCREEN;
if (state->render_states[WINED3DRS_ZWRITEENABLE] || state->render_states[WINED3DRS_ZENABLE])
{
+ IWineD3DSurfaceImpl *ds = device->depth_stencil;
RECT current_rect, draw_rect, r;
- if (location == SFLAG_DS_ONSCREEN && This->depth_stencil != This->onscreen_depth_stencil)
- device_switch_onscreen_ds(This, context, This->depth_stencil);
+ if (location == SFLAG_DS_ONSCREEN && ds != device->onscreen_depth_stencil)
+ device_switch_onscreen_ds(device, context, ds);
- if (This->depth_stencil->flags & location)
- SetRect(¤t_rect, 0, 0,
- This->depth_stencil->ds_current_size.cx,
- This->depth_stencil->ds_current_size.cy);
+ if (ds->flags & location)
+ SetRect(¤t_rect, 0, 0, ds->ds_current_size.cx, ds->ds_current_size.cy);
else
SetRectEmpty(¤t_rect);
- device_get_draw_rect(This, &draw_rect);
+ device_get_draw_rect(device, &draw_rect);
IntersectRect(&r, &draw_rect, ¤t_rect);
if (!EqualRect(&r, &draw_rect))
- surface_load_ds_location(This->depth_stencil, context, location);
+ surface_load_ds_location(ds, context, location);
if (state->render_states[WINED3DRS_ZWRITEENABLE])
{
- surface_modify_ds_location(This->depth_stencil, location,
- This->depth_stencil->ds_current_size.cx,
- This->depth_stencil->ds_current_size.cy);
- surface_modify_location(This->depth_stencil, SFLAG_INDRAWABLE, TRUE);
+ surface_modify_ds_location(ds, location, ds->ds_current_size.cx, ds->ds_current_size.cy);
+ surface_modify_location(ds, SFLAG_INDRAWABLE, TRUE);
}
}
}
@@ -647,12 +642,12 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
{
GLenum glPrimType = state->gl_primitive_type;
BOOL emulation = FALSE;
- const struct wined3d_stream_info *stream_info = &This->strided_streams;
+ const struct wined3d_stream_info *stream_info = &device->strided_streams;
struct wined3d_stream_info stridedlcl;
if (!use_vs(state))
{
- if (!This->strided_streams.position_transformed && context->num_untracked_materials
+ if (!stream_info->position_transformed && context->num_untracked_materials
&& state->render_states[WINED3DRS_LIGHTING])
{
static BOOL warned;
@@ -681,12 +676,12 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
if(emulation) {
stream_info = &stridedlcl;
- memcpy(&stridedlcl, &This->strided_streams, sizeof(stridedlcl));
+ memcpy(&stridedlcl, &device->strided_streams, sizeof(stridedlcl));
remove_vbos(context->gl_info, state, &stridedlcl);
}
}
- if (This->useDrawStridedSlow || emulation)
+ if (device->useDrawStridedSlow || emulation)
{
/* Immediate mode drawing */
if (use_vs(state))
@@ -703,11 +698,11 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
}
else
{
- drawStridedSlow(This, context, stream_info, index_count,
+ drawStridedSlow(device, context, stream_info, index_count,
glPrimType, idxData, idxSize, StartIdx);
}
}
- else if (This->instancedDraw)
+ else if (device->instancedDraw)
{
/* Instancing emulation with mixing immediate mode and arrays */
drawStridedInstanced(context->gl_info, state, stream_info,
@@ -722,9 +717,9 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
/* Finished updating the screen, restore lock */
LEAVE_GL();
- for(i = 0; i < This->num_buffer_queries; i++)
+ for(i = 0; i < device->num_buffer_queries; ++i)
{
- wined3d_event_query_issue(This->buffer_queries[i], This);
+ wined3d_event_query_issue(device->buffer_queries[i], device);
}
if (wined3d_settings.strict_draw_ordering) wglFlush(); /* Flush to ensure ordering across contexts. */
@@ -734,7 +729,7 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
TRACE("Done all gl drawing\n");
/* Control goes back to the device, stateblock values may change again */
- This->isInDraw = FALSE;
+ device->isInDraw = FALSE;
}
static void normalize_normal(float *n) {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 4bd7d2e..a1f2b70 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -920,7 +920,7 @@ struct wined3d_stream_info
*/
/* Routine common to the draw primitive and draw indexed primitive routines */
-void drawPrimitive(IWineD3DDevice *iface, UINT index_count,
+void drawPrimitive(IWineD3DDeviceImpl *device, UINT index_count,
UINT start_idx, UINT idxBytes, const void *idxData) DECLSPEC_HIDDEN;
DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) DECLSPEC_HIDDEN;
--
1.7.2.2
More information about the wine-patches
mailing list