wined3d: Move program_dump_decl_usage into baseshader.

This commit is contained in:
Jason Green 2006-05-09 22:26:05 -04:00 committed by Alexandre Julliard
parent a87520036f
commit 5308e026d1
4 changed files with 100 additions and 157 deletions

View File

@ -159,4 +159,79 @@ void shader_get_registers_used(
} }
} }
void shader_program_dump_decl_usage(
DWORD decl,
DWORD param) {
DWORD regtype = shader_get_regtype(param);
TRACE("dcl_");
if (regtype == D3DSPR_SAMPLER) {
DWORD ttype = decl & D3DSP_TEXTURETYPE_MASK;
switch (ttype) {
case D3DSTT_2D: TRACE("2d"); break;
case D3DSTT_CUBE: TRACE("cube"); break;
case D3DSTT_VOLUME: TRACE("volume"); break;
default: TRACE("unknown_ttype(%08lx)", ttype);
}
} else {
DWORD usage = decl & D3DSP_DCL_USAGE_MASK;
DWORD idx = (decl & D3DSP_DCL_USAGEINDEX_MASK) >> D3DSP_DCL_USAGEINDEX_SHIFT;
switch(usage) {
case D3DDECLUSAGE_POSITION:
TRACE("%s%ld", "position", idx);
break;
case D3DDECLUSAGE_BLENDINDICES:
TRACE("%s", "blend");
break;
case D3DDECLUSAGE_BLENDWEIGHT:
TRACE("%s", "weight");
break;
case D3DDECLUSAGE_NORMAL:
TRACE("%s%ld", "normal", idx);
break;
case D3DDECLUSAGE_PSIZE:
TRACE("%s", "psize");
break;
case D3DDECLUSAGE_COLOR:
if(idx == 0) {
TRACE("%s", "color");
} else {
TRACE("%s%ld", "specular", (idx - 1));
}
break;
case D3DDECLUSAGE_TEXCOORD:
TRACE("%s%ld", "texture", idx);
break;
case D3DDECLUSAGE_TANGENT:
TRACE("%s", "tangent");
break;
case D3DDECLUSAGE_BINORMAL:
TRACE("%s", "binormal");
break;
case D3DDECLUSAGE_TESSFACTOR:
TRACE("%s", "tessfactor");
break;
case D3DDECLUSAGE_POSITIONT:
TRACE("%s%ld", "positionT", idx);
break;
case D3DDECLUSAGE_FOG:
TRACE("%s", "fog");
break;
case D3DDECLUSAGE_DEPTH:
TRACE("%s", "depth");
break;
case D3DDECLUSAGE_SAMPLE:
TRACE("%s", "sample");
break;
default:
FIXME("unknown_semantics(%08lx)", usage);
}
}
}
/* TODO: Move other shared code here */ /* TODO: Move other shared code here */

View File

@ -962,7 +962,7 @@ void pshader_set_version(
This->baseShader.limits.constant_int = 0; This->baseShader.limits.constant_int = 0;
This->baseShader.limits.constant_bool = 0; This->baseShader.limits.constant_bool = 0;
This->baseShader.limits.texture = 8; This->baseShader.limits.texture = 8;
FIXME("Unrecognized pixel shader version %lu!\n", version); FIXME("Unrecognized pixel shader version %lx!\n", version);
} }
} }
@ -1606,80 +1606,6 @@ inline static void pshader_program_dump_ps_param(const DWORD param, int input) {
} }
} }
inline static void pshader_program_dump_decl_usage(
IWineD3DPixelShaderImpl *This, DWORD decl, DWORD param) {
DWORD regtype = shader_get_regtype(param);
TRACE("dcl_");
if (regtype == D3DSPR_SAMPLER) {
DWORD ttype = decl & D3DSP_TEXTURETYPE_MASK;
switch (ttype) {
case D3DSTT_2D: TRACE("2d "); break;
case D3DSTT_CUBE: TRACE("cube "); break;
case D3DSTT_VOLUME: TRACE("volume "); break;
default: TRACE("unknown_ttype(%08lx) ", ttype);
}
} else {
DWORD usage = decl & D3DSP_DCL_USAGE_MASK;
DWORD idx = (decl & D3DSP_DCL_USAGEINDEX_MASK) >> D3DSP_DCL_USAGEINDEX_SHIFT;
switch(usage) {
case D3DDECLUSAGE_POSITION:
TRACE("%s%ld ", "position", idx);
break;
case D3DDECLUSAGE_BLENDINDICES:
TRACE("%s ", "blend");
break;
case D3DDECLUSAGE_BLENDWEIGHT:
TRACE("%s ", "weight");
break;
case D3DDECLUSAGE_NORMAL:
TRACE("%s%ld ", "normal", idx);
break;
case D3DDECLUSAGE_PSIZE:
TRACE("%s ", "psize");
break;
case D3DDECLUSAGE_COLOR:
if(idx == 0) {
TRACE("%s ", "color");
} else {
TRACE("%s%ld ", "specular", (idx - 1));
}
break;
case D3DDECLUSAGE_TEXCOORD:
TRACE("%s%ld ", "texture", idx);
break;
case D3DDECLUSAGE_TANGENT:
TRACE("%s ", "tangent");
break;
case D3DDECLUSAGE_BINORMAL:
TRACE("%s ", "binormal");
break;
case D3DDECLUSAGE_TESSFACTOR:
TRACE("%s ", "tessfactor");
break;
case D3DDECLUSAGE_POSITIONT:
TRACE("%s%ld ", "positionT", idx);
break;
case D3DDECLUSAGE_FOG:
TRACE("%s ", "fog");
break;
case D3DDECLUSAGE_DEPTH:
TRACE("%s ", "depth");
break;
case D3DDECLUSAGE_SAMPLE:
TRACE("%s ", "sample");
break;
default:
FIXME("Unrecognised dcl %08lx", usage);
}
}
}
HRESULT WINAPI IWineD3DPixelShaderImpl_SetFunction(IWineD3DPixelShader *iface, CONST DWORD *pFunction) { HRESULT WINAPI IWineD3DPixelShaderImpl_SetFunction(IWineD3DPixelShader *iface, CONST DWORD *pFunction) {
IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface; IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
const DWORD* pToken = pFunction; const DWORD* pToken = pFunction;
@ -1724,12 +1650,23 @@ HRESULT WINAPI IWineD3DPixelShaderImpl_SetFunction(IWineD3DPixelShader *iface, C
} else { } else {
if (curOpcode->opcode == D3DSIO_DCL) { if (curOpcode->opcode == D3DSIO_DCL) {
pshader_program_dump_decl_usage(This, *pToken, *(pToken + 1)); DWORD usage = *pToken;
++pToken; DWORD param = *(pToken + 1);
++len; DWORD regtype = shader_get_regtype(param);
pshader_program_dump_ps_param(*pToken, 0);
++pToken; /* Only print extended declaration for samplers or 3.0 input registers */
++len; if (regtype == D3DSPR_SAMPLER ||
(This->baseShader.version >= 30 && regtype == D3DSPR_INPUT))
shader_program_dump_decl_usage(usage, param);
else
TRACE("dcl");
pshader_program_dump_ins_modifiers(param);
TRACE(" ");
pshader_program_dump_ps_param(param, 0);
pToken += 2;
len += 2;
} else } else
if (curOpcode->opcode == D3DSIO_DEF) { if (curOpcode->opcode == D3DSIO_DEF) {
TRACE("def c%lu = ", *pToken & 0xFF); TRACE("def c%lu = ", *pToken & 0xFF);

View File

@ -647,80 +647,6 @@ inline static void vshader_program_dump_vs_param(const DWORD param, int input) {
} }
} }
inline static void vshader_program_dump_decl_usage(
IWineD3DVertexShaderImpl *This, DWORD decl, DWORD param) {
DWORD regtype = shader_get_regtype(param);
TRACE("dcl_");
if (regtype == D3DSPR_SAMPLER) {
DWORD ttype = decl & D3DSP_TEXTURETYPE_MASK;
switch (ttype) {
case D3DSTT_2D: TRACE("2d "); break;
case D3DSTT_CUBE: TRACE("cube "); break;
case D3DSTT_VOLUME: TRACE("volume "); break;
default: TRACE("unknown_ttype(%08lx) ", ttype);
}
} else {
DWORD usage = decl & D3DSP_DCL_USAGE_MASK;
DWORD idx = (decl & D3DSP_DCL_USAGEINDEX_MASK) >> D3DSP_DCL_USAGEINDEX_SHIFT;
switch(usage) {
case D3DDECLUSAGE_POSITION:
TRACE("%s%ld ", "position", idx);
break;
case D3DDECLUSAGE_BLENDINDICES:
TRACE("%s ", "blend");
break;
case D3DDECLUSAGE_BLENDWEIGHT:
TRACE("%s ", "weight");
break;
case D3DDECLUSAGE_NORMAL:
TRACE("%s%ld ", "normal", idx);
break;
case D3DDECLUSAGE_PSIZE:
TRACE("%s ", "psize");
break;
case D3DDECLUSAGE_COLOR:
if(idx == 0) {
TRACE("%s ", "color");
} else {
TRACE("%s ", "specular");
}
break;
case D3DDECLUSAGE_TEXCOORD:
TRACE("%s%ld ", "texture", idx);
break;
case D3DDECLUSAGE_TANGENT:
TRACE("%s ", "tangent");
break;
case D3DDECLUSAGE_BINORMAL:
TRACE("%s ", "binormal");
break;
case D3DDECLUSAGE_TESSFACTOR:
TRACE("%s ", "tessfactor");
break;
case D3DDECLUSAGE_POSITIONT:
TRACE("%s%ld ", "positionT", idx);
break;
case D3DDECLUSAGE_FOG:
TRACE("%s ", "fog");
break;
case D3DDECLUSAGE_DEPTH:
TRACE("%s ", "depth");
break;
case D3DDECLUSAGE_SAMPLE:
TRACE("%s ", "sample");
break;
default:
FIXME("Unrecognised dcl %08lx", usage);
}
}
}
inline static BOOL vshader_is_version_token(DWORD token) { inline static BOOL vshader_is_version_token(DWORD token) {
return 0xFFFE0000 == (token & 0xFFFE0000); return 0xFFFE0000 == (token & 0xFFFE0000);
} }
@ -1069,7 +995,7 @@ void vshader_set_version(
This->baseShader.limits.constant_bool = 0; This->baseShader.limits.constant_bool = 0;
This->baseShader.limits.constant_int = 0; This->baseShader.limits.constant_int = 0;
This->baseShader.limits.address = 1; This->baseShader.limits.address = 1;
FIXME("Unrecognized vertex shader version %lu!\n", version); FIXME("Unrecognized vertex shader version %lx!\n", version);
} }
} }
@ -1821,7 +1747,8 @@ HRESULT WINAPI IWineD3DVertexShaderImpl_SetFunction(IWineD3DVertexShader *iface,
DWORD param = *(pToken + 1); DWORD param = *(pToken + 1);
parse_decl_usage(This, usage, param & D3DSP_REGNUM_MASK); parse_decl_usage(This, usage, param & D3DSP_REGNUM_MASK);
vshader_program_dump_decl_usage(This, usage, param); shader_program_dump_decl_usage(usage, param);
TRACE(" ");
vshader_program_dump_vs_param(param, 0); vshader_program_dump_vs_param(param, 0);
pToken += 2; pToken += 2;
len += 2; len += 2;

View File

@ -1275,6 +1275,10 @@ extern void shader_get_registers_used(
DWORD* tempsUsed, DWORD* tempsUsed,
DWORD* texUsed); DWORD* texUsed);
extern void shader_program_dump_decl_usage(
DWORD dcl,
DWORD param);
inline static int shader_get_regtype(const DWORD param) { inline static int shader_get_regtype(const DWORD param) {
return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) |
((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2)); ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2));