From 9bf934ed5c8855241bb5a4ae9fc9eb9e75c6b559 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 28 May 2019 20:12:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A03D=20shader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/graph/vulkan/VK.h | 10 ++++++++++ inc/hgl/graph/vulkan/VKCommandBuffer.h | 5 ++++- res/shader/FlatColor3D.vert | 12 ++++++++++-- res/shader/OnlyPosition3D.vert | 15 ++++++--------- src/RenderDevice/Vulkan/VKInstance.cpp | 2 +- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/inc/hgl/graph/vulkan/VK.h b/inc/hgl/graph/vulkan/VK.h index 646567b1..5cb1d753 100644 --- a/inc/hgl/graph/vulkan/VK.h +++ b/inc/hgl/graph/vulkan/VK.h @@ -52,6 +52,16 @@ class Renderable; using CharPointerList=hgl::List; +enum class ShaderType +{ + Vertex =VK_SHADER_STAGE_VERTEX_BIT, + TessControl =VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, + TessEval =VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, + Geometry =VK_SHADER_STAGE_GEOMETRY_BIT, + Fragment =VK_SHADER_STAGE_FRAGMENT_BIT, + Compute =VK_SHADER_STAGE_COMPUTE_BIT +};// + #ifdef _DEBUG bool CheckStrideBytesByFormat(); ///<检验所有数据类型长度数组是否符合规则 #endif//_DEBUG diff --git a/inc/hgl/graph/vulkan/VKCommandBuffer.h b/inc/hgl/graph/vulkan/VKCommandBuffer.h index 06cb2955..25a84301 100644 --- a/inc/hgl/graph/vulkan/VKCommandBuffer.h +++ b/inc/hgl/graph/vulkan/VKCommandBuffer.h @@ -90,7 +90,10 @@ public: return(true); } - void PushConstants(VkShaderStageFlagBits stage_flags,uint32_t offset,uint32_t size,const void *pValues){vkCmdPushConstants(cmd_buf,pipeline_layout,stage_flags,offset,size,pValues);} + void PushConstants(ShaderType shader_type,uint32_t offset,uint32_t size,const void *pValues) + { + vkCmdPushConstants(cmd_buf,pipeline_layout,(VkShaderStageFlagBits)shader_type,offset,size,pValues); + } bool Bind(Renderable *); diff --git a/res/shader/FlatColor3D.vert b/res/shader/FlatColor3D.vert index 33d624dc..b4869f28 100644 --- a/res/shader/FlatColor3D.vert +++ b/res/shader/FlatColor3D.vert @@ -3,10 +3,18 @@ layout(location = 0) in vec3 Vertex; layout(location = 1) in vec3 Color; -layout(binding = 0) uniform WorldConfig +layout(binding = 0) uniform SunLightConfig { + vec4 color; + vec4 direction; +} sun; + +layout(push_constant) uniform Consts { + mat4 projection; + mat4 modelview; mat4 mvp; -} world; + mat3 normal; +} matrix; layout(location = 0) out vec4 FragmentColor; diff --git a/res/shader/OnlyPosition3D.vert b/res/shader/OnlyPosition3D.vert index d0946938..6866b5b3 100644 --- a/res/shader/OnlyPosition3D.vert +++ b/res/shader/OnlyPosition3D.vert @@ -3,15 +3,12 @@ layout(location = 0) in vec3 Vertex; layout(location = 1) in vec3 Normal; -layout(binding = 0) uniform WorldConfig -{ +layout(push_constant) uniform MatrixConstants { + mat4 projection; + mat4 modelview; mat4 mvp; -} world; - -layout(push_constant) uniform SkyLightConsts { - vec4 sun_color; - vec4 sun_direction; -} skylight; + mat3 normal; +}matrix; layout(location = 0) out vec4 FragmentColor; layout(location = 1) out vec3 FragmentNormal; @@ -21,5 +18,5 @@ void main() FragmentColor=vec4(Color,1.0); FragmentNormal=Normal; - gl_Position=vec4(Vertex,1.0)*world.mvp; + gl_Position=vec4(Vertex,1.0)*matrix.mvp; } diff --git a/src/RenderDevice/Vulkan/VKInstance.cpp b/src/RenderDevice/Vulkan/VKInstance.cpp index 5a45e511..a792e23f 100644 --- a/src/RenderDevice/Vulkan/VKInstance.cpp +++ b/src/RenderDevice/Vulkan/VKInstance.cpp @@ -153,7 +153,7 @@ Instance *CreateInstance(const UTF8String &app_name) "VK_LAYER_LUNARG_standard_validation", "VK_LAYER_LUNARG_parameter_validation", // "VK_LAYER_LUNARG_vktrace", -// "VK_LAYER_RENDERDOC_Capture", + "VK_LAYER_RENDERDOC_Capture", // "VK_LAYER_KHRONOS_validation",