Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Zsolt Vadász
wine
Commits
7b861b3c
Commit
7b861b3c
authored
18 years ago
by
Ivan Gyurdiev
Committed by
Alexandre Julliard
18 years ago
Browse files
Options
Downloads
Patches
Plain Diff
wined3d: Simplify input/output modifier line handling.
parent
cb973648
Loading
Loading
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
dlls/wined3d/pixelshader.c
+66
-99
66 additions, 99 deletions
dlls/wined3d/pixelshader.c
with
66 additions
and
99 deletions
dlls/wined3d/pixelshader.c
+
66
−
99
View file @
7b861b3c
...
@@ -805,7 +805,7 @@ inline static void get_write_mask(const DWORD output_reg, char *write_mask) {
...
@@ -805,7 +805,7 @@ inline static void get_write_mask(const DWORD output_reg, char *write_mask) {
}
}
}
}
inline
static
void
get_input_register_swizzle
(
const
DWORD
instr
,
char
*
swzstring
)
{
static
void
pshader_
get_input_register_swizzle
(
const
DWORD
instr
,
char
*
swzstring
)
{
static
const
char
swizzle_reg_chars
[]
=
"rgba"
;
static
const
char
swizzle_reg_chars
[]
=
"rgba"
;
DWORD
swizzle
=
(
instr
&
D3DSP_SWIZZLE_MASK
)
>>
D3DSP_SWIZZLE_SHIFT
;
DWORD
swizzle
=
(
instr
&
D3DSP_SWIZZLE_MASK
)
>>
D3DSP_SWIZZLE_SHIFT
;
DWORD
swizzle_x
=
swizzle
&
0x03
;
DWORD
swizzle_x
=
swizzle
&
0x03
;
...
@@ -851,15 +851,28 @@ static const char* shift_tab[] = {
...
@@ -851,15 +851,28 @@ static const char* shift_tab[] = {
"coefdiv.x"
/* 15 (d2) */
"coefdiv.x"
/* 15 (d2) */
};
};
inline
static
void
gen_output_modifier_line
(
int
saturate
,
char
*
write_mask
,
int
shift
,
char
*
regstr
,
char
*
line
)
{
inline
static
void
pshader_gen_output_modifier_line
(
SHADER_BUFFER
*
buffer
,
int
saturate
,
char
*
write_mask
,
int
shift
,
char
*
regstr
)
{
/* Generate a line that does the output modifier computation */
/* Generate a line that does the output modifier computation */
sprintf
(
line
,
"MUL%s %s%s, %s, %s;"
,
saturate
?
"_SAT"
:
""
,
regstr
,
write_mask
,
regstr
,
shift_tab
[
shift
]);
shader_addline
(
buffer
,
"MUL%s %s%s, %s, %s;
\n
"
,
saturate
?
"_SAT"
:
""
,
regstr
,
write_mask
,
regstr
,
shift_tab
[
shift
]);
}
}
inline
static
int
gen_input_modifier_line
(
const
DWORD
instr
,
int
tmpreg
,
char
*
outregstr
,
char
*
line
,
char
constants
[
WINED3D_PSHADER_MAX_CONSTANTS
])
{
static
void
pshader_gen_input_modifier_line
(
SHADER_BUFFER
*
buffer
,
const
DWORD
instr
,
int
tmpreg
,
char
*
outregstr
,
char
constants
[
WINED3D_PSHADER_MAX_CONSTANTS
])
{
/* Generate a line that does the input modifier computation and return the input register to use */
/* Generate a line that does the input modifier computation and return the input register to use */
static
char
regstr
[
256
];
char
regstr
[
256
];
static
char
tmpline
[
256
];
char
swzstr
[
20
];
int
insert_line
;
int
insert_line
;
/* Assume a new line will be added */
/* Assume a new line will be added */
...
@@ -867,60 +880,54 @@ inline static int gen_input_modifier_line(const DWORD instr, int tmpreg, char *o
...
@@ -867,60 +880,54 @@ inline static int gen_input_modifier_line(const DWORD instr, int tmpreg, char *o
/* Get register name */
/* Get register name */
get_register_name
(
instr
,
regstr
,
constants
);
get_register_name
(
instr
,
regstr
,
constants
);
pshader_get_input_register_swizzle
(
instr
,
swzstr
);
switch
(
instr
&
D3DSP_SRCMOD_MASK
)
{
switch
(
instr
&
D3DSP_SRCMOD_MASK
)
{
case
D3DSPSM_NONE
:
case
D3DSPSM_NONE
:
s
trcpy
(
outregstr
,
reg
str
);
s
printf
(
outregstr
,
"%s%s"
,
regstr
,
swz
str
);
insert_line
=
0
;
insert_line
=
0
;
break
;
break
;
case
D3DSPSM_NEG
:
case
D3DSPSM_NEG
:
sprintf
(
outregstr
,
"-%s"
,
regstr
);
sprintf
(
outregstr
,
"-%s
%s
"
,
regstr
,
swzstr
);
insert_line
=
0
;
insert_line
=
0
;
break
;
break
;
case
D3DSPSM_BIAS
:
case
D3DSPSM_BIAS
:
s
printf
(
line
,
"ADD T%c, %s, -coefdiv.x;"
,
'A'
+
tmpreg
,
regstr
);
s
hader_addline
(
buffer
,
"ADD T%c, %s, -coefdiv.x;
\n
"
,
'A'
+
tmpreg
,
regstr
);
break
;
break
;
case
D3DSPSM_BIASNEG
:
case
D3DSPSM_BIASNEG
:
s
printf
(
line
,
"ADD T%c, -%s, coefdiv.x;"
,
'A'
+
tmpreg
,
regstr
);
s
hader_addline
(
buffer
,
"ADD T%c, -%s, coefdiv.x;
\n
"
,
'A'
+
tmpreg
,
regstr
);
break
;
break
;
case
D3DSPSM_SIGN
:
case
D3DSPSM_SIGN
:
s
printf
(
line
,
"MAD T%c, %s, coefmul.x, -one.x;"
,
'A'
+
tmpreg
,
regstr
);
s
hader_addline
(
buffer
,
"MAD T%c, %s, coefmul.x, -one.x;
\n
"
,
'A'
+
tmpreg
,
regstr
);
break
;
break
;
case
D3DSPSM_SIGNNEG
:
case
D3DSPSM_SIGNNEG
:
s
printf
(
line
,
"MAD T%c, %s, -coefmul.x, one.x;"
,
'A'
+
tmpreg
,
regstr
);
s
hader_addline
(
buffer
,
"MAD T%c, %s, -coefmul.x, one.x;
\n
"
,
'A'
+
tmpreg
,
regstr
);
break
;
break
;
case
D3DSPSM_COMP
:
case
D3DSPSM_COMP
:
s
printf
(
line
,
"SUB T%c, one.x, %s;"
,
'A'
+
tmpreg
,
regstr
);
s
hader_addline
(
buffer
,
"SUB T%c, one.x, %s;
\n
"
,
'A'
+
tmpreg
,
regstr
);
break
;
break
;
case
D3DSPSM_X2
:
case
D3DSPSM_X2
:
s
printf
(
line
,
"ADD T%c, %s, %s;"
,
'A'
+
tmpreg
,
regstr
,
regstr
);
s
hader_addline
(
buffer
,
"ADD T%c, %s, %s;
\n
"
,
'A'
+
tmpreg
,
regstr
,
regstr
);
break
;
break
;
case
D3DSPSM_X2NEG
:
case
D3DSPSM_X2NEG
:
s
printf
(
line
,
"ADD T%c, -%s, -%s;"
,
'A'
+
tmpreg
,
regstr
,
regstr
);
s
hader_addline
(
buffer
,
"ADD T%c, -%s, -%s;
\n
"
,
'A'
+
tmpreg
,
regstr
,
regstr
);
break
;
break
;
case
D3DSPSM_DZ
:
case
D3DSPSM_DZ
:
sprintf
(
line
,
"RCP T%c, %s.z;"
,
'A'
+
tmpreg
,
regstr
);
shader_addline
(
buffer
,
"RCP T%c, %s.z;
\n
"
,
'A'
+
tmpreg
,
regstr
);
sprintf
(
tmpline
,
"MUL T%c, %s, T%c;"
,
'A'
+
tmpreg
,
regstr
,
'A'
+
tmpreg
);
shader_addline
(
buffer
,
"MUL T%c, %s, T%c;
\n
"
,
'A'
+
tmpreg
,
regstr
,
'A'
+
tmpreg
);
strcat
(
line
,
"
\n
"
);
/* Hack */
strcat
(
line
,
tmpline
);
break
;
break
;
case
D3DSPSM_DW
:
case
D3DSPSM_DW
:
sprintf
(
line
,
"RCP T%c, %s.w;"
,
'A'
+
tmpreg
,
regstr
);
shader_addline
(
buffer
,
"RCP T%c, %s.w;
\n
"
,
'A'
+
tmpreg
,
regstr
);
sprintf
(
tmpline
,
"MUL T%c, %s, T%c;"
,
'A'
+
tmpreg
,
regstr
,
'A'
+
tmpreg
);
shader_addline
(
buffer
,
"MUL T%c, %s, T%c;
\n
"
,
'A'
+
tmpreg
,
regstr
,
'A'
+
tmpreg
);
strcat
(
line
,
"
\n
"
);
/* Hack */
strcat
(
line
,
tmpline
);
break
;
break
;
default:
default:
s
trcpy
(
outregstr
,
reg
str
);
s
printf
(
outregstr
,
"%s%s"
,
regstr
,
swz
str
);
insert_line
=
0
;
insert_line
=
0
;
}
}
if
(
insert_line
)
{
/* Return modified or original register, with swizzle */
/* Substitute the register name */
if
(
insert_line
)
sprintf
(
outregstr
,
"T%c"
,
'A'
+
tmpreg
);
sprintf
(
outregstr
,
"T%c%s"
,
'A'
+
tmpreg
,
swzstr
);
}
return
insert_line
;
}
}
void
pshader_set_version
(
void
pshader_set_version
(
...
@@ -1020,16 +1027,11 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
...
@@ -1020,16 +1027,11 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
/* Generate input and output registers */
/* Generate input and output registers */
if
(
curOpcode
->
num_params
>
0
)
{
if
(
curOpcode
->
num_params
>
0
)
{
char
regs
[
5
][
50
];
char
operands
[
4
][
100
];
char
operands
[
4
][
100
];
char
swzstring
[
20
];
char
tmpOp
[
256
];
/* Generate lines that handle input modifier computation */
/* Generate input register names (with modifiers) */
for
(
i
=
1
;
i
<
curOpcode
->
num_params
;
++
i
)
{
for
(
i
=
1
;
i
<
curOpcode
->
num_params
;
++
i
)
if
(
gen_input_modifier_line
(
src
[
i
-
1
],
i
-
1
,
regs
[
i
-
1
],
tmpOp
,
This
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
src
[
i
-
1
],
i
-
1
,
operands
[
i
],
This
->
constants
);
shader_addline
(
buffer
,
tmpOp
);
}
/* Handle output register */
/* Handle output register */
get_register_name
(
dst
,
output_rname
,
This
->
constants
);
get_register_name
(
dst
,
output_rname
,
This
->
constants
);
...
@@ -1037,14 +1039,6 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
...
@@ -1037,14 +1039,6 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
get_write_mask
(
dst
,
output_wmask
);
get_write_mask
(
dst
,
output_wmask
);
strcat
(
operands
[
0
],
output_wmask
);
strcat
(
operands
[
0
],
output_wmask
);
/* This function works because of side effects from gen_input_modifier_line */
/* Handle input registers */
for
(
i
=
1
;
i
<
curOpcode
->
num_params
;
++
i
)
{
strcpy
(
operands
[
i
],
regs
[
i
-
1
]);
get_input_register_swizzle
(
src
[
i
-
1
],
swzstring
);
strcat
(
operands
[
i
],
swzstring
);
}
switch
(
curOpcode
->
opcode
)
{
switch
(
curOpcode
->
opcode
)
{
case
D3DSIO_CMP
:
case
D3DSIO_CMP
:
sprintf
(
tmpLine
,
"CMP%s %s, %s, %s, %s;
\n
"
,
(
saturate
?
"_SAT"
:
""
),
sprintf
(
tmpLine
,
"CMP%s %s, %s, %s, %s;
\n
"
,
(
saturate
?
"_SAT"
:
""
),
...
@@ -1070,10 +1064,8 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
...
@@ -1070,10 +1064,8 @@ void pshader_hw_map2gl(SHADER_OPCODE_ARG* arg) {
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
tmpLine
);
/* A shift requires another line. */
/* A shift requires another line. */
if
(
shift
!=
0
)
{
if
(
shift
!=
0
)
gen_output_modifier_line
(
saturate
,
output_wmask
,
shift
,
output_rname
,
tmpLine
);
pshader_gen_output_modifier_line
(
buffer
,
saturate
,
output_wmask
,
shift
,
output_rname
);
shader_addline
(
buffer
,
tmpLine
);
}
}
}
}
}
...
@@ -1085,10 +1077,8 @@ void pshader_hw_tex(SHADER_OPCODE_ARG* arg) {
...
@@ -1085,10 +1077,8 @@ void pshader_hw_tex(SHADER_OPCODE_ARG* arg) {
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
DWORD
version
=
This
->
baseShader
.
version
;
DWORD
version
=
This
->
baseShader
.
version
;
char
tmpLine
[
256
];
char
reg_dest
[
40
];
char
reg_dest
[
40
];
char
reg_coord
[
40
];
char
reg_coord
[
40
];
char
reg_coord_swz
[
20
]
=
""
;
DWORD
reg_dest_code
;
DWORD
reg_dest_code
;
DWORD
reg_sampler_code
;
DWORD
reg_sampler_code
;
...
@@ -1096,23 +1086,12 @@ void pshader_hw_tex(SHADER_OPCODE_ARG* arg) {
...
@@ -1096,23 +1086,12 @@ void pshader_hw_tex(SHADER_OPCODE_ARG* arg) {
reg_dest_code
=
dst
&
D3DSP_REGNUM_MASK
;
reg_dest_code
=
dst
&
D3DSP_REGNUM_MASK
;
get_register_name
(
dst
,
reg_dest
,
This
->
constants
);
get_register_name
(
dst
,
reg_dest
,
This
->
constants
);
/* 1.0-1.3: Use destination register as coordinate source. No modifiers.
/* 1.0-1.3: Use destination register as coordinate source.
1.4: Use provided coordinate source register. _dw, _dz, swizzle allowed.
2.0+: Use provided coordinate source register. */
2.0+: Use provided coordinate source register. No modifiers.
3.0+: Use provided coordinate source register. Swizzle allowed */
if
(
version
<
14
)
if
(
version
<
14
)
strcpy
(
reg_coord
,
reg_dest
);
strcpy
(
reg_coord
,
reg_dest
);
else
if
(
version
==
14
)
{
else
if
(
gen_input_modifier_line
(
src
[
0
],
0
,
reg_coord
,
tmpLine
,
This
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
src
[
0
],
0
,
reg_coord
,
This
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
get_input_register_swizzle
(
src
[
0
],
reg_coord_swz
);
}
else
if
(
version
>
14
&&
version
<
30
)
get_register_name
(
src
[
0
],
reg_coord
,
This
->
constants
);
else
if
(
version
>=
30
)
{
get_input_register_swizzle
(
src
[
0
],
reg_coord_swz
);
get_register_name
(
src
[
0
],
reg_coord
,
This
->
constants
);
}
/* 1.0-1.4: Use destination register number as texture code.
/* 1.0-1.4: Use destination register number as texture code.
2.0+: Use provided sampler number as texure code. */
2.0+: Use provided sampler number as texure code. */
...
@@ -1121,8 +1100,8 @@ void pshader_hw_tex(SHADER_OPCODE_ARG* arg) {
...
@@ -1121,8 +1100,8 @@ void pshader_hw_tex(SHADER_OPCODE_ARG* arg) {
else
else
reg_sampler_code
=
src
[
1
]
&
D3DSP_REGNUM_MASK
;
reg_sampler_code
=
src
[
1
]
&
D3DSP_REGNUM_MASK
;
shader_addline
(
buffer
,
"TEX %s,
%s
%s, texture[%lu], 2D;
\n
"
,
shader_addline
(
buffer
,
"TEX %s, %s, texture[%lu], 2D;
\n
"
,
reg_dest
,
reg_coord
,
reg_coord_swz
,
reg_sampler_code
);
reg_dest
,
reg_coord
,
reg_sampler_code
);
}
}
void
pshader_hw_texcoord
(
SHADER_OPCODE_ARG
*
arg
)
{
void
pshader_hw_texcoord
(
SHADER_OPCODE_ARG
*
arg
)
{
...
@@ -1200,12 +1179,10 @@ void pshader_hw_texm3x2pad(SHADER_OPCODE_ARG* arg) {
...
@@ -1200,12 +1179,10 @@ void pshader_hw_texm3x2pad(SHADER_OPCODE_ARG* arg) {
IWineD3DPixelShaderImpl
*
shader
=
(
IWineD3DPixelShaderImpl
*
)
arg
->
shader
;
IWineD3DPixelShaderImpl
*
shader
=
(
IWineD3DPixelShaderImpl
*
)
arg
->
shader
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
char
tmpLine
[
256
];
char
src0_name
[
50
];
char
buf
[
50
];
if
(
gen_input_modifier_line
(
arg
->
src
[
0
],
0
,
buf
,
tmpLine
,
shader
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
arg
->
src
[
0
],
0
,
src0_name
,
shader
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
"DP3 TMP.x, T%lu, %s;
\n
"
,
reg
,
src0_name
);
shader_addline
(
buffer
,
"DP3 TMP.x, T%lu, %s;
\n
"
,
reg
,
buf
);
}
}
void
pshader_hw_texm3x2tex
(
SHADER_OPCODE_ARG
*
arg
)
{
void
pshader_hw_texm3x2tex
(
SHADER_OPCODE_ARG
*
arg
)
{
...
@@ -1213,12 +1190,10 @@ void pshader_hw_texm3x2tex(SHADER_OPCODE_ARG* arg) {
...
@@ -1213,12 +1190,10 @@ void pshader_hw_texm3x2tex(SHADER_OPCODE_ARG* arg) {
IWineD3DPixelShaderImpl
*
shader
=
(
IWineD3DPixelShaderImpl
*
)
arg
->
shader
;
IWineD3DPixelShaderImpl
*
shader
=
(
IWineD3DPixelShaderImpl
*
)
arg
->
shader
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
char
tmpLine
[
256
];
char
src0_name
[
50
];
char
buf
[
50
];
if
(
gen_input_modifier_line
(
arg
->
src
[
0
],
0
,
buf
,
tmpLine
,
shader
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
arg
->
src
[
0
],
0
,
src0_name
,
shader
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
"DP3 TMP.y, T%lu, %s;
\n
"
,
reg
,
src0_name
);
shader_addline
(
buffer
,
"DP3 TMP.y, T%lu, %s;
\n
"
,
reg
,
buf
);
shader_addline
(
buffer
,
"TEX T%lu, TMP, texture[%lu], 2D;
\n
"
,
reg
,
reg
);
shader_addline
(
buffer
,
"TEX T%lu, TMP, texture[%lu], 2D;
\n
"
,
reg
,
reg
);
}
}
...
@@ -1228,12 +1203,10 @@ void pshader_hw_texm3x3pad(SHADER_OPCODE_ARG* arg) {
...
@@ -1228,12 +1203,10 @@ void pshader_hw_texm3x3pad(SHADER_OPCODE_ARG* arg) {
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
char
tmpLine
[
256
];
char
src0_name
[
50
];
char
buf
[
50
];
if
(
gen_input_modifier_line
(
arg
->
src
[
0
],
0
,
buf
,
tmpLine
,
shader
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
arg
->
src
[
0
],
0
,
src0_name
,
shader
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
"DP3 TMP.%c, T%lu, %s;
\n
"
,
'x'
+
current_state
.
current_row
,
reg
,
src0_name
);
shader_addline
(
buffer
,
"DP3 TMP.%c, T%lu, %s;
\n
"
,
'x'
+
current_state
.
current_row
,
reg
,
buf
);
current_state
.
texcoord_w
[
current_state
.
current_row
++
]
=
reg
;
current_state
.
texcoord_w
[
current_state
.
current_row
++
]
=
reg
;
}
}
...
@@ -1243,12 +1216,10 @@ void pshader_hw_texm3x3tex(SHADER_OPCODE_ARG* arg) {
...
@@ -1243,12 +1216,10 @@ void pshader_hw_texm3x3tex(SHADER_OPCODE_ARG* arg) {
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
char
tmpLine
[
256
];
char
src0_name
[
50
];
char
buf
[
50
];
if
(
gen_input_modifier_line
(
arg
->
src
[
0
],
0
,
buf
,
tmpLine
,
shader
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
arg
->
src
[
0
],
0
,
src0_name
,
shader
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
"DP3 TMP.z, T%lu, %s;
\n
"
,
reg
,
src0_name
);
shader_addline
(
buffer
,
"DP3 TMP.z, T%lu, %s;
\n
"
,
reg
,
buf
);
/* Cubemap textures will be more used than 3D ones. */
/* Cubemap textures will be more used than 3D ones. */
shader_addline
(
buffer
,
"TEX T%lu, TMP, texture[%lu], CUBE;
\n
"
,
reg
,
reg
);
shader_addline
(
buffer
,
"TEX T%lu, TMP, texture[%lu], CUBE;
\n
"
,
reg
,
reg
);
...
@@ -1261,12 +1232,10 @@ void pshader_hw_texm3x3vspec(SHADER_OPCODE_ARG* arg) {
...
@@ -1261,12 +1232,10 @@ void pshader_hw_texm3x3vspec(SHADER_OPCODE_ARG* arg) {
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
DWORD
reg
=
arg
->
dst
&
D3DSP_REGNUM_MASK
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
char
tmpLine
[
256
];
char
src0_name
[
50
];
char
buf
[
50
];
if
(
gen_input_modifier_line
(
arg
->
src
[
0
],
0
,
buf
,
tmpLine
,
shader
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
arg
->
src
[
0
],
0
,
src0_name
,
shader
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
"DP3 TMP.z, T%lu, %s;
\n
"
,
reg
,
src0_name
);
shader_addline
(
buffer
,
"DP3 TMP.z, T%lu, %s;
\n
"
,
reg
,
buf
);
/* Construct the eye-ray vector from w coordinates */
/* Construct the eye-ray vector from w coordinates */
shader_addline
(
buffer
,
"MOV TMP2.x, fragment.texcoord[%lu].w;
\n
"
,
current_state
.
texcoord_w
[
0
]);
shader_addline
(
buffer
,
"MOV TMP2.x, fragment.texcoord[%lu].w;
\n
"
,
current_state
.
texcoord_w
[
0
]);
...
@@ -1290,12 +1259,10 @@ void pshader_hw_texm3x3spec(SHADER_OPCODE_ARG* arg) {
...
@@ -1290,12 +1259,10 @@ void pshader_hw_texm3x3spec(SHADER_OPCODE_ARG* arg) {
DWORD
reg3
=
arg
->
src
[
1
]
&
D3DSP_REGNUM_MASK
;
DWORD
reg3
=
arg
->
src
[
1
]
&
D3DSP_REGNUM_MASK
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
SHADER_PARSE_STATE
current_state
=
shader
->
baseShader
.
parse_state
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
SHADER_BUFFER
*
buffer
=
arg
->
buffer
;
char
tmpLine
[
256
];
char
src0_name
[
50
];
char
buf
[
50
];
if
(
gen_input_modifier_line
(
arg
->
src
[
0
],
0
,
buf
,
tmpLine
,
shader
->
constants
))
pshader_gen_input_modifier_line
(
buffer
,
arg
->
src
[
0
],
0
,
src0_name
,
shader
->
constants
);
shader_addline
(
buffer
,
tmpLine
);
shader_addline
(
buffer
,
"DP3 TMP.z, T%lu, %s;
\n
"
,
reg
,
src0_name
);
shader_addline
(
buffer
,
"DP3 TMP.z, T%lu, %s;
\n
"
,
reg
,
buf
);
/* Calculate reflection vector (Assume normal is normalized): RF = 2*(N.E)*N -E */
/* Calculate reflection vector (Assume normal is normalized): RF = 2*(N.E)*N -E */
shader_addline
(
buffer
,
"DP3 TMP.w, TMP, C[%lu];
\n
"
,
reg3
);
shader_addline
(
buffer
,
"DP3 TMP.w, TMP, C[%lu];
\n
"
,
reg3
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment