import bindless; import ibl_common; import common_structs; const static float3 trianglePoints[] = { float3(-1.0f, -1.0f, 1.0f), float3(3.0f, -1.0f, 1.0f), float3(-1.0f, 3.0f, 1.0f), }; [vk::push_constant] uniform Block pcb; struct VS_Output { float4 vertexPosition : SV_Position; float3 worldPosition : World_Position; }; [shader("vertex")] VS_Output vsmain( uint vertexId : SV_VertexID ) { VS_Output stageOutput; stageOutput.vertexPosition = float4(trianglePoints[vertexId], 1.0f); float4 clipSpace = mul(float4(trianglePoints[vertexId], 1.0f), pcb.camera->invProj); float4 worldSpace = mul(clipSpace / clipSpace.wwww, pcb.camera->invView); stageOutput.worldPosition = worldSpace.xyz; return stageOutput; } [shader("fragment")] float4 fsmain(float3 worldPosition: World_Position) : SV_Target0 { float3 direction = normalize(worldPosition - pcb.camera->position.xyz); #ifndef _DEBUG float4 color = pcb.lights->environment.Sample(direction); #else float4 color; if (pcb.showDiffuse) { color = pcb.lights->diffuseIrradiance.Sample(direction); } else if (pcb.showPrefilter) { color = pcb.lights->prefilter.Sample(direction); } else { color = pcb.lights->environment.Sample(direction); } #endif return float4(Uncharted2Tonemap(color.rgb), color.a); }