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
57d1548b
Commit
57d1548b
authored
Nov 28, 2007
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Add printf format checking to the shader_addline function and fix resulting warnings.
parent
218de935
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
28 additions
and
22 deletions
+28
-22
arb_program_shader.c
dlls/wined3d/arb_program_shader.c
+4
-4
glsl_shader.c
dlls/wined3d/glsl_shader.c
+17
-17
wined3d_private.h
dlls/wined3d/wined3d_private.h
+7
-1
No files found.
dlls/wined3d/arb_program_shader.c
View file @
57d1548b
...
...
@@ -1020,8 +1020,8 @@ void pshader_hw_texkill(SHADER_OPCODE_ARG* arg) {
* copy the register into our general purpose TMP variable, overwrite .w and pass TMP to KIL
*/
shader_addline
(
buffer
,
"MOV TMP, %s;
\n
"
,
reg_dest
);
shader_addline
(
buffer
,
"MOV TMP.w, one.w;
\n
"
,
reg_dest
);
shader_addline
(
buffer
,
"KIL TMP;
\n
"
,
reg_dest
);
shader_addline
(
buffer
,
"MOV TMP.w, one.w;
\n
"
);
shader_addline
(
buffer
,
"KIL TMP;
\n
"
);
}
}
...
...
@@ -1374,8 +1374,8 @@ void pshader_hw_texdepth(SHADER_OPCODE_ARG* arg) {
*/
shader_addline
(
buffer
,
"RCP %s.g, %s.g;
\n
"
,
dst_name
,
dst_name
);
shader_addline
(
buffer
,
"MUL TMP.x, %s.r, %s.g;
\n
"
,
dst_name
,
dst_name
);
shader_addline
(
buffer
,
"MIN TMP.x, TMP.x, one.r;
\n
"
,
dst_name
,
dst_name
);
shader_addline
(
buffer
,
"MAX result.depth, TMP.x, 0.0;
\n
"
,
dst_name
,
dst_name
);
shader_addline
(
buffer
,
"MIN TMP.x, TMP.x, one.r;
\n
"
);
shader_addline
(
buffer
,
"MAX result.depth, TMP.x, 0.0;
\n
"
);
}
/** Process the WINED3DSIO_TEXDP3TEX instruction in ARB:
...
...
dlls/wined3d/glsl_shader.c
View file @
57d1548b
...
...
@@ -478,7 +478,7 @@ void shader_generate_glsl_declarations(
/* Prototype the subroutines */
for
(
i
=
0
;
i
<
This
->
baseShader
.
limits
.
label
;
i
++
)
{
if
(
reg_maps
->
labels
[
i
])
shader_addline
(
buffer
,
"void subroutine%
l
u();
\n
"
,
i
);
shader_addline
(
buffer
,
"void subroutine%u();
\n
"
,
i
);
}
/* Declare the constants (aka uniforms) */
...
...
@@ -573,19 +573,19 @@ void shader_generate_glsl_declarations(
switch
(
stype
)
{
case
WINED3DSTT_1D
:
shader_addline
(
buffer
,
"uniform sampler1D %csampler%
l
u;
\n
"
,
prefix
,
i
);
shader_addline
(
buffer
,
"uniform sampler1D %csampler%u;
\n
"
,
prefix
,
i
);
break
;
case
WINED3DSTT_2D
:
shader_addline
(
buffer
,
"uniform sampler2D %csampler%
l
u;
\n
"
,
prefix
,
i
);
shader_addline
(
buffer
,
"uniform sampler2D %csampler%u;
\n
"
,
prefix
,
i
);
break
;
case
WINED3DSTT_CUBE
:
shader_addline
(
buffer
,
"uniform samplerCube %csampler%
l
u;
\n
"
,
prefix
,
i
);
shader_addline
(
buffer
,
"uniform samplerCube %csampler%u;
\n
"
,
prefix
,
i
);
break
;
case
WINED3DSTT_VOLUME
:
shader_addline
(
buffer
,
"uniform sampler3D %csampler%
l
u;
\n
"
,
prefix
,
i
);
shader_addline
(
buffer
,
"uniform sampler3D %csampler%u;
\n
"
,
prefix
,
i
);
break
;
default:
shader_addline
(
buffer
,
"uniform unsupported_sampler %csampler%
l
u;
\n
"
,
prefix
,
i
);
shader_addline
(
buffer
,
"uniform unsupported_sampler %csampler%u;
\n
"
,
prefix
,
i
);
FIXME
(
"Unrecognized sampler type: %#x
\n
"
,
stype
);
break
;
}
...
...
@@ -601,7 +601,7 @@ void shader_generate_glsl_declarations(
/* Declare texture coordinate temporaries and initialize them */
for
(
i
=
0
;
i
<
This
->
baseShader
.
limits
.
texcoord
;
i
++
)
{
if
(
reg_maps
->
texcoord
[
i
])
shader_addline
(
buffer
,
"vec4 T%
lu = gl_TexCoord[%l
u];
\n
"
,
i
,
i
);
shader_addline
(
buffer
,
"vec4 T%
u = gl_TexCoord[%
u];
\n
"
,
i
,
i
);
}
/* Declare input register varyings. Only pixel shader, vertex shaders have that declared in the
...
...
@@ -609,25 +609,25 @@ void shader_generate_glsl_declarations(
*/
if
(
pshader
&&
This
->
baseShader
.
hex_version
>=
WINED3DVS_VERSION
(
3
,
0
))
{
if
(
use_vs
(
device
))
{
shader_addline
(
buffer
,
"varying vec4 IN[%
l
u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
shader_addline
(
buffer
,
"varying vec4 IN[%u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
}
else
{
/* TODO: Write a replacement shader for the fixed function vertex pipeline, so this isn't needed.
* For fixed function vertex processing + 3.0 pixel shader we need a separate function in the
* pixel shader that reads the fixed function color into the packed input registers.
*/
shader_addline
(
buffer
,
"vec4 IN[%
l
u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
shader_addline
(
buffer
,
"vec4 IN[%u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
}
}
/* Declare output register temporaries */
if
(
This
->
baseShader
.
limits
.
packed_output
)
{
shader_addline
(
buffer
,
"vec4 OUT[%
l
u];
\n
"
,
This
->
baseShader
.
limits
.
packed_output
);
shader_addline
(
buffer
,
"vec4 OUT[%u];
\n
"
,
This
->
baseShader
.
limits
.
packed_output
);
}
/* Declare temporary variables */
for
(
i
=
0
;
i
<
This
->
baseShader
.
limits
.
temporary
;
i
++
)
{
if
(
reg_maps
->
temporary
[
i
])
shader_addline
(
buffer
,
"vec4 R%
l
u;
\n
"
,
i
);
shader_addline
(
buffer
,
"vec4 R%u;
\n
"
,
i
);
}
/* Declare attributes */
...
...
@@ -2009,12 +2009,12 @@ void shader_glsl_label(SHADER_OPCODE_ARG* arg) {
DWORD
snum
=
(
arg
->
src
[
0
])
&
WINED3DSP_REGNUM_MASK
;
shader_addline
(
arg
->
buffer
,
"}
\n
"
);
shader_addline
(
arg
->
buffer
,
"void subroutine%
l
u () {
\n
"
,
snum
);
shader_addline
(
arg
->
buffer
,
"void subroutine%u () {
\n
"
,
snum
);
}
void
shader_glsl_call
(
SHADER_OPCODE_ARG
*
arg
)
{
DWORD
snum
=
(
arg
->
src
[
0
])
&
WINED3DSP_REGNUM_MASK
;
shader_addline
(
arg
->
buffer
,
"subroutine%
l
u();
\n
"
,
snum
);
shader_addline
(
arg
->
buffer
,
"subroutine%u();
\n
"
,
snum
);
}
void
shader_glsl_callnz
(
SHADER_OPCODE_ARG
*
arg
)
{
...
...
@@ -2022,7 +2022,7 @@ void shader_glsl_callnz(SHADER_OPCODE_ARG* arg) {
DWORD
snum
=
(
arg
->
src
[
0
])
&
WINED3DSP_REGNUM_MASK
;
shader_glsl_add_src_param
(
arg
,
arg
->
src
[
1
],
arg
->
src_addr
[
1
],
WINED3DSP_WRITEMASK_0
,
&
src1_param
);
shader_addline
(
arg
->
buffer
,
"if (%s) subroutine%
l
u();
\n
"
,
src1_param
.
param_str
,
snum
);
shader_addline
(
arg
->
buffer
,
"if (%s) subroutine%u();
\n
"
,
src1_param
.
param_str
,
snum
);
}
/*********************************************
...
...
@@ -2273,7 +2273,7 @@ void pshader_glsl_texdepth(SHADER_OPCODE_ARG* arg) {
* too is irrelevant, since if x = 0, any y value < 1.0 (and > 1.0 is not allowed) results in a result
* >= 1.0 or < 0.0
*/
shader_addline
(
arg
->
buffer
,
"gl_FragDepth = clamp((%s.x / min(%s.y, 1.0)), 0.0, 1.0);
\n
"
,
dst_param
.
reg_name
,
dst_param
.
reg_name
,
dst_param
.
reg_name
);
shader_addline
(
arg
->
buffer
,
"gl_FragDepth = clamp((%s.x / min(%s.y, 1.0)), 0.0, 1.0);
\n
"
,
dst_param
.
reg_name
,
dst_param
.
reg_name
);
}
/** Process the WINED3DSIO_TEXM3X2DEPTH instruction in GLSL:
...
...
@@ -2901,7 +2901,7 @@ static GLhandleARB generate_param_reorder_function(IWineD3DVertexShader *vertexs
semantics_in
=
ps
->
semantics_in
;
/* This one is tricky: a 3.0 pixel shader reads from a 3.0 vertex shader */
shader_addline
(
&
buffer
,
"varying vec4 IN[%
l
u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
shader_addline
(
&
buffer
,
"varying vec4 IN[%u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
shader_addline
(
&
buffer
,
"void order_ps_input(in vec4 OUT[%u]) {
\n
"
,
MAX_REG_OUTPUT
);
/* First, sort out position and point size. Those are not passed to the pixel shader */
...
...
@@ -2935,7 +2935,7 @@ static GLhandleARB generate_param_reorder_function(IWineD3DVertexShader *vertexs
}
else
if
(
ps_major
>=
3
&&
vs_major
<
3
)
{
semantics_in
=
ps
->
semantics_in
;
shader_addline
(
&
buffer
,
"varying vec4 IN[%
l
u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
shader_addline
(
&
buffer
,
"varying vec4 IN[%u];
\n
"
,
GL_LIMITS
(
glsl_varyings
)
/
4
);
shader_addline
(
&
buffer
,
"void order_ps_input() {
\n
"
);
/* The vertex shader wrote to the builtin varyings. There is no need to figure out position and
* point size, but we depend on the optimizers kindness to find out that the pixel shader doesn't
...
...
dlls/wined3d/wined3d_private.h
View file @
57d1548b
...
...
@@ -1745,11 +1745,17 @@ typedef struct SHADER_PARSE_STATE {
DWORD
texcoord_w
[
2
];
}
SHADER_PARSE_STATE
;
#ifdef __GNUC__
#define PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
#else
#define PRINTF_ATTR(fmt,args)
#endif
/* Base Shader utility functions.
* (may move callers into the same file in the future) */
extern
int
shader_addline
(
SHADER_BUFFER
*
buffer
,
const
char
*
fmt
,
...);
const
char
*
fmt
,
...)
PRINTF_ATTR
(
2
,
3
)
;
extern
const
SHADER_OPCODE
*
shader_get_opcode
(
IWineD3DBaseShader
*
iface
,
...
...
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