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
5e072395
Commit
5e072395
authored
May 01, 2009
by
Henri Verbeet
Committed by
Alexandre Julliard
May 01, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Avoid using WINED3DSP_REGNUM_MASK in the def/defi/defb handlers.
parent
a605fcd2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
33 deletions
+53
-33
baseshader.c
dlls/wined3d/baseshader.c
+53
-33
No files found.
dlls/wined3d/baseshader.c
View file @
5e072395
...
...
@@ -468,17 +468,6 @@ void shader_init(struct IWineD3DBaseShaderClass *shader,
list_init
(
&
shader
->
linked_programs
);
}
static
inline
WINED3DSHADER_PARAM_REGISTER_TYPE
shader_get_regtype
(
DWORD
param
)
{
return
((
param
&
WINED3DSP_REGTYPE_MASK
)
>>
WINED3DSP_REGTYPE_SHIFT
)
|
((
param
&
WINED3DSP_REGTYPE_MASK2
)
>>
WINED3DSP_REGTYPE_SHIFT2
);
}
static
inline
DWORD
shader_get_writemask
(
DWORD
param
)
{
return
param
&
WINED3DSP_WRITEMASK_ALL
;
}
/* Convert floating point offset relative
* to a register file to an absolute offset for float constants */
static
unsigned
int
shader_get_float_offset
(
WINED3DSHADER_PARAM_REGISTER_TYPE
register_type
,
UINT
register_idx
)
...
...
@@ -671,10 +660,17 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, struct shader_reg_m
}
else
if
(
ins
.
handler_idx
==
WINED3DSIH_DEF
)
{
struct
wined3d_shader_dst_param
dst
;
struct
wined3d_shader_src_param
rel_addr
;
local_constant
*
lconst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
local_constant
));
if
(
!
lconst
)
return
E_OUTOFMEMORY
;
lconst
->
idx
=
*
pToken
&
WINED3DSP_REGNUM_MASK
;
memcpy
(
lconst
->
value
,
pToken
+
1
,
4
*
sizeof
(
DWORD
));
shader_sm1_read_dst_param
(
&
pToken
,
&
dst
,
&
rel_addr
,
shader_version
);
lconst
->
idx
=
dst
.
register_idx
;
memcpy
(
lconst
->
value
,
pToken
,
4
*
sizeof
(
DWORD
));
pToken
+=
4
;
/* In pixel shader 1.X shaders, the constants are clamped between [-1;1] */
if
(
WINED3DSHADER_VERSION_MAJOR
(
shader_version
)
==
1
&&
pshader
)
...
...
@@ -691,25 +687,38 @@ HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, struct shader_reg_m
}
list_add_head
(
&
This
->
baseShader
.
constantsF
,
&
lconst
->
entry
);
pToken
+=
param_size
;
}
else
if
(
ins
.
handler_idx
==
WINED3DSIH_DEFI
)
{
struct
wined3d_shader_dst_param
dst
;
struct
wined3d_shader_src_param
rel_addr
;
local_constant
*
lconst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
local_constant
));
if
(
!
lconst
)
return
E_OUTOFMEMORY
;
lconst
->
idx
=
*
pToken
&
WINED3DSP_REGNUM_MASK
;
memcpy
(
lconst
->
value
,
pToken
+
1
,
4
*
sizeof
(
DWORD
));
shader_sm1_read_dst_param
(
&
pToken
,
&
dst
,
&
rel_addr
,
shader_version
);
lconst
->
idx
=
dst
.
register_idx
;
memcpy
(
lconst
->
value
,
pToken
,
4
*
sizeof
(
DWORD
));
pToken
+=
4
;
list_add_head
(
&
This
->
baseShader
.
constantsI
,
&
lconst
->
entry
);
pToken
+=
param_size
;
}
else
if
(
ins
.
handler_idx
==
WINED3DSIH_DEFB
)
{
struct
wined3d_shader_dst_param
dst
;
struct
wined3d_shader_src_param
rel_addr
;
local_constant
*
lconst
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
local_constant
));
if
(
!
lconst
)
return
E_OUTOFMEMORY
;
lconst
->
idx
=
*
pToken
&
WINED3DSP_REGNUM_MASK
;
memcpy
(
lconst
->
value
,
pToken
+
1
,
1
*
sizeof
(
DWORD
));
shader_sm1_read_dst_param
(
&
pToken
,
&
dst
,
&
rel_addr
,
shader_version
);
lconst
->
idx
=
dst
.
register_idx
;
memcpy
(
lconst
->
value
,
pToken
,
sizeof
(
DWORD
));
++
pToken
;
list_add_head
(
&
This
->
baseShader
.
constantsB
,
&
lconst
->
entry
);
pToken
+=
param_size
;
}
/* If there's a loop in the shader */
else
if
(
ins
.
handler_idx
==
WINED3DSIH_LOOP
...
...
@@ -1279,30 +1288,41 @@ void shader_trace_init(const DWORD *pFunction, const SHADER_OPCODE *opcode_table
}
else
if
(
ins
.
handler_idx
==
WINED3DSIH_DEF
)
{
unsigned
int
offset
=
shader_get_float_offset
(
shader_get_regtype
(
*
pToken
),
*
pToken
&
WINED3DSP_REGNUM_MASK
);
struct
wined3d_shader_dst_param
dst
;
struct
wined3d_shader_src_param
rel_addr
;
shader_sm1_read_dst_param
(
&
pToken
,
&
dst
,
&
rel_addr
,
shader_version
);
TRACE
(
"def c%u = %f, %f, %f, %f"
,
offset
,
TRACE
(
"def c%u = %f, %f, %f, %f"
,
shader_get_float_offset
(
dst
.
register_type
,
dst
.
register_idx
),
*
(
const
float
*
)(
pToken
),
*
(
const
float
*
)(
pToken
+
1
),
*
(
const
float
*
)(
pToken
+
2
),
*
(
const
float
*
)(
pToken
+
3
),
*
(
const
float
*
)(
pToken
+
4
));
pToken
+=
5
;
*
(
const
float
*
)(
pToken
+
3
));
pToken
+=
4
;
}
else
if
(
ins
.
handler_idx
==
WINED3DSIH_DEFI
)
{
TRACE
(
"defi i%u = %d, %d, %d, %d"
,
*
pToken
&
WINED3DSP_REGNUM_MASK
,
struct
wined3d_shader_dst_param
dst
;
struct
wined3d_shader_src_param
rel_addr
;
shader_sm1_read_dst_param
(
&
pToken
,
&
dst
,
&
rel_addr
,
shader_version
);
TRACE
(
"defi i%u = %d, %d, %d, %d"
,
dst
.
register_idx
,
*
(
pToken
),
*
(
pToken
+
1
),
*
(
pToken
+
2
),
*
(
pToken
+
3
),
*
(
pToken
+
4
));
pToken
+=
5
;
*
(
pToken
+
3
));
pToken
+=
4
;
}
else
if
(
ins
.
handler_idx
==
WINED3DSIH_DEFB
)
{
TRACE
(
"defb b%u = %s"
,
*
pToken
&
WINED3DSP_REGNUM_MASK
,
*
(
pToken
+
1
)
?
"true"
:
"false"
);
pToken
+=
2
;
struct
wined3d_shader_dst_param
dst
;
struct
wined3d_shader_src_param
rel_addr
;
shader_sm1_read_dst_param
(
&
pToken
,
&
dst
,
&
rel_addr
,
shader_version
);
TRACE
(
"defb b%u = %s"
,
dst
.
register_idx
,
*
pToken
?
"true"
:
"false"
);
++
pToken
;
}
else
{
...
...
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