From a655a8be065a0f0cba1625ab15f4e8694a29560e Mon Sep 17 00:00:00 2001 From: nek0 Date: Wed, 19 Apr 2023 15:20:44 +0200 Subject: [PATCH] first little steps --- flake.lock | 30 +++++++++++++++++++----- shadersrc/rainbow_lit.frag | 1 + src/CommandBuffer.hs | 48 +++++++++++++++++++++----------------- src/Init.hs | 2 +- 4 files changed, 53 insertions(+), 28 deletions(-) diff --git a/flake.lock b/flake.lock index 57053c1..d163f94 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,15 @@ { "nodes": { "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1680776469, - "narHash": "sha256-3CXUDK/3q/kieWtdsYpDOBJw3Gw4Af6x+2EiSnIkNQw=", + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", "owner": "numtide", "repo": "flake-utils", - "rev": "411e8764155aa9354dbcd6d5faaeb97e9e3dce24", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", "type": "github" }, "original": { @@ -17,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1680910595, - "narHash": "sha256-LA6EEVZrHO2qdgvwFBbXc0N7IVI2VziXgzejGrtQrjg=", + "lastModified": 1681647474, + "narHash": "sha256-9CLzptrmk9TjN9gpiINUwuVoFEyN0BuPM6Cy/FbP38k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d682cbf1548727b57ed1071e02399a4109384bb1", + "rev": "d68fa3ed1e489582e7a3063831c8fd1f3d1a8a38", "type": "github" }, "original": { @@ -35,6 +38,21 @@ "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/shadersrc/rainbow_lit.frag b/shadersrc/rainbow_lit.frag index 071e1f1..af11724 100644 --- a/shadersrc/rainbow_lit.frag +++ b/shadersrc/rainbow_lit.frag @@ -16,5 +16,6 @@ layout(set = 0, binding = 1) uniform SceneData{ void main() { //outColor = vec4(fragColor.xyz + sceneData.ambientColor.xyz, 1.0f); + //outColor = fragColor; outColor = sceneData.ambientColor; } diff --git a/src/CommandBuffer.hs b/src/CommandBuffer.hs index 0dc8fbc..7b126ce 100644 --- a/src/CommandBuffer.hs +++ b/src/CommandBuffer.hs @@ -25,6 +25,7 @@ import Devices import Types import Memory import Util +import Control.Exception (bracket, bracket_) frameOverlap :: Int frameOverlap = 2 @@ -275,30 +276,31 @@ recordCommandBuffer deviceProps - scenePointer <- VMA.mapMemory allocator (bufferAllocation sceneParameterBuffer) + liftIO $ VMA.withMappedMemory allocator (bufferAllocation sceneParameterBuffer) bracket $ + \scenePointer -> - -- dataPointer <- liftIO $ new scenePointer + -- dataPointer <- liftIO $ new scenePointer - -- paramsPtr <- liftIO (new ambientParams) + -- paramsPtr <- liftIO (new ambientParams) - -- liftIO $ copyBytes - -- (scenePointer `plusPtr` (fromIntegral sceneDataOffset * fromIntegral frameIndex)) - -- paramsPtr - -- (sizeOf undefinedGPUSceneData) + -- liftIO $ copyBytes + -- (scenePointer `plusPtr` (fromIntegral sceneDataOffset * fromIntegral frameIndex)) + -- paramsPtr + -- (sizeOf undefinedGPUSceneData) - liftIO $ poke - (castPtr scenePointer `plusPtr` (fromIntegral sceneDataOffset * frameIndex)) - -- (castPtr scenePointer `plusPtr` - -- (fromIntegral $ - -- padUniformBufferSize (fromIntegral $ sizeOf (undefinedGPUSceneData)) deviceProps))-- * - -- -- fromIntegral frameIndex)) - ambientParams + liftIO $ poke + (castPtr scenePointer `plusPtr` (fromIntegral sceneDataOffset * frameIndex)) + -- (castPtr scenePointer `plusPtr` + -- (fromIntegral $ + -- padUniformBufferSize (fromIntegral $ sizeOf (undefinedGPUSceneData)) deviceProps))-- * + -- -- fromIntegral frameIndex)) + ambientParams - -- liftIO $ do - -- test <- peek (castPtr scenePointer :: Ptr GPUSceneData) - -- print test + -- liftIO $ do + -- test <- peek (castPtr scenePointer :: Ptr GPUSceneData) + -- print test - VMA.unmapMemory allocator (bufferAllocation sceneParameterBuffer) + -- VMA.unmapMemory allocator (bufferAllocation sceneParameterBuffer) renderObjects <- (liftIO . STM.atomically . STM.readTMVar) =<< asks renderables meshMap <- (liftIO . STM.atomically . STM.readTMVar) =<< asks meshLibrary @@ -330,11 +332,15 @@ recordCommandBuffer mesh = meshMap M.! meshID material = materialMap M.! materialID - memoryPointer <- VMA.mapMemory allocator (bufferAllocation $ frameCameraBuffer frame) + liftIO $ VMA.withMappedMemory + allocator + (bufferAllocation $ frameCameraBuffer frame) + bracket + $ \memoryPointer -> - liftIO $ poke (castPtr memoryPointer) cameraData + liftIO $ poke (castPtr memoryPointer) cameraData - VMA.unmapMemory allocator (bufferAllocation $ frameCameraBuffer frame) + -- VMA.unmapMemory allocator (bufferAllocation $ frameCameraBuffer frame) Vk.cmdBindPipeline commandBuffer Vk.PIPELINE_BIND_POINT_GRAPHICS (materialPipeline material) diff --git a/src/Init.hs b/src/Init.hs index 6e74c23..4022386 100644 --- a/src/Init.hs +++ b/src/Init.hs @@ -203,7 +203,7 @@ initDescriptors device = do 0 sceneBind = descriptorsetLayoutBinding Vk.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC - (Vk.SHADER_STAGE_VERTEX_BIT .|. Vk.SHADER_STAGE_FRAGMENT_BIT) + Vk.SHADER_STAGE_FRAGMENT_BIT 1 objectBind = descriptorsetLayoutBinding Vk.DESCRIPTOR_TYPE_STORAGE_BUFFER