Browse Source

transfer textures and samplers as global parameters and not per hit group

Kolja Strohm 1 tuần trước cách đây
mục cha
commit
786e47b613

+ 0 - 3
FactoryCraft/ChunkAnyHit.hlsl

@@ -1,8 +1,5 @@
 #include "Common.hlsl"
 
-Texture2D<float4> textures[] : register(t0, space1);
-SamplerState gSampler : register(s0, space0);
-
 [shader("anyhit")]
 void ChunkAnyHit(inout HitInfo payload, ChunkHitAttributes attrib)
 {

+ 0 - 3
FactoryCraft/ChunkClosestHit.hlsl

@@ -1,8 +1,5 @@
 #include "Common.hlsl"
 
-Texture2D<float4> textures[] : register(t0, space1);
-SamplerState gSampler : register(s0, space0);
-
 [shader("closesthit")]
 void ChunkClosestHit(inout HitInfo payload, ChunkHitAttributes attrib)
 {

+ 5 - 1
FactoryCraft/Common.hlsl

@@ -45,4 +45,8 @@ float3 unpackLight(int light)
     float g = ((light >> 8) & 0xFF) / 255.0f;
     float b = (light & 0xFF) / 255.0f;
     return float3(r, g, b);
-}
+}
+
+// Global resources
+Texture2D<float4> textures[] : register(t0, space1);
+SamplerState gSampler : register(s0, space0);

+ 11 - 26
FactoryCraft/CustomDX12API.cpp

@@ -21,7 +21,7 @@ using namespace Framework;
 
 CustomDX12API::CustomDX12API()
     : DirectX12()
-{} 
+{}
 
 CustomDX12API::~CustomDX12API() {}
 
@@ -29,6 +29,15 @@ void CustomDX12API::initializePipeline()
 {
     if (pipeline->getShaders().getEntryCount() == 0)
     { // add default shaders
+        pipeline->zGlobalSignature()->addRegisterUsageLinkedToDescriptorHeap(
+            0, DX12_SHADER_REGISTER_S_SAMPLER, 0, 0, SAMPLER_DESCRIPTOR_HEAP);
+        pipeline->zGlobalSignature()->addRegisterUsageLinkedToDescriptorHeap(0,
+            DX12_SHADER_REGISTER_T_SHADER_RESOURCE,
+            0,
+            1,
+            TEXTURE_DESCRIPTOR_HEAP,
+            1);
+
         DX12Shader* rayGenShader = new DX12Shader(
             CustomCustomRayGenShader, sizeof(CustomCustomRayGenShader));
         // RayGen from RayGen.hlsl
@@ -54,14 +63,6 @@ void CustomDX12API::initializePipeline()
         pipeline->addShader(missShader);
 
         DX12ShaderSignature* hitSignature = new DX12ShaderSignature();
-        hitSignature->addRegisterUsageLinkedToDescriptorHeap(
-            0, DX12_SHADER_REGISTER_S_SAMPLER, 0, 0, SAMPLER_DESCRIPTOR_HEAP);
-        hitSignature->addRegisterUsageLinkedToDescriptorHeap(0,
-            DX12_SHADER_REGISTER_T_SHADER_RESOURCE,
-            0,
-            1,
-            TEXTURE_DESCRIPTOR_HEAP,
-            1);
         sbtTextureIdBufferOffset
             = hitSignature->addRegisterUsageLinkedToShaderBindingTable(
                 DX12_SHADER_REGISTER_T_SHADER_RESOURCE, 1, 2);
@@ -101,14 +102,6 @@ void CustomDX12API::initializePipeline()
 
         // Chunk ray traversal shaders
         DX12ShaderSignature* chunkHitSignature = new DX12ShaderSignature();
-        chunkHitSignature->addRegisterUsageLinkedToDescriptorHeap(
-            0, DX12_SHADER_REGISTER_S_SAMPLER, 0, 0, SAMPLER_DESCRIPTOR_HEAP);
-        chunkHitSignature->addRegisterUsageLinkedToDescriptorHeap(0,
-            DX12_SHADER_REGISTER_T_SHADER_RESOURCE,
-            0,
-            1,
-            TEXTURE_DESCRIPTOR_HEAP,
-            1);
         sbtChunkTextureIdBufferOffset
             = chunkHitSignature->addRegisterUsageLinkedToShaderBindingTable(
                 DX12_SHADER_REGISTER_T_SHADER_RESOURCE, 1, 2);
@@ -159,16 +152,8 @@ void CustomDX12API::initializePipeline()
         pipeline->addHitGroup(chunkHitGroup);
 
         // simple blocks hit shaders
-         DX12ShaderSignature* simpleBlocksHitSignature
+        DX12ShaderSignature* simpleBlocksHitSignature
             = new DX12ShaderSignature();
-        simpleBlocksHitSignature->addRegisterUsageLinkedToDescriptorHeap(
-            0, DX12_SHADER_REGISTER_S_SAMPLER, 0, 0, SAMPLER_DESCRIPTOR_HEAP);
-        simpleBlocksHitSignature->addRegisterUsageLinkedToDescriptorHeap(0,
-            DX12_SHADER_REGISTER_T_SHADER_RESOURCE,
-            0,
-            1,
-            TEXTURE_DESCRIPTOR_HEAP,
-            1);
         sbtSimpleBlocksTextureIdBufferOffset
             = simpleBlocksHitSignature
                   ->addRegisterUsageLinkedToShaderBindingTable(

+ 0 - 3
FactoryCraft/DefaultAnyHit.hlsl

@@ -1,8 +1,5 @@
 #include "Common.hlsl"
 
-Texture2D<float4> textures[] : register(t0, space1);
-SamplerState gSampler : register(s0, space0);
-
 struct VertexData
 {
     float2 texcoord;

+ 0 - 3
FactoryCraft/DefaultClosestHit.hlsl

@@ -1,8 +1,5 @@
 #include "Common.hlsl"
 
-Texture2D<float4> textures[] : register(t0, space1);
-SamplerState gSampler : register(s0, space0);
-
 struct VertexData
 {
     float2 texcoord;

+ 3 - 2
FactoryCraft/PlayerKam.cpp

@@ -102,7 +102,7 @@ void PlayerKam::doKeyboardEvent(Framework::KeyboardEvent& te)
         {
             bool oldControl = kameraControll;
             kameraControll = 0;
-            movementFlags = 0;
+            movementFlags = movementFlags & MovementFlags::FLYING; // reset all but flying
             setShowCursor(true);
             if (!oldControl)
                 ((Game*)(Menu*)menuRegister->get("game"))->closeCurrentDialog();
@@ -178,7 +178,8 @@ void PlayerKam::doMouseEvent(Framework::MouseEvent& me)
     {
         kameraControll = 0;
         setShowCursor(true);
-        movementFlags = 0;
+        movementFlags
+            = movementFlags & MovementFlags::FLYING; // reset all but flying
     }
     else
     {

+ 0 - 3
FactoryCraft/SimpleBlocksAnyHit.hlsl

@@ -1,8 +1,5 @@
 #include "Common.hlsl"
 
-Texture2D<float4> textures[] : register(t0, space1);
-SamplerState gSampler : register(s0, space0);
-
 struct VertexData
 {
     float2 texcoord;

+ 0 - 3
FactoryCraft/SimpleBlocksClosestHit.hlsl

@@ -1,8 +1,5 @@
 #include "Common.hlsl"
 
-Texture2D<float4> textures[] : register(t0, space1);
-SamplerState gSampler : register(s0, space0);
-
 struct VertexData
 {
     float2 texcoord;