mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Refactor D3D12 tests to check for options once in Prepare
This commit is contained in:
@@ -98,39 +98,33 @@ void D3D11GraphicsTest::Prepare(int argc, char **argv)
|
||||
if(SUCCEEDED(hr))
|
||||
adapters = FindD3DAdapters(factory, argc, argv, warp);
|
||||
}
|
||||
}
|
||||
|
||||
if(!d3d11)
|
||||
Avail = "d3d11.dll is not available";
|
||||
else if(!dxgi)
|
||||
Avail = "dxgi.dll is not available";
|
||||
else if(!d3dcompiler)
|
||||
Avail = "d3dcompiler_XX.dll is not available";
|
||||
else if(!factory)
|
||||
Avail = "Couldn't create DXGI factory";
|
||||
else if(!dyn_D3D11CreateDevice || !dyn_D3D11CreateDeviceAndSwapChain || !dyn_D3DCompile ||
|
||||
!dyn_D3DStripShader || !dyn_D3DSetBlobPart)
|
||||
Avail = "Missing required entry point";
|
||||
if(!d3d11)
|
||||
Avail = "d3d11.dll is not available";
|
||||
else if(!dxgi)
|
||||
Avail = "dxgi.dll is not available";
|
||||
else if(!d3dcompiler)
|
||||
Avail = "d3dcompiler_XX.dll is not available";
|
||||
else if(!factory)
|
||||
Avail = "Couldn't create DXGI factory";
|
||||
else if(!dyn_D3D11CreateDevice || !dyn_D3D11CreateDeviceAndSwapChain || !dyn_D3DCompile ||
|
||||
!dyn_D3DStripShader || !dyn_D3DSetBlobPart)
|
||||
Avail = "Missing required entry point";
|
||||
|
||||
if(dyn_D3D11CreateDevice)
|
||||
if(dyn_D3D11CreateDevice)
|
||||
{
|
||||
D3D_FEATURE_LEVEL features[] = {D3D_FEATURE_LEVEL_11_0};
|
||||
HRESULT hr = CreateDevice(NULL, NULL, features, 0);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
D3D_FEATURE_LEVEL features[] = {D3D_FEATURE_LEVEL_11_0};
|
||||
hr = CreateDevice(NULL, NULL, features, 0);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
dev->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS, &opts, sizeof(opts));
|
||||
|
||||
ID3D11Device1Ptr tempDev1;
|
||||
|
||||
tempDev1 = dev;
|
||||
memset(&opts1, 0, sizeof(opts1));
|
||||
if(tempDev1)
|
||||
tempDev1->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &opts1, sizeof(opts1));
|
||||
}
|
||||
|
||||
// This device was only used to get feature support. Set it back to NULL
|
||||
dev = NULL;
|
||||
dev->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS, &opts, sizeof(opts));
|
||||
dev->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &opts1, sizeof(opts1));
|
||||
}
|
||||
|
||||
// This device was only used to get feature support. Set it back to NULL
|
||||
dev = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -177,8 +177,8 @@ struct D3D11GraphicsTest : public GraphicsTest
|
||||
ID3D11VertexShaderPtr swapBlitVS;
|
||||
ID3D11PixelShaderPtr swapBlitPS;
|
||||
|
||||
D3D11_FEATURE_DATA_D3D11_OPTIONS opts;
|
||||
D3D11_FEATURE_DATA_D3D11_OPTIONS1 opts1;
|
||||
D3D11_FEATURE_DATA_D3D11_OPTIONS opts = {};
|
||||
D3D11_FEATURE_DATA_D3D11_OPTIONS1 opts1 = {};
|
||||
|
||||
ID3D11DepthStencilStatePtr depthState;
|
||||
ID3D11RasterizerStatePtr rastState;
|
||||
|
||||
@@ -272,9 +272,6 @@ float4 main(float4 pos : SV_Position) : SV_Target0
|
||||
D3D12PSOCreator creator =
|
||||
MakePSO().RootSig(sig).RTVs({DXGI_FORMAT_R8G8B8A8_UNORM_SRGB}).VS(vs5blob);
|
||||
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS opts = {};
|
||||
dev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &opts, sizeof(opts));
|
||||
|
||||
respixel = fmt::format("#define ROV {0}\n\n{1}", opts.ROVsSupported ? 1 : 0, respixel);
|
||||
|
||||
ID3DBlobPtr dxbcBlob = Compile(respixel, "main", "ps_5_1");
|
||||
|
||||
@@ -34,7 +34,7 @@ RD_TEST(D3D12_Swapchain_Zoo, D3D12GraphicsTest)
|
||||
D3D12GraphicsTest::Prepare(argc, argv);
|
||||
|
||||
if(m_12On7)
|
||||
Avail = "True swapchains not supportedd on D3D12On7";
|
||||
Avail = "True swapchains not supported on D3D12On7";
|
||||
}
|
||||
|
||||
int main()
|
||||
|
||||
@@ -47,6 +47,16 @@ HMODULE dxcompiler = NULL;
|
||||
IDXGIFactory1Ptr factory;
|
||||
std::vector<IDXGIAdapterPtr> adapters;
|
||||
bool d3d12on7 = false;
|
||||
|
||||
pD3DCompile dyn_D3DCompile = NULL;
|
||||
pD3DStripShader dyn_D3DStripShader = NULL;
|
||||
pD3DSetBlobPart dyn_D3DSetBlobPart = NULL;
|
||||
pD3DCreateBlob dyn_CreateBlob = NULL;
|
||||
|
||||
PFN_D3D12_CREATE_DEVICE dyn_D3D12CreateDevice = NULL;
|
||||
|
||||
PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE dyn_serializeRootSig;
|
||||
PFN_D3D12_SERIALIZE_ROOT_SIGNATURE dyn_serializeRootSigOld;
|
||||
}; // namespace
|
||||
|
||||
void D3D12GraphicsTest::Prepare(int argc, char **argv)
|
||||
@@ -119,6 +129,24 @@ void D3D12GraphicsTest::Prepare(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(d3dcompiler)
|
||||
{
|
||||
dyn_D3DCompile = (pD3DCompile)GetProcAddress(d3dcompiler, "D3DCompile");
|
||||
dyn_D3DStripShader = (pD3DStripShader)GetProcAddress(d3dcompiler, "D3DStripShader");
|
||||
dyn_D3DSetBlobPart = (pD3DSetBlobPart)GetProcAddress(d3dcompiler, "D3DSetBlobPart");
|
||||
dyn_CreateBlob = (pD3DCreateBlob)GetProcAddress(d3dcompiler, "D3DCreateBlob");
|
||||
}
|
||||
|
||||
if(d3d12)
|
||||
{
|
||||
dyn_D3D12CreateDevice = (PFN_D3D12_CREATE_DEVICE)GetProcAddress(d3d12, "D3D12CreateDevice");
|
||||
|
||||
dyn_serializeRootSig = (PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)GetProcAddress(
|
||||
d3d12, "D3D12SerializeVersionedRootSignature");
|
||||
dyn_serializeRootSigOld =
|
||||
(PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)GetProcAddress(d3d12, "D3D12SerializeRootSignature");
|
||||
}
|
||||
}
|
||||
|
||||
if(!d3d12)
|
||||
@@ -129,6 +157,11 @@ void D3D12GraphicsTest::Prepare(int argc, char **argv)
|
||||
Avail = "d3dcompiler_XX.dll is not available";
|
||||
else if(!factory)
|
||||
Avail = "Couldn't create DXGI factory";
|
||||
else if(!dyn_D3D12CreateDevice || !dyn_D3DCompile || !dyn_D3DStripShader || !dyn_D3DSetBlobPart ||
|
||||
!dyn_CreateBlob)
|
||||
Avail = "Missing required entry point";
|
||||
else if(!dyn_serializeRootSig && !dyn_serializeRootSigOld)
|
||||
Avail = "Missing required root signature serialize entry point";
|
||||
|
||||
m_12On7 = d3d12on7;
|
||||
|
||||
@@ -143,6 +176,20 @@ void D3D12GraphicsTest::Prepare(int argc, char **argv)
|
||||
}
|
||||
|
||||
m_Factory = factory;
|
||||
|
||||
ID3D12DevicePtr tmpdev = CreateDevice(adapters, minFeatureLevel);
|
||||
|
||||
if(tmpdev)
|
||||
{
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &opts, sizeof(opts));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS1, &opts1, sizeof(opts1));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS2, &opts2, sizeof(opts2));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS3, &opts3, sizeof(opts3));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS4, &opts4, sizeof(opts4));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS5, &opts5, sizeof(opts5));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS6, &opts6, sizeof(opts6));
|
||||
tmpdev->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS7, &opts7, sizeof(opts7));
|
||||
}
|
||||
}
|
||||
|
||||
bool D3D12GraphicsTest::Init()
|
||||
@@ -151,30 +198,9 @@ bool D3D12GraphicsTest::Init()
|
||||
if(!GraphicsTest::Init())
|
||||
return false;
|
||||
|
||||
// we can assume d3d12, dxgi and d3dcompiler are valid since we shouldn't be running the test if
|
||||
// Prepare() failed
|
||||
|
||||
dyn_D3D12CreateDevice = (PFN_D3D12_CREATE_DEVICE)GetProcAddress(d3d12, "D3D12CreateDevice");
|
||||
|
||||
dyn_D3DCompile = (pD3DCompile)GetProcAddress(d3dcompiler, "D3DCompile");
|
||||
dyn_D3DStripShader = (pD3DStripShader)GetProcAddress(d3dcompiler, "D3DStripShader");
|
||||
dyn_D3DSetBlobPart = (pD3DSetBlobPart)GetProcAddress(d3dcompiler, "D3DSetBlobPart");
|
||||
dyn_CreateBlob = (pD3DCreateBlob)GetProcAddress(d3dcompiler, "D3DCreateBlob");
|
||||
|
||||
dyn_serializeRootSig = (PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE)GetProcAddress(
|
||||
d3d12, "D3D12SerializeVersionedRootSignature");
|
||||
dyn_serializeRootSigOld =
|
||||
(PFN_D3D12_SERIALIZE_ROOT_SIGNATURE)GetProcAddress(d3d12, "D3D12SerializeRootSignature");
|
||||
|
||||
if(dyn_serializeRootSig == NULL)
|
||||
{
|
||||
TEST_WARN("Can't get D3D12SerializeVersionedRootSignature - old version of windows?");
|
||||
|
||||
if(dyn_serializeRootSigOld == NULL)
|
||||
{
|
||||
TEST_ERROR("Can't get D3D12SerializeRootSignature!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(debugDevice)
|
||||
@@ -204,7 +230,7 @@ bool D3D12GraphicsTest::Init()
|
||||
}
|
||||
}
|
||||
|
||||
dev = CreateDevice(adapters, D3D_FEATURE_LEVEL_11_0);
|
||||
dev = CreateDevice(adapters, minFeatureLevel);
|
||||
if(!dev)
|
||||
return false;
|
||||
|
||||
|
||||
@@ -185,16 +185,6 @@ struct D3D12GraphicsTest : public GraphicsTest
|
||||
DXGI_FORMAT backbufferFmt = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
int backbufferCount = 2;
|
||||
|
||||
pD3DCompile dyn_D3DCompile = NULL;
|
||||
pD3DStripShader dyn_D3DStripShader = NULL;
|
||||
pD3DSetBlobPart dyn_D3DSetBlobPart = NULL;
|
||||
pD3DCreateBlob dyn_CreateBlob = NULL;
|
||||
|
||||
PFN_D3D12_CREATE_DEVICE dyn_D3D12CreateDevice = NULL;
|
||||
|
||||
PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE dyn_serializeRootSig;
|
||||
PFN_D3D12_SERIALIZE_ROOT_SIGNATURE dyn_serializeRootSigOld;
|
||||
|
||||
GraphicsWindow *mainWindow = NULL;
|
||||
|
||||
DXGI_ADAPTER_DESC adapterDesc = {};
|
||||
@@ -207,6 +197,8 @@ struct D3D12GraphicsTest : public GraphicsTest
|
||||
ID3D12RootSignaturePtr swapBlitSig;
|
||||
ID3D12PipelineStatePtr swapBlitPso;
|
||||
|
||||
D3D_FEATURE_LEVEL minFeatureLevel = D3D_FEATURE_LEVEL_11_0;
|
||||
|
||||
bool gpuva = false, m_12On7 = false, m_DXILSupport = false;
|
||||
IDXGIFactory1Ptr m_Factory;
|
||||
|
||||
@@ -230,6 +222,15 @@ struct D3D12GraphicsTest : public GraphicsTest
|
||||
|
||||
ID3D12CommandQueuePtr queue;
|
||||
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS opts = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS1 opts1 = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS2 opts2 = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS3 opts3 = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS4 opts4 = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS5 opts5 = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS6 opts6 = {};
|
||||
D3D12_FEATURE_DATA_D3D12_OPTIONS7 opts7 = {};
|
||||
|
||||
ID3D12FencePtr m_GPUSyncFence;
|
||||
HANDLE m_GPUSyncHandle = NULL;
|
||||
UINT64 m_GPUSyncCounter = 1;
|
||||
|
||||
Reference in New Issue
Block a user