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
4f2c93e2
Commit
4f2c93e2
authored
Sep 25, 2012
by
Henri Verbeet
Committed by
Alexandre Julliard
Sep 25, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d3d10: Store shader variables in d3d10_effect_pass instead of d3d10_effect_object.
parent
2a83e1a5
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
80 deletions
+40
-80
d3d10_private.h
dlls/d3d10/d3d10_private.h
+3
-2
effect.c
dlls/d3d10/effect.c
+37
-78
No files found.
dlls/d3d10/d3d10_private.h
View file @
4f2c93e2
...
...
@@ -72,8 +72,6 @@ struct d3d10_effect_object
{
struct
d3d10_effect_pass
*
pass
;
enum
d3d10_effect_object_type
type
;
DWORD
index
;
void
*
data
;
union
{
ID3D10VertexShader
*
vs
;
...
...
@@ -168,6 +166,9 @@ struct d3d10_effect_pass
struct
d3d10_effect_object
*
objects
;
struct
d3d10_effect_variable
*
annotations
;
D3D10_PASS_SHADER_DESC
vs
;
D3D10_PASS_SHADER_DESC
ps
;
D3D10_PASS_SHADER_DESC
gs
;
UINT
stencil_ref
;
UINT
sample_mask
;
float
blend_factor
[
4
];
...
...
dlls/d3d10/effect.c
View file @
4f2c93e2
...
...
@@ -395,8 +395,9 @@ static HRESULT shader_chunk_handler(const char *data, DWORD data_size, DWORD tag
return
S_OK
;
}
static
HRESULT
parse_shader
(
struct
d3d10_effect_variable
*
v
,
const
char
*
data
)
static
HRESULT
parse_shader
(
ID3D10EffectVariable
*
variable
,
const
char
*
data
)
{
struct
d3d10_effect_variable
*
v
=
impl_from_ID3D10EffectVariable
(
variable
);
ID3D10Device
*
device
=
v
->
effect
->
device
;
struct
d3d10_effect_shader_variable
*
s
;
const
char
*
ptr
=
data
;
...
...
@@ -1214,18 +1215,20 @@ static BOOL parse_fx10_state_group(const char **ptr, const char *data,
static
HRESULT
parse_fx10_object
(
struct
d3d10_effect_object
*
o
,
const
char
**
ptr
,
const
char
*
data
)
{
ID3D10EffectVariable
*
variable
=
&
null_variable
.
ID3D10EffectVariable_iface
;
const
char
*
data_ptr
=
NULL
;
DWORD
offset
;
enum
d3d10_effect_object_operation
operation
;
HRESULT
hr
;
struct
d3d10_effect
*
effect
=
o
->
pass
->
technique
->
effect
;
ID3D10Effect
*
e
=
&
effect
->
ID3D10Effect_iface
;
DWORD
tmp
,
variable_idx
=
0
;
read_dword
(
ptr
,
&
o
->
type
);
TRACE
(
"Effect object is of type %#x.
\n
"
,
o
->
type
);
read_dword
(
ptr
,
&
o
->
index
);
TRACE
(
"Effect object index %#x.
\n
"
,
o
->
index
);
read_dword
(
ptr
,
&
tmp
);
TRACE
(
"Effect object index %#x.
\n
"
,
tmp
);
read_dword
(
ptr
,
&
operation
);
TRACE
(
"Effect object operation %#x.
\n
"
,
operation
);
...
...
@@ -1242,17 +1245,17 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
{
case
D3D10_EOT_VERTEXSHADER
:
TRACE
(
"Vertex shader
\n
"
);
o
->
data
=
&
anonymous_vs
;
variable
=
&
anonymous_vs
.
ID3D10EffectVariable_iface
;
break
;
case
D3D10_EOT_PIXELSHADER
:
TRACE
(
"Pixel shader
\n
"
);
o
->
data
=
&
anonymous_ps
;
variable
=
&
anonymous_ps
.
ID3D10EffectVariable_iface
;
break
;
case
D3D10_EOT_GEOMETRYSHADER
:
TRACE
(
"Geometry shader
\n
"
);
o
->
data
=
&
anonymous_gs
;
variable
=
&
anonymous_gs
.
ID3D10EffectVariable_iface
;
break
;
case
D3D10_EOT_STENCIL_REF
:
...
...
@@ -1289,17 +1292,17 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
/* This is a local object, we've parsed in parse_fx10_local_object. */
TRACE
(
"Variable name %s.
\n
"
,
debugstr_a
(
data
+
offset
));
o
->
data
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
variable
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
break
;
case
D3D10_EOO_PARSED_OBJECT_INDEX
:
/* This is a local object, we've parsed in parse_fx10_local_object, which has an array index. */
data_ptr
=
data
+
offset
;
read_dword
(
&
data_ptr
,
&
offset
);
read_dword
(
&
data_ptr
,
&
o
->
inde
x
);
TRACE
(
"Variable name %s[%u].
\n
"
,
debugstr_a
(
data
+
offset
),
o
->
inde
x
);
read_dword
(
&
data_ptr
,
&
variable_id
x
);
TRACE
(
"Variable name %s[%u].
\n
"
,
debugstr_a
(
data
+
offset
),
variable_id
x
);
o
->
data
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
variable
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
break
;
case
D3D10_EOO_ANONYMOUS_SHADER
:
...
...
@@ -1321,7 +1324,7 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
hr
=
parse_fx10_anonymous_shader
(
effect
,
&
effect
->
anonymous_shaders
[
effect
->
anonymous_shader_current
],
o
->
type
);
if
(
FAILED
(
hr
))
return
hr
;
o
->
data
=
&
effect
->
anonymous_shaders
[
effect
->
anonymous_shader_current
].
shader
;
variable
=
&
effect
->
anonymous_shaders
[
effect
->
anonymous_shader_current
].
shader
.
ID3D10EffectVariable_iface
;
++
effect
->
anonymous_shader_current
;
switch
(
o
->
type
)
...
...
@@ -1329,7 +1332,7 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
case
D3D10_EOT_VERTEXSHADER
:
case
D3D10_EOT_PIXELSHADER
:
case
D3D10_EOT_GEOMETRYSHADER
:
if
(
FAILED
(
hr
=
parse_shader
(
o
->
data
,
data_ptr
)))
if
(
FAILED
(
hr
=
parse_shader
(
variable
,
data_ptr
)))
return
hr
;
break
;
...
...
@@ -1348,28 +1351,31 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
{
case
D3D10_EOT_VERTEXSHADER
:
{
ID3D10EffectVariable
*
variable
=
o
->
data
;
ID3D10EffectShaderVariable
*
sv
=
variable
->
lpVtbl
->
AsShader
(
variable
);
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetVertexShader
(
sv
,
o
->
inde
x
,
&
o
->
object
.
vs
)))
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetVertexShader
(
sv
,
variable_id
x
,
&
o
->
object
.
vs
)))
return
hr
;
o
->
pass
->
vs
.
pShaderVariable
=
sv
;
o
->
pass
->
vs
.
ShaderIndex
=
variable_idx
;
break
;
}
case
D3D10_EOT_PIXELSHADER
:
{
ID3D10EffectVariable
*
variable
=
o
->
data
;
ID3D10EffectShaderVariable
*
sv
=
variable
->
lpVtbl
->
AsShader
(
variable
);
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetPixelShader
(
sv
,
o
->
inde
x
,
&
o
->
object
.
ps
)))
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetPixelShader
(
sv
,
variable_id
x
,
&
o
->
object
.
ps
)))
return
hr
;
o
->
pass
->
ps
.
pShaderVariable
=
sv
;
o
->
pass
->
ps
.
ShaderIndex
=
variable_idx
;
break
;
}
case
D3D10_EOT_GEOMETRYSHADER
:
{
ID3D10EffectVariable
*
variable
=
o
->
data
;
ID3D10EffectShaderVariable
*
sv
=
variable
->
lpVtbl
->
AsShader
(
variable
);
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetGeometryShader
(
sv
,
o
->
inde
x
,
&
o
->
object
.
gs
)))
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetGeometryShader
(
sv
,
variable_id
x
,
&
o
->
object
.
gs
)))
return
hr
;
o
->
pass
->
gs
.
pShaderVariable
=
sv
;
o
->
pass
->
gs
.
ShaderIndex
=
variable_idx
;
break
;
}
...
...
@@ -1436,6 +1442,10 @@ static HRESULT parse_fx10_pass(struct d3d10_effect_pass *p, const char **ptr, co
return
E_OUTOFMEMORY
;
}
p
->
vs
.
pShaderVariable
=
(
ID3D10EffectShaderVariable
*
)
&
null_shader_variable
.
ID3D10EffectVariable_iface
;
p
->
ps
.
pShaderVariable
=
(
ID3D10EffectShaderVariable
*
)
&
null_shader_variable
.
ID3D10EffectVariable_iface
;
p
->
gs
.
pShaderVariable
=
(
ID3D10EffectShaderVariable
*
)
&
null_shader_variable
.
ID3D10EffectVariable_iface
;
for
(
i
=
0
;
i
<
p
->
object_count
;
++
i
)
{
struct
d3d10_effect_object
*
o
=
&
p
->
objects
[
i
];
...
...
@@ -1619,7 +1629,7 @@ static HRESULT parse_fx10_local_variable(struct d3d10_effect_variable *v, const
read_dword
(
ptr
,
&
shader_offset
);
TRACE
(
"Shader offset: %#x.
\n
"
,
shader_offset
);
hr
=
parse_shader
(
var
,
data
+
shader_offset
);
hr
=
parse_shader
(
&
var
->
ID3D10EffectVariable_iface
,
data
+
shader_offset
);
if
(
FAILED
(
hr
))
return
hr
;
}
break
;
...
...
@@ -2892,7 +2902,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetDesc(ID3D10EffectPass *ifa
D3D10_PASS_DESC
*
desc
)
{
struct
d3d10_effect_pass
*
This
=
impl_from_ID3D10EffectPass
(
iface
);
unsigned
int
i
;
struct
d3d10_effect_shader_variable
*
s
;
FIXME
(
"iface %p, desc %p partial stub!
\n
"
,
iface
,
desc
);
...
...
@@ -2910,17 +2920,11 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetDesc(ID3D10EffectPass *ifa
memset
(
desc
,
0
,
sizeof
(
*
desc
));
desc
->
Name
=
This
->
name
;
for
(
i
=
0
;
i
<
This
->
object_count
;
++
i
)
if
((
s
=
impl_from_ID3D10EffectVariable
((
ID3D10EffectVariable
*
)
This
->
vs
.
pShaderVariable
)
->
data
))
{
struct
d3d10_effect_object
*
o
=
&
This
->
objects
[
i
];
if
(
o
->
type
==
D3D10_EOT_VERTEXSHADER
)
{
struct
d3d10_effect_variable
*
v
=
o
->
data
;
struct
d3d10_effect_shader_variable
*
s
=
v
->
data
;
desc
->
pIAInputSignature
=
(
BYTE
*
)
s
->
input_signature
.
signature
;
desc
->
IAInputSignatureSize
=
s
->
input_signature
.
signature_size
;
break
;
}
desc
->
pIAInputSignature
=
(
BYTE
*
)
s
->
input_signature
.
signature
;
desc
->
IAInputSignatureSize
=
s
->
input_signature
.
signature_size
;
}
desc
->
StencilRef
=
This
->
stencil_ref
;
...
...
@@ -2934,7 +2938,6 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetVertexShaderDesc(ID3D10Eff
D3D10_PASS_SHADER_DESC
*
desc
)
{
struct
d3d10_effect_pass
*
This
=
impl_from_ID3D10EffectPass
(
iface
);
unsigned
int
i
;
TRACE
(
"iface %p, desc %p
\n
"
,
iface
,
desc
);
...
...
@@ -2950,21 +2953,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetVertexShaderDesc(ID3D10Eff
return
E_INVALIDARG
;
}
for
(
i
=
0
;
i
<
This
->
object_count
;
++
i
)
{
struct
d3d10_effect_object
*
o
=
&
This
->
objects
[
i
];
if
(
o
->
type
==
D3D10_EOT_VERTEXSHADER
)
{
desc
->
pShaderVariable
=
o
->
data
;
desc
->
ShaderIndex
=
o
->
index
;
return
S_OK
;
}
}
TRACE
(
"Returning null_shader_variable
\n
"
);
desc
->
pShaderVariable
=
(
ID3D10EffectShaderVariable
*
)
&
null_shader_variable
;
desc
->
ShaderIndex
=
0
;
*
desc
=
This
->
vs
;
return
S_OK
;
}
...
...
@@ -2973,7 +2962,6 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetGeometryShaderDesc(ID3D10E
D3D10_PASS_SHADER_DESC
*
desc
)
{
struct
d3d10_effect_pass
*
This
=
impl_from_ID3D10EffectPass
(
iface
);
unsigned
int
i
;
TRACE
(
"iface %p, desc %p
\n
"
,
iface
,
desc
);
...
...
@@ -2989,21 +2977,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetGeometryShaderDesc(ID3D10E
return
E_INVALIDARG
;
}
for
(
i
=
0
;
i
<
This
->
object_count
;
++
i
)
{
struct
d3d10_effect_object
*
o
=
&
This
->
objects
[
i
];
if
(
o
->
type
==
D3D10_EOT_GEOMETRYSHADER
)
{
desc
->
pShaderVariable
=
o
->
data
;
desc
->
ShaderIndex
=
o
->
index
;
return
S_OK
;
}
}
TRACE
(
"Returning null_shader_variable
\n
"
);
desc
->
pShaderVariable
=
(
ID3D10EffectShaderVariable
*
)
&
null_shader_variable
;
desc
->
ShaderIndex
=
0
;
*
desc
=
This
->
gs
;
return
S_OK
;
}
...
...
@@ -3012,7 +2986,6 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetPixelShaderDesc(ID3D10Effe
D3D10_PASS_SHADER_DESC
*
desc
)
{
struct
d3d10_effect_pass
*
This
=
impl_from_ID3D10EffectPass
(
iface
);
unsigned
int
i
;
TRACE
(
"iface %p, desc %p
\n
"
,
iface
,
desc
);
...
...
@@ -3028,21 +3001,7 @@ static HRESULT STDMETHODCALLTYPE d3d10_effect_pass_GetPixelShaderDesc(ID3D10Effe
return
E_INVALIDARG
;
}
for
(
i
=
0
;
i
<
This
->
object_count
;
++
i
)
{
struct
d3d10_effect_object
*
o
=
&
This
->
objects
[
i
];
if
(
o
->
type
==
D3D10_EOT_PIXELSHADER
)
{
desc
->
pShaderVariable
=
o
->
data
;
desc
->
ShaderIndex
=
o
->
index
;
return
S_OK
;
}
}
TRACE
(
"Returning null_shader_variable
\n
"
);
desc
->
pShaderVariable
=
(
ID3D10EffectShaderVariable
*
)
&
null_shader_variable
;
desc
->
ShaderIndex
=
0
;
*
desc
=
This
->
ps
;
return
S_OK
;
}
...
...
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