@@ -82,6 +82,14 @@ float4 main() : SV_Target0
82
82
ID3DBlobPtr vsblob = Compile (vertex, " main" , " vs_5_0" );
83
83
ID3DBlobPtr psblob = Compile (pixel, " main" , " ps_5_0" );
84
84
85
+ bool supportSM60 = (m_HighestShaderModel >= D3D_SHADER_MODEL_6_0) && m_DXILSupport;
86
+ bool supportSM66 = (m_HighestShaderModel >= D3D_SHADER_MODEL_6_6) && m_DXILSupport;
87
+
88
+ ID3DBlobPtr vs_6_0_blob = supportSM60 ? Compile (vertex, " main" , " vs_6_0" ) : NULL ;
89
+ ID3DBlobPtr ps_6_0_blob = supportSM60 ? Compile (pixel, " main" , " ps_6_0" ) : NULL ;
90
+ ID3DBlobPtr vs_6_6_blob = supportSM66 ? Compile (vertex, " main" , " vs_6_6" ) : NULL ;
91
+ ID3DBlobPtr ps_6_6_blob = supportSM66 ? Compile (pixel, " main" , " ps_6_6" ) : NULL ;
92
+
85
93
const DefaultA2V OffsetTri[] = {
86
94
{Vec3f (7 .7f , 0 .0f , 0 .0f ), Vec4f (0 .0f , 0 .0f , 0 .0f , 1 .0f ), Vec2f (0 .0f , 0 .0f )},
87
95
{Vec3f (7 .7f , 0 .0f , 0 .0f ), Vec4f (0 .0f , 0 .0f , 0 .0f , 1 .0f ), Vec2f (0 .0f , 0 .0f )},
@@ -117,6 +125,24 @@ float4 main() : SV_Target0
117
125
ID3D12PipelineStatePtr pso = MakePSO ().RootSig (sig).InputLayout ().VS (vsblob).PS (psblob).RTVs (
118
126
{DXGI_FORMAT_R32G32B32A32_FLOAT});
119
127
128
+ ID3D12PipelineStatePtr sm_6_0_pso = NULL ;
129
+ if (vs_6_0_blob && ps_6_0_blob)
130
+ sm_6_0_pso = MakePSO ()
131
+ .RootSig (sig)
132
+ .InputLayout ()
133
+ .VS (vs_6_0_blob)
134
+ .PS (ps_6_0_blob)
135
+ .RTVs ({DXGI_FORMAT_R32G32B32A32_FLOAT});
136
+
137
+ ID3D12PipelineStatePtr sm_6_6_pso = NULL ;
138
+ if (vs_6_6_blob && ps_6_6_blob)
139
+ sm_6_6_pso = MakePSO ()
140
+ .RootSig (sig)
141
+ .InputLayout ()
142
+ .VS (vs_6_6_blob)
143
+ .PS (ps_6_6_blob)
144
+ .RTVs ({DXGI_FORMAT_R32G32B32A32_FLOAT});
145
+
120
146
ResourceBarrier (vb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
121
147
ResourceBarrier (ib, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_INDEX_BUFFER);
122
148
ResourceBarrier (cb, D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER);
@@ -172,8 +198,23 @@ float4 main() : SV_Target0
172
198
173
199
OMSetRenderTargets (cmd, {offrtv}, {});
174
200
201
+ setMarker (cmd, " SM5" );
175
202
cmd->DrawIndexedInstanced (6 , 1 , 0 , 0 , 0 );
176
203
204
+ if (sm_6_0_pso)
205
+ {
206
+ cmd->SetPipelineState (sm_6_0_pso);
207
+ setMarker (cmd, " SM6.0" );
208
+ cmd->DrawIndexedInstanced (6 , 1 , 0 , 0 , 0 );
209
+ }
210
+
211
+ if (sm_6_6_pso)
212
+ {
213
+ cmd->SetPipelineState (sm_6_6_pso);
214
+ setMarker (cmd, " SM6.6" );
215
+ cmd->DrawIndexedInstanced (6 , 1 , 0 , 0 , 0 );
216
+ }
217
+
177
218
ResourceBarrier (cmd, rtvtex, D3D12_RESOURCE_STATE_RENDER_TARGET,
178
219
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
179
220
0 commit comments