Ivan Gyurdiev : wined3d: Make register counting pass the same.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed May 10 05:22:37 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: aadafd64da53bb39492f88507928e6e486d408c3
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=aadafd64da53bb39492f88507928e6e486d408c3
Author: Ivan Gyurdiev <ivg2 at cornell.edu>
Date: Tue May 9 18:01:05 2006 -0400
wined3d: Make register counting pass the same.
---
dlls/wined3d/vertexshader.c | 67 +++++++++++++++++++++----------------------
1 files changed, 33 insertions(+), 34 deletions(-)
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 56d322a..122209c 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -1102,12 +1102,6 @@ #endif
buffer.bsize = 0;
buffer.lineNo = 0;
- /* Initialise the shader */
- This->namedArrays = FALSE;
- This->declaredArrays = FALSE;
- for (i = 0; i < WINED3DSHADERDECLUSAGE_MAX_USAGE; i++) {
- This->arrayUsageMap[i] = -1;
- }
/* set all the tmpsUsed to not used */
memset(tmpsUsed, FALSE , sizeof(tmpsUsed));
@@ -1144,18 +1138,14 @@ #endif
++pToken;
}
} else {
+
+ /* Skip declarations, handled earlier */
if (curOpcode->opcode == D3DSIO_DCL){
- INT usage = *pToken++;
- INT arrayNo = (*pToken++ & D3DSP_REGNUM_MASK);
- parse_decl_usage(This, usage, arrayNo);
+ pToken += 2;
+
+ /* Skip definition of immediate constants, handled later */
} else if(curOpcode->opcode == D3DSIO_DEF) {
- This->constantsUsedBitmap[*pToken & 0xFF] = VS_CONSTANT_CONSTANT;
- FIXME("Constant %ld\n", *pToken & 0xFF);
- ++pToken;
- ++pToken;
- ++pToken;
- ++pToken;
- ++pToken;
+ pToken += 5;
} else {
/* Check to see if and tmp or addressing redisters are used */
@@ -1191,19 +1181,7 @@ #endif
}
}
}
-#if 1
-#define VSHADER_ALWAYS_NUMBERED
-#endif
-
-#ifdef VSHADER_ALWAYS_NUMBERED /* handy for debugging using numbered arrays instead of named arrays */
- /* TODO: using numbered arrays for software shaders makes things easier */
- This->declaredArrays = TRUE;
-#endif
- /* named arrays and declared arrays are mutually exclusive */
- if (This->declaredArrays) {
- This->namedArrays = FALSE;
- }
/* TODO: validate
nUseAddressRegister < = GL_MAX_PROGRAM_ADDRESS_REGISTERS_AR
nUseTempRegister <= GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB
@@ -1285,6 +1263,7 @@ #endif
*(float *) (pToken + 3),
*(float *) (pToken + 4));
+ This->constantsUsedBitmap[*pToken & 0xFF] = VS_CONSTANT_CONSTANT;
pToken += 5;
continue;
@@ -1876,6 +1855,12 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
DWORD i;
TRACE("(%p) : Parsing programme\n", This);
+ /* Initialise vertex input arrays */
+ This->namedArrays = FALSE;
+ This->declaredArrays = FALSE;
+ for (i = 0; i < WINED3DSHADERDECLUSAGE_MAX_USAGE; i++)
+ This->arrayUsageMap[i] = -1;
+
if (NULL != pToken) {
while (D3DVS_END() != *pToken) {
if (vshader_is_version_token(*pToken)) { /** version */
@@ -1907,12 +1892,16 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
} else {
if (curOpcode->opcode == D3DSIO_DCL) {
- vshader_program_dump_decl_usage(This, *pToken, *(pToken + 1));
- ++pToken;
- ++len;
- vshader_program_dump_vs_param(*pToken, 0);
- ++pToken;
- ++len;
+
+ DWORD usage = *pToken;
+ DWORD param = *(pToken + 1);
+
+ parse_decl_usage(This, usage, param & D3DSP_REGNUM_MASK);
+ vshader_program_dump_decl_usage(This, usage, param);
+ vshader_program_dump_vs_param(param, 0);
+ pToken += 2;
+ len += 2;
+
} else
if (curOpcode->opcode == D3DSIO_DEF) {
TRACE("def c%lu = ", *pToken & 0xFF);
@@ -1952,6 +1941,16 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_
This->baseShader.functionLength = 1; /* no Function defined use fixed function vertex processing */
}
+/* Handy for debugging using numbered arrays instead of named arrays */
+#if 1
+ /* TODO: using numbered arrays for software shaders makes things easier */
+ This->declaredArrays = TRUE;
+#endif
+
+ /* named arrays and declared arrays are mutually exclusive */
+ if (This->declaredArrays)
+ This->namedArrays = FALSE;
+
/* Generate HW shader in needed */
if (NULL != pFunction && wined3d_settings.vs_mode == VS_HW) {
#if 1
More information about the wine-cvs
mailing list