Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
bd682370
Commit
bd682370
authored
Mar 29, 2008
by
Stefan Dösinger
Committed by
Alexandre Julliard
Apr 02, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Implement TSSARGTEMP with register combiners.
parent
0f1c2370
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
23 deletions
+31
-23
baseshader.c
dlls/wined3d/baseshader.c
+4
-2
state.c
dlls/wined3d/state.c
+0
-0
utils.c
dlls/wined3d/utils.c
+26
-20
wined3d_private.h
dlls/wined3d/wined3d_private.h
+1
-1
No files found.
dlls/wined3d/baseshader.c
View file @
bd682370
...
...
@@ -1170,10 +1170,12 @@ static void shader_none_get_caps(WINED3DDEVTYPE devtype, WineD3D_GL_Info *gl_inf
pCaps
->
PixelShaderVersion
=
0
;
pCaps
->
PixelShader1xMaxValue
=
0
.
0
;
if
(
GL_SUPPORT
(
NV_REGISTER_COMBINERS
))
{
pCaps
->
PrimitiveMiscCaps
|=
WINED3DPMISCCAPS_TSSARGTEMP
;
}
/* The caps below can be supported but aren't handled yet in utils.c 'd3dta_to_combiner_input', disable them until support is fixed */
#if 0
if (GL_SUPPORT(NV_REGISTER_COMBINERS))
pCaps->PrimitiveMiscCaps |= WINED3DPMISCCAPS_TSSARGTEMP;
if (GL_SUPPORT(NV_REGISTER_COMBINERS2))
pCaps->PrimitiveMiscCaps |= WINED3DPMISCCAPS_PERSTAGECONSTANT;
#endif
...
...
dlls/wined3d/state.c
View file @
bd682370
This diff is collapsed.
Click to expand it.
dlls/wined3d/utils.c
View file @
bd682370
...
...
@@ -1125,8 +1125,6 @@ static GLenum d3dta_to_combiner_input(DWORD d3dta, DWORD stage, INT texture_idx)
return
GL_SECONDARY_COLOR_NV
;
case
WINED3DTA_TEMP
:
/* TODO: Support WINED3DTSS_RESULTARG */
FIXME
(
"WINED3DTA_TEMP, not properly supported.
\n
"
);
return
GL_SPARE1_NV
;
case
WINED3DTA_CONSTANT
:
...
...
@@ -1182,11 +1180,12 @@ static BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, WINED3DTEXTUREOP
return
FALSE
;
}
void
set_tex_op_nvrc
(
IWineD3DDevice
*
iface
,
BOOL
is_alpha
,
int
stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
,
INT
texture_idx
)
{
void
set_tex_op_nvrc
(
IWineD3DDevice
*
iface
,
BOOL
is_alpha
,
int
stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
,
INT
texture_idx
,
DWORD
dst
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
tex_op_args
tex_op_args
=
{{
0
},
{
0
},
{
0
}};
GLenum
portion
=
is_alpha
?
GL_ALPHA
:
GL_RGB
;
GLenum
target
=
GL_COMBINER0_NV
+
stage
;
GLenum
output
;
TRACE
(
"stage %d, is_alpha %d, op %s, arg1 %#x, arg2 %#x, arg3 %#x, texture_idx %d
\n
"
,
stage
,
is_alpha
,
debug_d3dtop
(
op
),
arg1
,
arg2
,
arg3
,
texture_idx
);
...
...
@@ -1206,6 +1205,12 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
&
tex_op_args
.
mapping
[
2
],
&
tex_op_args
.
component_usage
[
2
],
texture_idx
);
if
(
dst
==
WINED3DTA_TEMP
)
{
output
=
GL_SPARE1_NV
;
}
else
{
output
=
GL_SPARE0_NV
;
}
/* This is called by a state handler which has the gl lock held and a context for the thread */
switch
(
op
)
{
...
...
@@ -1237,7 +1242,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
GL_ZERO
,
GL_UNSIGNED_INVERT_NV
,
portion
));
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_SPARE0_NV
,
GL_DISCARD_NV
,
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
output
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
...
...
@@ -1252,13 +1257,13 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
if
(
op
==
WINED3DTOP_MODULATE
)
{
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_SPARE0_NV
,
GL_DISCARD_NV
,
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
output
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
}
else
if
(
op
==
WINED3DTOP_MODULATE2X
)
{
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_SPARE0_NV
,
GL_DISCARD_NV
,
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
output
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SCALE_BY_TWO_NV
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
}
else
if
(
op
==
WINED3DTOP_MODULATE4X
)
{
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_SPARE0_NV
,
GL_DISCARD_NV
,
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
output
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SCALE_BY_FOUR_NV
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
}
break
;
...
...
@@ -1279,13 +1284,13 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
if
(
op
==
WINED3DTOP_ADD
)
{
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
}
else
if
(
op
==
WINED3DTOP_ADDSIGNED
)
{
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
}
else
if
(
op
==
WINED3DTOP_ADDSIGNED2X
)
{
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_SCALE_BY_TWO_NV
,
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_SCALE_BY_TWO_NV
,
GL_BIAS_BY_NEGATIVE_ONE_HALF_NV
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
}
break
;
...
...
@@ -1302,7 +1307,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_ADDSMOOTH
:
...
...
@@ -1318,7 +1323,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_BLENDDIFFUSEALPHA
:
...
...
@@ -1353,7 +1358,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
}
...
...
@@ -1371,7 +1376,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_MODULATECOLOR_ADDALPHA
:
...
...
@@ -1388,7 +1393,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_MODULATEINVALPHA_ADDCOLOR
:
...
...
@@ -1405,7 +1410,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_MODULATEINVCOLOR_ADDALPHA
:
...
...
@@ -1422,7 +1427,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_DOTPRODUCT3
:
...
...
@@ -1434,7 +1439,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
tex_op_args
.
input
[
1
],
GL_EXPAND_NORMAL_NV
,
tex_op_args
.
component_usage
[
1
]));
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_SPARE0_NV
,
GL_DISCARD_NV
,
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
output
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_NONE
,
GL_NONE
,
GL_TRUE
,
GL_FALSE
,
GL_FALSE
));
break
;
...
...
@@ -1451,7 +1456,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_LERP
:
...
...
@@ -1467,7 +1472,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
/* Output */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_SPARE0_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
output
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
case
WINED3DTOP_BUMPENVMAPLUMINANCE
:
...
...
@@ -1482,6 +1487,7 @@ void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEX
tex_op_args
.
input
[
1
],
tex_op_args
.
mapping
[
1
],
tex_op_args
.
component_usage
[
1
]));
GL_EXTCALL
(
glCombinerInputNV
(
target
,
portion
,
GL_VARIABLE_B_NV
,
GL_ZERO
,
GL_UNSIGNED_INVERT_NV
,
portion
));
/* Always pass through to CURRENT, ignore temp arg */
GL_EXTCALL
(
glCombinerOutputNV
(
target
,
portion
,
GL_SPARE0_NV
,
GL_DISCARD_NV
,
GL_DISCARD_NV
,
GL_NONE
,
GL_NONE
,
GL_FALSE
,
GL_FALSE
,
GL_FALSE
));
break
;
...
...
dlls/wined3d/wined3d_private.h
View file @
bd682370
...
...
@@ -1723,7 +1723,7 @@ const char *debug_d3ddegree(WINED3DDEGREETYPE order);
GLenum
StencilOp
(
DWORD
op
);
GLenum
CompareFunc
(
DWORD
func
);
void
set_tex_op
(
IWineD3DDevice
*
iface
,
BOOL
isAlpha
,
int
Stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
);
void
set_tex_op_nvrc
(
IWineD3DDevice
*
iface
,
BOOL
is_alpha
,
int
stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
,
INT
texture_idx
);
void
set_tex_op_nvrc
(
IWineD3DDevice
*
iface
,
BOOL
is_alpha
,
int
stage
,
WINED3DTEXTUREOP
op
,
DWORD
arg1
,
DWORD
arg2
,
DWORD
arg3
,
INT
texture_idx
,
DWORD
dst
);
void
set_texture_matrix
(
const
float
*
smat
,
DWORD
flags
,
BOOL
calculatedCoords
,
BOOL
transformed
,
DWORD
coordtype
);
void
surface_set_compatible_renderbuffer
(
IWineD3DSurface
*
iface
,
unsigned
int
width
,
unsigned
int
height
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment