Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
vkd3d
Manage
Activity
Members
Labels
Plan
Wiki
Bugzilla
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
wine
vkd3d
Commits
6b841486
Commit
6b841486
authored
11 months ago
by
Giovanni Mascellani
Committed by
Alexandre Julliard
10 months ago
Browse files
Options
Downloads
Patches
Plain Diff
vkd3d-shader/ir: Materialize SSAs in each function of a hull shader.
parent
c8af142b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!807
vkd3d-shader/ir: Handle individual functions in hull shaders.
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
libs/vkd3d-shader/ir.c
+50
-15
50 additions, 15 deletions
libs/vkd3d-shader/ir.c
tests/hlsl/tessellation.shader_test
+1
-1
1 addition, 1 deletion
tests/hlsl/tessellation.shader_test
with
51 additions
and
16 deletions
libs/vkd3d-shader/ir.c
+
50
−
15
View file @
6b841486
...
...
@@ -3098,6 +3098,8 @@ struct vsir_cfg
{
struct
vkd3d_shader_message_context
*
message_context
;
struct
vsir_program
*
program
;
size_t
function_begin
;
size_t
function_end
;
struct
vsir_block
*
blocks
;
struct
vsir_block
*
entry
;
size_t
block_count
;
...
...
@@ -3354,6 +3356,7 @@ static enum vkd3d_result vsir_cfg_init(struct vsir_cfg *cfg, struct vsir_program
cfg
->
program
=
program
;
cfg
->
block_count
=
program
->
block_count
;
cfg
->
target
=
target
;
cfg
->
function_begin
=
*
pos
;
vsir_block_list_init
(
&
cfg
->
order
);
...
...
@@ -3414,6 +3417,7 @@ static enum vkd3d_result vsir_cfg_init(struct vsir_cfg *cfg, struct vsir_program
}
*
pos
=
i
;
cfg
->
function_end
=
*
pos
;
for
(
i
=
0
;
i
<
cfg
->
block_count
;
++
i
)
{
...
...
@@ -5063,7 +5067,7 @@ static enum vkd3d_result vsir_cfg_materialize_undominated_ssas_to_temps(struct v
TRACE
(
"Emitting temps for %u values with undominated usage.
\n
"
,
alloc
.
next_temp_idx
-
program
->
temp_count
);
for
(
i
=
0
;
i
<
program
->
instructions
.
count
;
++
i
)
for
(
i
=
cfg
->
function_begin
;
i
<
cfg
->
function_end
;
++
i
)
{
struct
vkd3d_shader_instruction
*
ins
=
&
program
->
instructions
.
elements
[
i
];
...
...
@@ -5082,26 +5086,16 @@ done:
return
VKD3D_OK
;
}
static
enum
vkd3d_result
vsir_program_materialize_undominated_ssas_to_temps
(
struct
vsir_program
*
program
,
struct
vkd3d_shader_message_context
*
message_context
)
static
enum
vkd3d_result
vsir_program_materialize_undominated_ssas_to_temps_in_function
(
struct
vsir_program
*
program
,
struct
vkd3d_shader_message_context
*
message_context
,
size_t
*
pos
)
{
enum
vkd3d_result
ret
;
struct
vsir_cfg
cfg
;
size_t
stop_pos
=
0
;
if
(
program
->
shader_version
.
type
==
VKD3D_SHADER_TYPE_HULL
)
{
FIXME
(
"Hull shaders are not supported.
\n
"
);
vkd3d_shader_error
(
message_context
,
NULL
,
VKD3D_SHADER_ERROR_VSIR_NOT_IMPLEMENTED
,
"The structurizer does not support hull shaders."
);
return
VKD3D_ERROR_INVALID_SHADER
;
}
if
((
ret
=
vsir_cfg_init
(
&
cfg
,
program
,
message_context
,
NULL
,
&
stop_pos
))
<
0
)
if
((
ret
=
vsir_cfg_init
(
&
cfg
,
program
,
message_context
,
NULL
,
pos
))
<
0
)
return
ret
;
assert
(
stop_pos
==
program
->
instructions
.
count
);
vsir_cfg_compute_dominators
(
&
cfg
);
ret
=
vsir_cfg_materialize_undominated_ssas_to_temps
(
&
cfg
);
...
...
@@ -5111,6 +5105,47 @@ static enum vkd3d_result vsir_program_materialize_undominated_ssas_to_temps(stru
return
ret
;
}
static
enum
vkd3d_result
vsir_program_materialize_undominated_ssas_to_temps
(
struct
vsir_program
*
program
,
struct
vkd3d_shader_message_context
*
message_context
)
{
enum
vkd3d_result
ret
;
size_t
i
;
for
(
i
=
0
;
i
<
program
->
instructions
.
count
;)
{
struct
vkd3d_shader_instruction
*
ins
=
&
program
->
instructions
.
elements
[
i
];
switch
(
ins
->
handler_idx
)
{
case
VKD3DSIH_LABEL
:
assert
(
program
->
shader_version
.
type
!=
VKD3D_SHADER_TYPE_HULL
);
TRACE
(
"Materializing undominated SSAs in a non-hull shader.
\n
"
);
if
((
ret
=
vsir_program_materialize_undominated_ssas_to_temps_in_function
(
program
,
message_context
,
&
i
))
<
0
)
return
ret
;
assert
(
i
==
program
->
instructions
.
count
);
break
;
case
VKD3DSIH_HS_CONTROL_POINT_PHASE
:
case
VKD3DSIH_HS_FORK_PHASE
:
case
VKD3DSIH_HS_JOIN_PHASE
:
assert
(
program
->
shader_version
.
type
==
VKD3D_SHADER_TYPE_HULL
);
TRACE
(
"Materializing undominated SSAs in phase %u of a hull shader.
\n
"
,
ins
->
handler_idx
);
++
i
;
if
((
ret
=
vsir_program_materialize_undominated_ssas_to_temps_in_function
(
program
,
message_context
,
&
i
))
<
0
)
return
ret
;
break
;
default:
++
i
;
break
;
}
}
return
VKD3D_OK
;
}
struct
validation_context
{
struct
vkd3d_shader_message_context
*
message_context
;
...
...
This diff is collapsed.
Click to expand it.
tests/hlsl/tessellation.shader_test
+
1
−
1
View file @
6b841486
...
...
@@ -94,5 +94,5 @@ float4 main(data input) : sv_target
}
[test]
todo draw 3 control point patch list 3
todo
(sm<6)
draw 3 control point patch list 3
probe all rgba (0.0, 1.0, 0.0, 1.0)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment