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
2a83e1a5
Commit
2a83e1a5
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 shaders directly in d3d10_effect_object.
parent
42db7e4c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
92 additions
and
32 deletions
+92
-32
d3d10_private.h
dlls/d3d10/d3d10_private.h
+9
-0
effect.c
dlls/d3d10/effect.c
+83
-32
No files found.
dlls/d3d10/d3d10_private.h
View file @
2a83e1a5
...
@@ -49,6 +49,9 @@ void d3d10_rb_free(void *ptr) DECLSPEC_HIDDEN;
...
@@ -49,6 +49,9 @@ void d3d10_rb_free(void *ptr) DECLSPEC_HIDDEN;
enum
d3d10_effect_object_type
enum
d3d10_effect_object_type
{
{
D3D10_EOT_RASTERIZER_STATE
=
0x0
,
D3D10_EOT_DEPTH_STENCIL_STATE
=
0x1
,
D3D10_EOT_BLEND_STATE
=
0x2
,
D3D10_EOT_VERTEXSHADER
=
0x6
,
D3D10_EOT_VERTEXSHADER
=
0x6
,
D3D10_EOT_PIXELSHADER
=
0x7
,
D3D10_EOT_PIXELSHADER
=
0x7
,
D3D10_EOT_GEOMETRYSHADER
=
0x8
,
D3D10_EOT_GEOMETRYSHADER
=
0x8
,
...
@@ -71,6 +74,12 @@ struct d3d10_effect_object
...
@@ -71,6 +74,12 @@ struct d3d10_effect_object
enum
d3d10_effect_object_type
type
;
enum
d3d10_effect_object_type
type
;
DWORD
index
;
DWORD
index
;
void
*
data
;
void
*
data
;
union
{
ID3D10VertexShader
*
vs
;
ID3D10PixelShader
*
ps
;
ID3D10GeometryShader
*
gs
;
}
object
;
};
};
struct
d3d10_effect_shader_signature
struct
d3d10_effect_shader_signature
...
...
dlls/d3d10/effect.c
View file @
2a83e1a5
...
@@ -1243,19 +1243,16 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1243,19 +1243,16 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
case
D3D10_EOT_VERTEXSHADER
:
case
D3D10_EOT_VERTEXSHADER
:
TRACE
(
"Vertex shader
\n
"
);
TRACE
(
"Vertex shader
\n
"
);
o
->
data
=
&
anonymous_vs
;
o
->
data
=
&
anonymous_vs
;
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOT_PIXELSHADER
:
case
D3D10_EOT_PIXELSHADER
:
TRACE
(
"Pixel shader
\n
"
);
TRACE
(
"Pixel shader
\n
"
);
o
->
data
=
&
anonymous_ps
;
o
->
data
=
&
anonymous_ps
;
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOT_GEOMETRYSHADER
:
case
D3D10_EOT_GEOMETRYSHADER
:
TRACE
(
"Geometry shader
\n
"
);
TRACE
(
"Geometry shader
\n
"
);
o
->
data
=
&
anonymous_gs
;
o
->
data
=
&
anonymous_gs
;
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOT_STENCIL_REF
:
case
D3D10_EOT_STENCIL_REF
:
...
@@ -1264,8 +1261,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1264,8 +1261,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
ERR
(
"Failed to read stencil ref.
\n
"
);
ERR
(
"Failed to read stencil ref.
\n
"
);
return
E_FAIL
;
return
E_FAIL
;
}
}
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOT_SAMPLE_MASK
:
case
D3D10_EOT_SAMPLE_MASK
:
...
@@ -1274,8 +1269,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1274,8 +1269,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
FIXME
(
"Failed to read sample mask.
\n
"
);
FIXME
(
"Failed to read sample mask.
\n
"
);
return
E_FAIL
;
return
E_FAIL
;
}
}
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOT_BLEND_FACTOR
:
case
D3D10_EOT_BLEND_FACTOR
:
...
@@ -1284,14 +1277,11 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1284,14 +1277,11 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
FIXME
(
"Failed to read blend factor.
\n
"
);
FIXME
(
"Failed to read blend factor.
\n
"
);
return
E_FAIL
;
return
E_FAIL
;
}
}
hr
=
S_OK
;
break
;
break
;
default:
default:
FIXME
(
"Unhandled object type %#x
\n
"
,
o
->
type
);
FIXME
(
"Unhandled object type %#x
\n
"
,
o
->
type
);
hr
=
E_FAIL
;
return
E_FAIL
;
break
;
}
}
break
;
break
;
...
@@ -1300,7 +1290,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1300,7 +1290,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
TRACE
(
"Variable name %s.
\n
"
,
debugstr_a
(
data
+
offset
));
TRACE
(
"Variable name %s.
\n
"
,
debugstr_a
(
data
+
offset
));
o
->
data
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
o
->
data
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOO_PARSED_OBJECT_INDEX
:
case
D3D10_EOO_PARSED_OBJECT_INDEX
:
...
@@ -1311,7 +1300,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1311,7 +1300,6 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
TRACE
(
"Variable name %s[%u].
\n
"
,
debugstr_a
(
data
+
offset
),
o
->
index
);
TRACE
(
"Variable name %s[%u].
\n
"
,
debugstr_a
(
data
+
offset
),
o
->
index
);
o
->
data
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
o
->
data
=
e
->
lpVtbl
->
GetVariableByName
(
e
,
data
+
offset
);
hr
=
S_OK
;
break
;
break
;
case
D3D10_EOO_ANONYMOUS_SHADER
:
case
D3D10_EOO_ANONYMOUS_SHADER
:
...
@@ -1339,34 +1327,66 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
...
@@ -1339,34 +1327,66 @@ static HRESULT parse_fx10_object(struct d3d10_effect_object *o, const char **ptr
switch
(
o
->
type
)
switch
(
o
->
type
)
{
{
case
D3D10_EOT_VERTEXSHADER
:
case
D3D10_EOT_VERTEXSHADER
:
TRACE
(
"Vertex shader
\n
"
);
hr
=
parse_shader
(
o
->
data
,
data_ptr
);
break
;
case
D3D10_EOT_PIXELSHADER
:
case
D3D10_EOT_PIXELSHADER
:
TRACE
(
"Pixel shader
\n
"
);
hr
=
parse_shader
(
o
->
data
,
data_ptr
);
break
;
case
D3D10_EOT_GEOMETRYSHADER
:
case
D3D10_EOT_GEOMETRYSHADER
:
TRACE
(
"Geometry shader
\n
"
);
if
(
FAILED
(
hr
=
parse_shader
(
o
->
data
,
data_ptr
)))
hr
=
parse_shader
(
o
->
data
,
data_ptr
)
;
return
hr
;
break
;
break
;
default:
default:
FIXME
(
"Unhandled object type %#x
\n
"
,
o
->
type
);
FIXME
(
"Unhandled object type %#x
\n
"
,
o
->
type
);
hr
=
E_FAIL
;
return
E_FAIL
;
break
;
}
}
break
;
break
;
default:
default:
hr
=
E_FAIL
;
FIXME
(
"Unhandled operation %#x.
\n
"
,
operation
);
FIXME
(
"Unhandled operation %#x.
\n
"
,
operation
);
return
E_FAIL
;
}
switch
(
o
->
type
)
{
case
D3D10_EOT_VERTEXSHADER
:
{
ID3D10EffectVariable
*
variable
=
o
->
data
;
ID3D10EffectShaderVariable
*
sv
=
variable
->
lpVtbl
->
AsShader
(
variable
);
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetVertexShader
(
sv
,
o
->
index
,
&
o
->
object
.
vs
)))
return
hr
;
break
;
}
case
D3D10_EOT_PIXELSHADER
:
{
ID3D10EffectVariable
*
variable
=
o
->
data
;
ID3D10EffectShaderVariable
*
sv
=
variable
->
lpVtbl
->
AsShader
(
variable
);
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetPixelShader
(
sv
,
o
->
index
,
&
o
->
object
.
ps
)))
return
hr
;
break
;
}
case
D3D10_EOT_GEOMETRYSHADER
:
{
ID3D10EffectVariable
*
variable
=
o
->
data
;
ID3D10EffectShaderVariable
*
sv
=
variable
->
lpVtbl
->
AsShader
(
variable
);
if
(
FAILED
(
hr
=
sv
->
lpVtbl
->
GetGeometryShader
(
sv
,
o
->
index
,
&
o
->
object
.
gs
)))
return
hr
;
break
;
break
;
}
case
D3D10_EOT_RASTERIZER_STATE
:
case
D3D10_EOT_DEPTH_STENCIL_STATE
:
case
D3D10_EOT_BLEND_STATE
:
case
D3D10_EOT_STENCIL_REF
:
case
D3D10_EOT_BLEND_FACTOR
:
case
D3D10_EOT_SAMPLE_MASK
:
break
;
default:
FIXME
(
"Unhandled object type %#x.
\n
"
,
o
->
type
);
return
E_FAIL
;
}
}
return
hr
;
return
S_OK
;
}
}
static
HRESULT
parse_fx10_pass
(
struct
d3d10_effect_pass
*
p
,
const
char
**
ptr
,
const
char
*
data
)
static
HRESULT
parse_fx10_pass
(
struct
d3d10_effect_pass
*
p
,
const
char
**
ptr
,
const
char
*
data
)
...
@@ -2093,22 +2113,21 @@ HRESULT d3d10_effect_parse(struct d3d10_effect *This, const void *data, SIZE_T d
...
@@ -2093,22 +2113,21 @@ HRESULT d3d10_effect_parse(struct d3d10_effect *This, const void *data, SIZE_T d
static
HRESULT
d3d10_effect_object_apply
(
struct
d3d10_effect_object
*
o
)
static
HRESULT
d3d10_effect_object_apply
(
struct
d3d10_effect_object
*
o
)
{
{
ID3D10Device
*
device
=
o
->
pass
->
technique
->
effect
->
device
;
ID3D10Device
*
device
=
o
->
pass
->
technique
->
effect
->
device
;
struct
d3d10_effect_variable
*
v
=
(
struct
d3d10_effect_variable
*
)
o
->
data
;
TRACE
(
"effect object %p, type %#x.
\n
"
,
o
,
o
->
type
);
TRACE
(
"effect object %p, type %#x.
\n
"
,
o
,
o
->
type
);
switch
(
o
->
type
)
switch
(
o
->
type
)
{
{
case
D3D10_EOT_VERTEXSHADER
:
case
D3D10_EOT_VERTEXSHADER
:
ID3D10Device_VSSetShader
(
device
,
((
struct
d3d10_effect_shader_variable
*
)
v
->
data
)
->
shader
.
vs
);
ID3D10Device_VSSetShader
(
device
,
o
->
object
.
vs
);
return
S_OK
;
return
S_OK
;
case
D3D10_EOT_PIXELSHADER
:
case
D3D10_EOT_PIXELSHADER
:
ID3D10Device_PSSetShader
(
device
,
((
struct
d3d10_effect_shader_variable
*
)
v
->
data
)
->
shader
.
ps
);
ID3D10Device_PSSetShader
(
device
,
o
->
object
.
ps
);
return
S_OK
;
return
S_OK
;
case
D3D10_EOT_GEOMETRYSHADER
:
case
D3D10_EOT_GEOMETRYSHADER
:
ID3D10Device_GSSetShader
(
device
,
((
struct
d3d10_effect_shader_variable
*
)
v
->
data
)
->
shader
.
gs
);
ID3D10Device_GSSetShader
(
device
,
o
->
object
.
gs
);
return
S_OK
;
return
S_OK
;
default:
default:
...
@@ -2198,6 +2217,30 @@ static void d3d10_effect_variable_destroy(struct d3d10_effect_variable *v)
...
@@ -2198,6 +2217,30 @@ static void d3d10_effect_variable_destroy(struct d3d10_effect_variable *v)
}
}
}
}
static
void
d3d10_effect_object_destroy
(
struct
d3d10_effect_object
*
o
)
{
switch
(
o
->
type
)
{
case
D3D10_EOT_VERTEXSHADER
:
if
(
o
->
object
.
vs
)
ID3D10VertexShader_Release
(
o
->
object
.
vs
);
break
;
case
D3D10_EOT_PIXELSHADER
:
if
(
o
->
object
.
ps
)
ID3D10PixelShader_Release
(
o
->
object
.
ps
);
break
;
case
D3D10_EOT_GEOMETRYSHADER
:
if
(
o
->
object
.
gs
)
ID3D10GeometryShader_Release
(
o
->
object
.
gs
);
break
;
default:
break
;
}
}
static
void
d3d10_effect_pass_destroy
(
struct
d3d10_effect_pass
*
p
)
static
void
d3d10_effect_pass_destroy
(
struct
d3d10_effect_pass
*
p
)
{
{
unsigned
int
i
;
unsigned
int
i
;
...
@@ -2205,7 +2248,15 @@ static void d3d10_effect_pass_destroy(struct d3d10_effect_pass *p)
...
@@ -2205,7 +2248,15 @@ static void d3d10_effect_pass_destroy(struct d3d10_effect_pass *p)
TRACE
(
"pass %p
\n
"
,
p
);
TRACE
(
"pass %p
\n
"
,
p
);
HeapFree
(
GetProcessHeap
(),
0
,
p
->
name
);
HeapFree
(
GetProcessHeap
(),
0
,
p
->
name
);
HeapFree
(
GetProcessHeap
(),
0
,
p
->
objects
);
if
(
p
->
objects
)
{
for
(
i
=
0
;
i
<
p
->
object_count
;
++
i
)
{
d3d10_effect_object_destroy
(
&
p
->
objects
[
i
]);
}
HeapFree
(
GetProcessHeap
(),
0
,
p
->
objects
);
}
if
(
p
->
annotations
)
if
(
p
->
annotations
)
{
{
...
...
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