Henri Verbeet : wined3d: Get rid of the remaining WINED3DSP_REGNUM_MASK usage.
Alexandre Julliard
julliard at winehq.org
Mon May 4 09:06:38 CDT 2009
Module: wine
Branch: master
Commit: 6eb43e35c994820cfb7e0119e51ed60a88d19ca9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6eb43e35c994820cfb7e0119e51ed60a88d19ca9
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Mon May 4 09:49:27 2009 +0200
wined3d: Get rid of the remaining WINED3DSP_REGNUM_MASK usage.
---
dlls/wined3d/baseshader.c | 119 +++++++++++++++++++++++----------------------
1 files changed, 61 insertions(+), 58 deletions(-)
diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c
index 9bdad17..f627ec0 100644
--- a/dlls/wined3d/baseshader.c
+++ b/dlls/wined3d/baseshader.c
@@ -724,21 +724,24 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, struct shader_reg_m
else if (ins.handler_idx == WINED3DSIH_LOOP
|| ins.handler_idx == WINED3DSIH_REP)
{
- DWORD reg;
+ struct wined3d_shader_src_param src, rel_addr;
- if(ins.handler_idx == WINED3DSIH_LOOP) {
- reg = pToken[1];
- } else {
- reg = pToken[0];
+ shader_sm1_read_src_param(&pToken, &src, &rel_addr, shader_version);
+
+ /* Rep and Loop always use an integer constant for the control parameters */
+ if (ins.handler_idx == WINED3DSIH_REP)
+ {
+ reg_maps->integer_constants |= 1 << src.register_idx;
+ }
+ else
+ {
+ shader_sm1_read_src_param(&pToken, &src, &rel_addr, shader_version);
+ reg_maps->integer_constants |= 1 << src.register_idx;
}
cur_loop_depth++;
if(cur_loop_depth > max_loop_depth)
max_loop_depth = cur_loop_depth;
- pToken += param_size;
-
- /* Rep and Loop always use an integer constant for the control parameters */
- reg_maps->integer_constants |= (1 << (reg & WINED3DSP_REGNUM_MASK));
}
else if (ins.handler_idx == WINED3DSIH_ENDLOOP
|| ins.handler_idx == WINED3DSIH_ENDREP)
@@ -748,62 +751,16 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, struct shader_reg_m
/* For subroutine prototypes */
else if (ins.handler_idx == WINED3DSIH_LABEL)
{
+ struct wined3d_shader_src_param src, rel_addr;
- DWORD snum = *pToken & WINED3DSP_REGNUM_MASK;
- reg_maps->labels[snum] = 1;
- pToken += param_size;
+ shader_sm1_read_src_param(&pToken, &src, &rel_addr, shader_version);
+ reg_maps->labels[src.register_idx] = 1;
}
/* Set texture, address, temporary registers */
else
{
int i, limit;
- /* Declare 1.X samplers implicitly, based on the destination reg. number */
- if (WINED3DSHADER_VERSION_MAJOR(shader_version) == 1
- && pshader /* Filter different instructions with the same enum values in VS */
- && (ins.handler_idx == WINED3DSIH_TEX
- || ins.handler_idx == WINED3DSIH_TEXBEM
- || ins.handler_idx == WINED3DSIH_TEXBEML
- || ins.handler_idx == WINED3DSIH_TEXDP3TEX
- || ins.handler_idx == WINED3DSIH_TEXM3x2TEX
- || ins.handler_idx == WINED3DSIH_TEXM3x3SPEC
- || ins.handler_idx == WINED3DSIH_TEXM3x3TEX
- || ins.handler_idx == WINED3DSIH_TEXM3x3VSPEC
- || ins.handler_idx == WINED3DSIH_TEXREG2AR
- || ins.handler_idx == WINED3DSIH_TEXREG2GB
- || ins.handler_idx == WINED3DSIH_TEXREG2RGB))
- {
- /* Fake sampler usage, only set reserved bit and ttype */
- DWORD sampler_code = *pToken & WINED3DSP_REGNUM_MASK;
-
- TRACE("Setting fake 2D sampler for 1.x pixelshader\n");
- reg_maps->sampler_type[sampler_code] = WINED3DSTT_2D;
-
- /* texbem is only valid with < 1.4 pixel shaders */
- if (ins.handler_idx == WINED3DSIH_TEXBEM
- || ins.handler_idx == WINED3DSIH_TEXBEML)
- {
- reg_maps->bumpmat[sampler_code] = TRUE;
- if (ins.handler_idx == WINED3DSIH_TEXBEML)
- {
- reg_maps->luminanceparams[sampler_code] = TRUE;
- }
- }
- }
- if (ins.handler_idx == WINED3DSIH_NRM)
- {
- reg_maps->usesnrm = 1;
- }
- else if (pshader && ins.handler_idx == WINED3DSIH_BEM)
- {
- DWORD regnum = *pToken & WINED3DSP_REGNUM_MASK;
- reg_maps->bumpmat[regnum] = TRUE;
- }
- else if (ins.handler_idx == WINED3DSIH_DSY)
- {
- reg_maps->usesdsy = 1;
- }
-
/* This will loop over all the registers and try to
* make a bitmask of the ones we're interested in.
*
@@ -831,6 +788,52 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, struct shader_reg_m
shader_record_register_usage(This, reg_maps, dst_param.register_type,
dst_param.register_idx, !!dst_param.rel_addr, pshader);
}
+
+ /* Declare 1.X samplers implicitly, based on the destination reg. number */
+ if (WINED3DSHADER_VERSION_MAJOR(shader_version) == 1
+ && pshader /* Filter different instructions with the same enum values in VS */
+ && (ins.handler_idx == WINED3DSIH_TEX
+ || ins.handler_idx == WINED3DSIH_TEXBEM
+ || ins.handler_idx == WINED3DSIH_TEXBEML
+ || ins.handler_idx == WINED3DSIH_TEXDP3TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x2TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x3SPEC
+ || ins.handler_idx == WINED3DSIH_TEXM3x3TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x3VSPEC
+ || ins.handler_idx == WINED3DSIH_TEXREG2AR
+ || ins.handler_idx == WINED3DSIH_TEXREG2GB
+ || ins.handler_idx == WINED3DSIH_TEXREG2RGB))
+ {
+ /* Fake sampler usage, only set reserved bit and ttype */
+ DWORD sampler_code = dst_param.register_idx;
+
+ TRACE("Setting fake 2D sampler for 1.x pixelshader\n");
+ reg_maps->sampler_type[sampler_code] = WINED3DSTT_2D;
+
+ /* texbem is only valid with < 1.4 pixel shaders */
+ if (ins.handler_idx == WINED3DSIH_TEXBEM
+ || ins.handler_idx == WINED3DSIH_TEXBEML)
+ {
+ reg_maps->bumpmat[sampler_code] = TRUE;
+ if (ins.handler_idx == WINED3DSIH_TEXBEML)
+ {
+ reg_maps->luminanceparams[sampler_code] = TRUE;
+ }
+ }
+ }
+ else if (pshader && ins.handler_idx == WINED3DSIH_BEM)
+ {
+ reg_maps->bumpmat[dst_param.register_idx] = TRUE;
+ }
+ }
+
+ if (ins.handler_idx == WINED3DSIH_NRM)
+ {
+ reg_maps->usesnrm = 1;
+ }
+ else if (ins.handler_idx == WINED3DSIH_DSY)
+ {
+ reg_maps->usesdsy = 1;
}
limit = ins.src_count + (ins.predicate ? 1 : 0);
More information about the wine-cvs
mailing list