wined3d: Use shader_get_param() in trace pass, reg. count pass, generation pass.
Change the trace pass, the register counting pass, and the hw generator pass to take into account the new get_params() function. For hw generation, store the address tokens into the SHADER_OPCODE_ARG structure, so they're available to generator functions.
This commit is contained in:
parent
404eff792f
commit
03b67e3030
@ -4,6 +4,7 @@
|
|||||||
* Copyright 2002-2003 Jason Edmeades
|
* Copyright 2002-2003 Jason Edmeades
|
||||||
* Copyright 2002-2003 Raphael Junqueira
|
* Copyright 2002-2003 Raphael Junqueira
|
||||||
* Copyright 2005 Oliver Stieber
|
* Copyright 2005 Oliver Stieber
|
||||||
|
* Copyright 2006 Ivan Gyurdiev
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -214,13 +215,17 @@ void shader_get_registers_used(
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < curOpcode->num_params; ++i) {
|
for (i = 0; i < curOpcode->num_params; ++i) {
|
||||||
DWORD regtype = (((*pToken) & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT);
|
|
||||||
DWORD reg = (*pToken) & D3DSP_REGNUM_MASK;
|
DWORD param, addr_token, reg, regtype;
|
||||||
|
pToken += shader_get_param(iface, pToken, ¶m, &addr_token);
|
||||||
|
|
||||||
|
regtype = (param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT;
|
||||||
|
reg = param & D3DSP_REGNUM_MASK;
|
||||||
|
|
||||||
if (D3DSPR_TEXTURE == regtype)
|
if (D3DSPR_TEXTURE == regtype)
|
||||||
*texUsed |= (1 << reg);
|
*texUsed |= (1 << reg);
|
||||||
if (D3DSPR_TEMP == regtype)
|
if (D3DSPR_TEMP == regtype)
|
||||||
*tempsUsed |= (1 << reg);
|
*tempsUsed |= (1 << reg);
|
||||||
++pToken;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -563,12 +568,33 @@ void generate_base_shader(
|
|||||||
hw_arg.shader = iface;
|
hw_arg.shader = iface;
|
||||||
hw_arg.opcode = curOpcode;
|
hw_arg.opcode = curOpcode;
|
||||||
hw_arg.buffer = buffer;
|
hw_arg.buffer = buffer;
|
||||||
if (curOpcode->num_params > 0) {
|
|
||||||
hw_arg.dst = *pToken;
|
|
||||||
|
|
||||||
/* FIXME: this does not account for relative address tokens */
|
if (curOpcode->num_params > 0) {
|
||||||
for (i = 1; i < curOpcode->num_params; i++)
|
|
||||||
hw_arg.src[i-1] = *(pToken + i);
|
DWORD param, addr_token = 0;
|
||||||
|
|
||||||
|
/* DCL instruction has usage dst parameter, not register */
|
||||||
|
if (curOpcode->opcode == D3DSIO_DCL)
|
||||||
|
param = *pToken++;
|
||||||
|
else
|
||||||
|
pToken += shader_get_param(iface, pToken, ¶m, &addr_token);
|
||||||
|
|
||||||
|
hw_arg.dst = param;
|
||||||
|
hw_arg.dst_addr = addr_token;
|
||||||
|
|
||||||
|
for (i = 1; i < curOpcode->num_params; i++) {
|
||||||
|
/* DEF* instructions have constant src parameters, not registers */
|
||||||
|
if (curOpcode->opcode == D3DSIO_DEF ||
|
||||||
|
curOpcode->opcode == D3DSIO_DEFI ||
|
||||||
|
curOpcode->opcode == D3DSIO_DEFB) {
|
||||||
|
param = *pToken++;
|
||||||
|
|
||||||
|
} else
|
||||||
|
pToken += shader_get_param(iface, pToken, ¶m, &addr_token);
|
||||||
|
|
||||||
|
hw_arg.src[i-1] = param;
|
||||||
|
hw_arg.src_addr[i-1] = addr_token;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call appropriate function for output target */
|
/* Call appropriate function for output target */
|
||||||
@ -577,8 +603,6 @@ void generate_base_shader(
|
|||||||
else
|
else
|
||||||
curOpcode->hw_fct(&hw_arg);
|
curOpcode->hw_fct(&hw_arg);
|
||||||
|
|
||||||
pToken += curOpcode->num_params;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* Unless we encounter a no-op command, this opcode is unrecognized */
|
/* Unless we encounter a no-op command, this opcode is unrecognized */
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
* Copyright 2002-2003 Jason Edmeades
|
* Copyright 2002-2003 Jason Edmeades
|
||||||
* Copyright 2002-2003 Raphael Junqueira
|
* Copyright 2002-2003 Raphael Junqueira
|
||||||
* Copyright 2005 Oliver Stieber
|
* Copyright 2005 Oliver Stieber
|
||||||
|
* Copyright 2006 Ivan Gyurdiev
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -1448,18 +1449,31 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_SetFunction(IWineD3DPixelShader *iface, C
|
|||||||
++pToken;
|
++pToken;
|
||||||
++len;
|
++len;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
DWORD param, addr_token;
|
||||||
|
int tokens_read;
|
||||||
|
|
||||||
TRACE("%s", curOpcode->name);
|
TRACE("%s", curOpcode->name);
|
||||||
if (curOpcode->num_params > 0) {
|
if (curOpcode->num_params > 0) {
|
||||||
shader_dump_ins_modifiers(*pToken);
|
|
||||||
|
tokens_read = shader_get_param((IWineD3DBaseShader*) This,
|
||||||
|
pToken, ¶m, &addr_token);
|
||||||
|
pToken += tokens_read;
|
||||||
|
len += tokens_read;
|
||||||
|
|
||||||
|
shader_dump_ins_modifiers(param);
|
||||||
TRACE(" ");
|
TRACE(" ");
|
||||||
shader_dump_param((IWineD3DBaseShader*) This, *pToken, 0);
|
shader_dump_param((IWineD3DBaseShader*) This, param, 0);
|
||||||
++pToken;
|
|
||||||
++len;
|
|
||||||
for (i = 1; i < curOpcode->num_params; ++i) {
|
for (i = 1; i < curOpcode->num_params; ++i) {
|
||||||
|
|
||||||
|
tokens_read = shader_get_param((IWineD3DBaseShader*) This,
|
||||||
|
pToken, ¶m, &addr_token);
|
||||||
|
pToken += tokens_read;
|
||||||
|
len += tokens_read;
|
||||||
|
|
||||||
TRACE(", ");
|
TRACE(", ");
|
||||||
shader_dump_param((IWineD3DBaseShader*) This, *pToken, 1);
|
shader_dump_param((IWineD3DBaseShader*) This, param, 1);
|
||||||
++pToken;
|
|
||||||
++len;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
* Copyright 2002-2003 Jason Edmeades
|
* Copyright 2002-2003 Jason Edmeades
|
||||||
* Copyright 2002-2003 Raphael Junqueira
|
* Copyright 2002-2003 Raphael Junqueira
|
||||||
* Copyright 2005 Oliver Stieber
|
* Copyright 2005 Oliver Stieber
|
||||||
|
* Copyright 2006 Ivan Gyurdiev
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -1570,18 +1571,31 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_SetFunction(IWineD3DVertexShader *iface,
|
|||||||
++pToken;
|
++pToken;
|
||||||
++len;
|
++len;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
DWORD param, addr_token;
|
||||||
|
int tokens_read;
|
||||||
|
|
||||||
TRACE("%s", curOpcode->name);
|
TRACE("%s", curOpcode->name);
|
||||||
if (curOpcode->num_params > 0) {
|
if (curOpcode->num_params > 0) {
|
||||||
shader_dump_ins_modifiers(*pToken);
|
|
||||||
|
tokens_read = shader_get_param((IWineD3DBaseShader*) This,
|
||||||
|
pToken, ¶m, &addr_token);
|
||||||
|
pToken += tokens_read;
|
||||||
|
len += tokens_read;
|
||||||
|
|
||||||
|
shader_dump_ins_modifiers(param);
|
||||||
TRACE(" ");
|
TRACE(" ");
|
||||||
shader_dump_param((IWineD3DBaseShader*) This, *pToken, 0);
|
shader_dump_param((IWineD3DBaseShader*) This, param, 0);
|
||||||
++pToken;
|
|
||||||
++len;
|
|
||||||
for (i = 1; i < curOpcode->num_params; ++i) {
|
for (i = 1; i < curOpcode->num_params; ++i) {
|
||||||
|
|
||||||
|
tokens_read = shader_get_param((IWineD3DBaseShader*) This,
|
||||||
|
pToken, ¶m, &addr_token);
|
||||||
|
pToken += tokens_read;
|
||||||
|
len += tokens_read;
|
||||||
|
|
||||||
TRACE(", ");
|
TRACE(", ");
|
||||||
shader_dump_param((IWineD3DBaseShader*) This, *pToken, 1);
|
shader_dump_param((IWineD3DBaseShader*) This, param, 1);
|
||||||
++pToken;
|
|
||||||
++len;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1295,7 +1295,9 @@ typedef struct SHADER_OPCODE_ARG {
|
|||||||
IWineD3DBaseShader* shader;
|
IWineD3DBaseShader* shader;
|
||||||
CONST SHADER_OPCODE* opcode;
|
CONST SHADER_OPCODE* opcode;
|
||||||
DWORD dst;
|
DWORD dst;
|
||||||
|
DWORD dst_addr;
|
||||||
DWORD src[4];
|
DWORD src[4];
|
||||||
|
DWORD src_addr[4];
|
||||||
SHADER_BUFFER* buffer;
|
SHADER_BUFFER* buffer;
|
||||||
} SHADER_OPCODE_ARG;
|
} SHADER_OPCODE_ARG;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user