Skip to content

Commit 2be532f

Browse files
committed
Fix remaining test bugs.
1 parent 71d093b commit 2be532f

4 files changed

Lines changed: 43 additions & 13 deletions

File tree

src/vrhi_backend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,6 @@ bool vhCmdBackendState::BE_PresubmitCommon_PipelineDesc(
375375
assert( shaders && shaderCount > 0 );
376376
const vhBackendShader* vertexShader = nullptr;
377377

378-
std::map< uint32_t, nvrhi::BindingLayoutDesc > mergedLayouts;
379378
for ( int shaderIdx = 0; shaderIdx < shaderCount; ++shaderIdx )
380379
{
381380
auto& shader = shaders[shaderIdx];
@@ -1504,6 +1503,7 @@ void vhCmdBackendState::shutdown()
15041503
backendTextures.clear();
15051504
backendBuffers.clear();
15061505
backendShaders.clear();
1506+
backendTimerQueries.clear();
15071507

15081508
// Clear static caches
15091509
s_layoutToShader.clear();

src/vrhi_device.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ void vhInit( bool quiet )
153153
if ( !quiet ) VRHI_LOG( " Selecting physical device (via vk-bootstrap)\n" );
154154
vkb::PhysicalDeviceSelector selector( vkbInst );
155155

156-
VkPhysicalDeviceVulkan11Features v11Features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES };
157156
VkPhysicalDeviceVulkan12Features v12Features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES };
158157
v12Features.timelineSemaphore = VK_TRUE;
159158
v12Features.bufferDeviceAddress = VK_TRUE;
@@ -168,7 +167,6 @@ void vhInit( bool quiet )
168167
features.depthClamp = VK_TRUE;
169168

170169
selector.set_minimum_version( 1, 3 )
171-
.set_required_features_11( v11Features )
172170
.set_required_features_12( v12Features )
173171
.set_required_features_13( v13Features )
174172
.set_required_features( features );
@@ -222,6 +220,8 @@ void vhInit( bool quiet )
222220
{
223221
robustness2Enabled = vkbPhys.enable_extension_if_present( VK_EXT_ROBUSTNESS_2_EXTENSION_NAME );
224222
}
223+
bool shaderDrawParametersEnabled = vkbPhys.enable_extension_if_present( "VK_KHR_shader_draw_parameters" );
224+
if ( shaderDrawParametersEnabled && !quiet ) VRHI_LOG( " Enabled VK_KHR_shader_draw_parameters extension.\n" );
225225

226226
if ( !quiet ) VRHI_LOG( " Creating VK Logical Device (via vk-bootstrap)\n" );
227227
vkb::DeviceBuilder devBuilder( vkbPhys );
@@ -263,6 +263,13 @@ void vhInit( bool quiet )
263263
if ( !quiet && g_vhInit.robust ) VRHI_LOG( " Robustness2 extension missing or disabled.\n" );
264264
}
265265

266+
VkPhysicalDeviceVulkan11Features v11Feat = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES };
267+
if ( shaderDrawParametersEnabled )
268+
{
269+
v11Feat.shaderDrawParameters = VK_TRUE;
270+
devBuilder.add_pNext( &v11Feat );
271+
}
272+
266273
auto devRet = devBuilder.build();
267274
if ( !devRet )
268275
{
@@ -331,6 +338,10 @@ void vhInit( bool quiet )
331338
{
332339
s_enabledExtensions.push_back( VK_EXT_ROBUSTNESS_2_EXTENSION_NAME );
333340
}
341+
if ( shaderDrawParametersEnabled )
342+
{
343+
s_enabledExtensions.push_back( VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME );
344+
}
334345

335346
g_vulkanEnabledExtensionCount = ( uint32_t ) s_enabledExtensions.size();
336347

@@ -406,7 +417,6 @@ void vhShutdown( bool quiet )
406417
g_vhCmdThread.join();
407418
g_vhCmdThreadReady = false;
408419
vhBackendShutdown();
409-
g_vhDevice->runGarbageCollection();
410420
vhCmdListFlushAll();
411421

412422
if ( g_vulkanDevice != VK_NULL_HANDLE )
@@ -420,7 +430,8 @@ void vhShutdown( bool quiet )
420430
vhFBOCacheReset();
421431

422432
if ( !quiet ) VRHI_LOG( " Destroying NVRHI Device...\n" );
423-
g_vhDevice = nullptr; // RefCountPtr handles the release()
433+
for ( int i = 0; i < VRHI_MAX_FRAMES_INFLIGHT; i++ ) g_vhDevice->runGarbageCollection();
434+
g_vhDevice = nullptr;
424435

425436
// Clear resources
426437
if ( !quiet ) VRHI_LOG( " Clearing resources...\n" );

test/test_backend.cpp

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ UTEST( BackendInternal, PipelineValidation )
245245
std::lock_guard< std::mutex > lock( g_nvRHIStateMutex );
246246
shader.layout = nullptr;
247247
}
248+
vhFinish();
248249
}
249250

250251
UTEST( BackendInternal, PreSubmitCommon_PipelineDesc_Compute )
@@ -298,6 +299,7 @@ UTEST( BackendInternal, PreSubmitCommon_PipelineDesc_Compute )
298299
shaders[0].layout = nullptr;
299300
shaders[1].layout = nullptr;
300301
}
302+
vhFinish();
301303
}
302304

303305
class MockComputePipeline : public nvrhi::RefCounter<nvrhi::IComputePipeline>
@@ -384,6 +386,7 @@ UTEST( BackendInternal, PreSubmitCommon_State_Compute )
384386
layoutFail = nullptr;
385387
shader.layout = nullptr;
386388
}
389+
vhFinish();
387390
}
388391

389392
UTEST( Backend, FramebufferCaching )
@@ -742,6 +745,7 @@ UTEST( Backend, Util_WriteGlobalUniform )
742745
std::lock_guard< std::mutex > lock( g_nvRHIStateMutex );
743746
tb.Shutdown_DeviceStateLocked();
744747
}
748+
vhFinish();
745749
}
746750

747751
UTEST( Backend, VertexIndexBufferBinding )
@@ -822,7 +826,8 @@ UTEST( Backend, VertexIndexBufferBinding )
822826
const nvrhi::FramebufferInfo& getFramebufferInfo() const override { static nvrhi::FramebufferInfo i; return i; }
823827
};
824828

825-
gstate.pipeline = new MockGraphicsPipeline( layouts );
829+
auto mgp = std::make_unique< MockGraphicsPipeline >( layouts );
830+
gstate.pipeline = mgp.get();
826831

827832
EXPECT_TRUE( vhCmdBackendStateTest::PreSubmitCommon_State( state, &shader, 1, nullptr, &gstate ) );
828833

@@ -891,7 +896,7 @@ UTEST( Backend, VertexIndexBufferBinding )
891896
{
892897
auto bbuf = new vhBackendBuffer();
893898
nvrhi::BufferDesc desc; desc.setByteSize( 1024 ); desc.setIsIndexBuffer( true );
894-
{ std::lock_guard< std::mutex > lock( g_nvRHIStateMutex ); bbuf->handle = g_vhDevice->createBuffer( desc ); }
899+
{std::lock_guard< std::mutex > lock( g_nvRHIStateMutex );bbuf->handle = g_vhDevice->createBuffer( desc ); }
895900
bbuf->flags = 0;
896901
bbuf->stride = 2;
897902
vhCmdBackendStateTest::InsertDummyBuffer( ib16, bbuf );
@@ -905,18 +910,26 @@ UTEST( Backend, VertexIndexBufferBinding )
905910
EXPECT_EQ( gstate.indexBuffer.format, nvrhi::Format::R16_UINT );
906911

907912
// Cleanup
908-
vhCmdBackendStateTest::Shutdown();
909913
vhDestroyBuffer( vb );
910914
vhDestroyBuffer( vb2 );
911915
vhDestroyBuffer( vb3 );
912916
vhDestroyBuffer( ib32 );
913917
vhDestroyBuffer( ib16 );
914918
vhDestroyTexture( rtTex );
915919

920+
gstate.bindings.fill( nullptr );
921+
gstate.pipeline = nullptr;
922+
gdesc.bindingLayouts.fill( nullptr );
923+
layouts.fill( nullptr );
924+
mgp.reset( nullptr );
925+
916926
{
917927
std::lock_guard< std::mutex > lock( g_nvRHIStateMutex );
918928
shader.layout = nullptr;
919929
}
930+
vhBindingSetCacheClear();
931+
vhCmdBackendStateTest::Shutdown();
932+
vhFinish();
920933
}
921934

922935
UTEST( Backend, Util_WriteWorldUniform )
@@ -963,6 +976,7 @@ UTEST( Backend, Util_WriteWorldUniform )
963976
std::lock_guard< std::mutex > lock( g_nvRHIStateMutex );
964977
tb.Shutdown_DeviceStateLocked();
965978
}
979+
vhFinish();
966980
}
967981

968982
UTEST( Backend, PushConstantsDirtyBit )
@@ -1003,8 +1017,10 @@ UTEST( Backend, PushConstantsDirtyBit )
10031017
std::lock_guard< std::mutex > lock( g_nvRHIStateMutex );
10041018
vhSetPushConstant_DeviceStateLocked( cmdlist, state );
10051019
}
1020+
vhFinish();
10061021
}
10071022

1023+
10081024
UTEST( Backend, TimerQueryBasic )
10091025
{
10101026
if ( !g_testInit )
@@ -1042,6 +1058,7 @@ UTEST( Backend, TimerQueryBasic )
10421058
// Now we should have a result
10431059
float time = vhGetTimerQueryTime( timerID );
10441060
EXPECT_GT( time, 0.0f );
1061+
vhFinish();
10451062
}
10461063

10471064
UTEST( Backend, TimerQueryMultiple )
@@ -1069,6 +1086,7 @@ UTEST( Backend, TimerQueryMultiple )
10691086

10701087
EXPECT_GT( vhGetTimerQueryTime( timer1 ), 0.0f );
10711088
EXPECT_GT( vhGetTimerQueryTime( timer2 ), 0.0f );
1089+
vhFinish();
10721090
}
10731091

10741092
UTEST( Backend, TimerQueryErrors )
@@ -1086,4 +1104,5 @@ UTEST( Backend, TimerQueryErrors )
10861104

10871105
// Check invalid ID returns 0
10881106
EXPECT_EQ( vhGetTimerQueryTime( 0x999 ), 0.0f );
1107+
vhFinish();
10891108
}

test/test_gfx.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ struct VSInput
159159
{
160160
float3 pos : POSITION;
161161
float4 colour : COLOUR;
162-
uint instanceID : SV_InstanceID;
163162
};
164163
165164
struct VSOutput
@@ -169,10 +168,10 @@ struct VSOutput
169168
};
170169
171170
[shader("vertex")]
172-
VSOutput main( VSInput input )
171+
VSOutput main( VSInput input, uint instanceID : SV_VulkanInstanceID )
173172
{
174173
VSOutput output;
175-
float offset = float( input.instanceID ) * 0.1;
174+
float offset = float( instanceID ) * 0.1;
176175
output.pos = float4( input.pos.x + offset, input.pos.yz, 1.0 );
177176
output.colour = input.colour;
178177
return output;
@@ -411,7 +410,7 @@ UTEST_F( Graphics, DrawTriangleStrip )
411410
UTEST_F( Graphics, DepthTest )
412411
{
413412
vhTexture rt = CreateTestTexture( 64, 64, nvrhi::Format::RGBA8_UNORM );
414-
vhTexture ds = CreateTestTexture( 64, 64, nvrhi::Format::D24S8 );
413+
vhTexture ds = CreateTestTexture( 64, 64, nvrhi::Format::D32 );
415414

416415
struct Vertex { glm::vec3 pos; glm::vec4 colour; };
417416

@@ -1588,7 +1587,8 @@ float4 main( float4 pos : SV_Position ) : SV_Target
15881587
// Self-contained Fullscreen VS
15891588
static const char* g_fullscreenVS = R"(
15901589
[shader("vertex")]
1591-
float4 main( uint id : SV_VertexID ) : SV_Position
1590+
// Use SV_VulkanVertexID to avoid DrawParameters (gl_BaseVertex) dependency
1591+
float4 main( uint id : SV_VulkanVertexID ) : SV_Position
15921592
{
15931593
// Generates a triangle covering the screen: (-1,-1), (3,-1), (-1,3)
15941594
float2 uv = float2( (id << 1) & 2, id & 2 );

0 commit comments

Comments
 (0)