@@ -210,6 +210,17 @@ void D3D12HelloPartialGraphicsPrograms::LoadPipeline()
210210 ThrowIfFailed (E_FAIL);
211211 }
212212
213+
214+ // Check partial graphics program support.
215+ D3D12_FEATURE_DATA_PARTIAL_GRAPHICS_PROGRAMS partialGraphicsProgramTier = {};
216+ ThrowIfFailed (m_device->CheckFeatureSupport (
217+ D3D12_FEATURE_PARTIAL_GRAPHICS_PROGRAMS, &partialGraphicsProgramTier, sizeof (partialGraphicsProgramTier)));
218+ if (partialGraphicsProgramTier.PartialGraphicsProgramsTier < D3D12_PARTIAL_GRAPHICS_PROGRAMS_TIER_1_0)
219+ {
220+ OutputDebugStringA (" Partial Graphics Programs Tier 1.0 is required." );
221+ ThrowIfFailed (E_FAIL);
222+ }
223+
213224 // Describe and create the command queue.
214225 D3D12_COMMAND_QUEUE_DESC queueDesc = {};
215226 queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
@@ -300,16 +311,6 @@ void D3D12HelloPartialGraphicsPrograms::LoadAssets()
300311 // https://github.com/microsoft/DirectX-Specs/blob/master/d3d/PartialGraphicsPrograms.md
301312 // -------------------------------------------------------------------------
302313 {
303- // First check device support.
304- D3D12_FEATURE_DATA_PARTIAL_GRAPHICS_PROGRAMS pgp = {};
305- ThrowIfFailed (m_device->CheckFeatureSupport (
306- D3D12_FEATURE_PARTIAL_GRAPHICS_PROGRAMS, &pgp, sizeof (pgp)));
307- if (pgp.PartialGraphicsProgramsTier < D3D12_PARTIAL_GRAPHICS_PROGRAMS_TIER_1_0)
308- {
309- OutputDebugStringA (" Partial Graphics Programs Tier 1.0 is required." );
310- ThrowIfFailed (E_FAIL);
311- }
312-
313314 // Compile VS + PS once.
314315 ComPtr<ID3DBlob> vertexShader;
315316 ComPtr<ID3DBlob> pixelShader;
@@ -356,7 +357,7 @@ void D3D12HelloPartialGraphicsPrograms::LoadAssets()
356357
357358 // ---------------------------------------------------------------------
358359 // 1. Collection state object: shaders + VSPartial + PSPartial.
359- // Per the spec, partial programs in a collection are compiled when
360+ // Partial graphics programs in a collection are compiled when
360361 // the collection is created, so the executable state object that
361362 // references it only has to perform a cheap link step.
362363 // ---------------------------------------------------------------------
@@ -391,12 +392,6 @@ void D3D12HelloPartialGraphicsPrograms::LoadAssets()
391392 pRTFormats->SetNumRenderTargets (1 );
392393 pRTFormats->SetRenderTargetFormat (0 , DXGI_FORMAT_R8G8B8A8_UNORM);
393394
394- // Pre-rasterization partial program fields: input layout is baked
395- // in (not late-linked) since it doesn't vary across permutations.
396- auto pPreRastFields = collectionDesc.CreateSubobject <CD3DX12_PRERASTERIZATION_SHADERS_PARTIAL_PROGRAM_FIELDS_SUBOBJECT>();
397- pPreRastFields->SetExcludePS (FALSE );
398- pPreRastFields->SetLateLinkInputLayoutSubobject (FALSE );
399-
400395 // Pixel shader partial program fields: blend will be late linked.
401396 // AlphaToCoverageEnable and DualSourceBlendEnable affect PS
402397 // compilation, so they must be specified here (the late-linked
@@ -412,13 +407,11 @@ void D3D12HelloPartialGraphicsPrograms::LoadAssets()
412407 pPreRastProgram->AddExport (L" VSMain" );
413408 pPreRastProgram->AddSubobject (*pIL);
414409 pPreRastProgram->AddSubobject (*pTopology);
415- pPreRastProgram->AddSubobject (*pPreRastFields);
416410
417411 auto pPSProgram = collectionDesc.CreateSubobject <CD3DX12_PARTIAL_GRAPHICS_PROGRAM_SUBOBJECT>();
418412 pPSProgram->SetProgramName (L" PSPartial" );
419413 pPSProgram->SetPartialGraphicsProgramType (D3D12_PARTIAL_GRAPHICS_PROGRAM_TYPE_PIXEL_SHADER);
420414 pPSProgram->AddExport (L" PSMain" );
421- pPSProgram->AddSubobject (*pTopology);
422415 pPSProgram->AddSubobject (*pRTFormats);
423416 pPSProgram->AddSubobject (*pPSFields);
424417
0 commit comments