[PATCH 1/5] wined3d: Remove the special case for loop and rep in shader_get_registers_used().
Henri Verbeet
hverbeet at codeweavers.com
Wed Nov 23 01:51:41 CST 2011
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)
--
1.7.3.4
More information about the wine-patches
mailing list