diff --git a/assets/shaders/gradient.comp.spv b/assets/shaders/gradient.comp.spv index 1bae4a0..6b76056 100644 Binary files a/assets/shaders/gradient.comp.spv and b/assets/shaders/gradient.comp.spv differ diff --git a/assets/shaders/pbr.frag.spv b/assets/shaders/pbr.frag.spv index a354898..f097141 100644 Binary files a/assets/shaders/pbr.frag.spv and b/assets/shaders/pbr.frag.spv differ diff --git a/assets/shaders/pbr.vert.spv b/assets/shaders/pbr.vert.spv index 24c8ef2..3440819 100644 Binary files a/assets/shaders/pbr.vert.spv and b/assets/shaders/pbr.vert.spv differ diff --git a/dub.json b/dub.json index 8d71202..516ed99 100644 --- a/dub.json +++ b/dub.json @@ -16,7 +16,7 @@ "versions": ["VULKAN_DEBUG"], "preGenerateCommands-linux": ["./build.sh"], "preGenerateCommands-windows": [], - "dflags": ["-Xcc=-mno-sse", "-P-I/usr/include/freetype2", "-vgc", "-Jbuild", "-Jassets/fonts"], + "dflags": ["-Xcc=-mno-sse", "-P-I/usr/include/freetype2", "-Jbuild", "-Jassets/fonts"], "dflags-dmd": ["-P=-DSTBI_NO_SIMD"] }, { diff --git a/src/VulkanRenderer b/src/VulkanRenderer index 53c500c..1b4d997 160000 --- a/src/VulkanRenderer +++ b/src/VulkanRenderer @@ -1 +1 @@ -Subproject commit 53c500c302e87799b01bb99356780c9c51b41170 +Subproject commit 1b4d9979765ca8a1c1f45ddf8420edc93d1b79dc diff --git a/src/gears/game2.d b/src/gears/game2.d index d5ad175..cfbdaf3 100644 --- a/src/gears/game2.d +++ b/src/gears/game2.d @@ -14,12 +14,28 @@ struct RenderState { Renderer rd; Arena[2] frame_arenas; + + PushConst pc; + ShaderGlobals globals; + Pipeline pipeline_pbr; DescSetLayout desc_layout_globals; DescSetLayout desc_layout_resources; DescSet[2] desc_set_globals; DescSet[2] desc_set_resources; PipelineLayout pipeline_layout_pbr; + + ImageView placeholder_tex; + Buffer globals_buffer; +} + +struct ShaderGlobals +{ + Vec4 ambient; + Vec4 diffuse; + Vec4 specular; + f32 shininess = 0.0; + f32 alpha = 0.0; } struct PushConst @@ -76,7 +92,7 @@ Init(RenderState* rds, PlatformWindow* window) }; } - DescLayoutBinding[5] global_bindings = [ + DescLayoutBinding[3] global_bindings = [ { binding: 0, descriptorType: DT.Uniform, descriptorCount: 1, stageFlags: SS.All }, { binding: 1, descriptorType: DT.StorageTexelBuf, descriptorCount: 1, stageFlags: SS.All }, { binding: 2, descriptorType: DT.StorageImage, descriptorCount: 1, stageFlags: SS.All }, @@ -124,4 +140,24 @@ Init(RenderState* rds, PlatformWindow* window) bool result = CreateGraphicsPipeline(&rds.rd, &rds.pipeline_pbr, &pbr_info); assert(result); + + const u64 tex_size = 32*32*4; + u8[tex_size] placeholder_tex; + + u8[4] magenta = [255, 0, 255, 255]; + u8[4] black = [0, 0, 0, 255]; + u64 half = tex_size/2; + for(u64 i = 0; i < tex_size; i += 32) + { + bool swap = i <= half; + for(u64 j = 0; j < 16; j += 4) + { + placeholder_tex[i+j .. i+j+4] = !swap ? magenta[0 .. $] : black[0 .. $]; + placeholder_tex[i+j+16 .. i+j+16+4] = !swap ? black[0 .. $] : magenta[0 .. $]; + } + } + + CreateImageView(&rds.rd, &rds.placeholder_tex, 32, 32, 4, placeholder_tex); + + CreateBuffer(&rds.rd, &rds.globals_buffer, BT.Uniform, ShaderGlobals.sizeof, false); } diff --git a/src/shaders/structures.layout b/src/shaders/structures.layout index 02a1100..9e5c237 100644 --- a/src/shaders/structures.layout +++ b/src/shaders/structures.layout @@ -32,25 +32,21 @@ layout (set = 1, binding = 0) uniform Globals { layout (set = 1, binding = 1, rg32ui) uniform coherent uimageBuffer ImageABuffer; -layout (set = 2, binding = 2, r32ui) uniform coherent uimage2D ImageAux; +layout (set = 1, binding = 2, r32ui) uniform coherent uimage2D ImageAux; // SET 2 -layout (set = 1, binding = 0) uniform texture2D Textures[IMG_MAX]; +layout (set = 2, binding = 0) uniform texture2D Textures[IMG_MAX]; -layout (set = 1, binding = 1) uniform Material { - vec4 ambient; - vec4 diffuse; - vec4 specular; - bool albedo_has_texture; - bool ambient_has_texture; - bool specular_has_texture; - bool alpha_has_texture; +layout (set = 2, binding = 1) uniform Material { + vec4 ambient; + vec4 diffuse; + vec4 specular; float shininess; float alpha; } Materials[BUF_MAX]; -layout (set = 1, binding = 2) uniform ModelState { +layout (set = 2, binding = 2) uniform ModelState { mat4 model_matrix; } State[UNI_MAX];