Henri Verbeet : wined3d: Remove the special case for loop and rep in shader_get_registers_used().
Alexandre Julliard
julliard at winehq.org
Wed Nov 23 13:40:04 CST 2011
Module: wine
Branch: master
Commit: a8504f4f57fe44a2a368e85fed11f4ecd143d29c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a8504f4f57fe44a2a368e85fed11f4ecd143d29c
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Wed Nov 23 08:51:41 2011 +0100
wined3d: Remove the special case for loop and rep in shader_get_registers_used().
SM4 loops don't have control parameters.
---
dlls/wined3d/shader.c | 37 ++++++++++---------------------------
1 files changed, 10 insertions(+), 27 deletions(-)
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index d7ba818..11be333 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -595,33 +595,6 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
list_add_head(&shader->constantsB, &lconst->entry);
reg_maps->local_bool_consts |= (1 << dst.reg.idx);
}
- /* If there's a loop in the shader. */
- else if (ins.handler_idx == WINED3DSIH_LOOP
- || ins.handler_idx == WINED3DSIH_REP)
- {
- struct wined3d_shader_src_param src, rel_addr;
-
- fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
-
- /* Rep and Loop always use an integer constant for the control parameters. */
- if (ins.handler_idx == WINED3DSIH_REP)
- {
- reg_maps->integer_constants |= 1 << src.reg.idx;
- }
- else
- {
- fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
- reg_maps->integer_constants |= 1 << src.reg.idx;
- }
-
- cur_loop_depth++;
- if (cur_loop_depth > max_loop_depth) max_loop_depth = cur_loop_depth;
- }
- else if (ins.handler_idx == WINED3DSIH_ENDLOOP
- || ins.handler_idx == WINED3DSIH_ENDREP)
- {
- cur_loop_depth--;
- }
/* For subroutine prototypes. */
else if (ins.handler_idx == WINED3DSIH_LABEL)
{
@@ -795,6 +768,16 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st
else if (ins.handler_idx == WINED3DSIH_IFC) reg_maps->usesifc = 1;
else if (ins.handler_idx == WINED3DSIH_CALL) reg_maps->usescall = 1;
else if (ins.handler_idx == WINED3DSIH_POW) reg_maps->usespow = 1;
+ else if (ins.handler_idx == WINED3DSIH_LOOP
+ || ins.handler_idx == WINED3DSIH_REP)
+ {
+ ++cur_loop_depth;
+ if (cur_loop_depth > max_loop_depth)
+ max_loop_depth = cur_loop_depth;
+ }
+ else if (ins.handler_idx == WINED3DSIH_ENDLOOP
+ || ins.handler_idx == WINED3DSIH_ENDREP)
+ --cur_loop_depth;
limit = ins.src_count + (ins.predicate ? 1 : 0);
for (i = 0; i < limit; ++i)
More information about the wine-cvs
mailing list