From 6555f3f867ff897affd8eeb892dc445b4e9ac5f7 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 26 Oct 2015 17:32:47 +0800 Subject: MR 542: Remaining items from the cleanup bug (WIP) depthStencilAttachment is replaced by pDepthStencilAttachment. s/VK_CULL_MODE_FRONT\b/VK_CULL_MODE_FRONT_BIT/g s/VK_CULL_MODE_BACK\b/VK_CULL_MODE_BACK_BIT/g s/VK_SAMPLER_ADDRESS_MODE_WRAP\b/VK_SAMPLER_ADDRESS_MODE_REPEAT/g s/VK_SAMPLER_ADDRESS_MODE_MIRROR\b/VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT/g s/VK_SAMPLER_ADDRESS_MODE_CLAMP\b/VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE/g s/VK_SAMPLER_ADDRESS_MODE_MIRROR_ONCE\b/VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE/g s/VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER\b/VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER/g https://gitlab.khronos.org/vulkan/vulkan/merge_requests/542 --- demos/cube.c | 23 +++--- demos/tri.c | 23 +++--- include/vulkan.h | 194 +++++++++++++++++++++++------------------------ layers/draw_state.cpp | 32 +++++--- layers/image.cpp | 3 +- layers/param_checker.cpp | 28 ++----- 6 files changed, 139 insertions(+), 164 deletions(-) diff --git a/demos/cube.c b/demos/cube.c index 68fde35d..be5d1b5f 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -1178,9 +1178,9 @@ static void demo_prepare_textures(struct demo *demo) .magFilter = VK_FILTER_NEAREST, .minFilter = VK_FILTER_NEAREST, .mipmapMode = VK_SAMPLER_MIPMAP_MODE_BASE, - .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP, - .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP, - .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP, + .addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, + .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, + .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, .mipLodBias = 0.0f, .maxAnisotropy = 1, .compareOp = VK_COMPARE_OP_NEVER, @@ -1332,8 +1332,6 @@ static void demo_prepare_render_pass(struct demo *demo) { const VkAttachmentDescription attachments[2] = { [0] = { - .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION, - .pNext = NULL, .format = demo->format, .samples = 1, .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, @@ -1344,8 +1342,6 @@ static void demo_prepare_render_pass(struct demo *demo) .finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, }, [1] = { - .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION, - .pNext = NULL, .format = demo->depth.format, .samples = 1, .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, @@ -1360,9 +1356,11 @@ static void demo_prepare_render_pass(struct demo *demo) .attachment = 0, .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, }; + const VkAttachmentReference depth_reference = { + .attachment = 1, + .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, + }; const VkSubpassDescription subpass = { - .sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION, - .pNext = NULL, .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, .flags = 0, .inputAttachmentCount = 0, @@ -1370,10 +1368,7 @@ static void demo_prepare_render_pass(struct demo *demo) .colorAttachmentCount = 1, .pColorAttachments = &color_reference, .pResolveAttachments = NULL, - .depthStencilAttachment = { - .attachment = 1, - .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - }, + .pDepthStencilAttachment = &depth_reference, .preserveAttachmentCount = 0, .pPreserveAttachments = NULL, }; @@ -1587,7 +1582,7 @@ static void demo_prepare_pipeline(struct demo *demo) memset(&rs, 0, sizeof(rs)); rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO; rs.fillMode = VK_FILL_MODE_SOLID; - rs.cullMode = VK_CULL_MODE_BACK; + rs.cullMode = VK_CULL_MODE_BACK_BIT; rs.frontFace = VK_FRONT_FACE_CCW; rs.depthClampEnable = VK_FALSE; rs.rasterizerDiscardEnable = VK_FALSE; diff --git a/demos/tri.c b/demos/tri.c index e2bc31ec..a5c30e31 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -937,9 +937,9 @@ static void demo_prepare_textures(struct demo *demo) .magFilter = VK_FILTER_NEAREST, .minFilter = VK_FILTER_NEAREST, .mipmapMode = VK_SAMPLER_MIPMAP_MODE_BASE, - .addressModeU = VK_SAMPLER_ADDRESS_MODE_WRAP, - .addressModeV = VK_SAMPLER_ADDRESS_MODE_WRAP, - .addressModeW = VK_SAMPLER_ADDRESS_MODE_WRAP, + .addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT, + .addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT, + .addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT, .mipLodBias = 0.0f, .maxAnisotropy = 1, .compareOp = VK_COMPARE_OP_NEVER, @@ -1091,8 +1091,6 @@ static void demo_prepare_render_pass(struct demo *demo) { const VkAttachmentDescription attachments[2] = { [0] = { - .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION, - .pNext = NULL, .format = demo->format, .samples = 1, .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, @@ -1103,8 +1101,6 @@ static void demo_prepare_render_pass(struct demo *demo) .finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, }, [1] = { - .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION, - .pNext = NULL, .format = demo->depth.format, .samples = 1, .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, @@ -1119,9 +1115,11 @@ static void demo_prepare_render_pass(struct demo *demo) .attachment = 0, .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, }; + const VkAttachmentReference depth_reference = { + .attachment = 1, + .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, + }; const VkSubpassDescription subpass = { - .sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION, - .pNext = NULL, .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, .flags = 0, .inputAttachmentCount = 0, @@ -1129,10 +1127,7 @@ static void demo_prepare_render_pass(struct demo *demo) .colorAttachmentCount = 1, .pColorAttachments = &color_reference, .pResolveAttachments = NULL, - .depthStencilAttachment = { - .attachment = 1, - .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, - }, + .pDepthStencilAttachment = &depth_reference, .preserveAttachmentCount = 0, .pPreserveAttachments = NULL, }; @@ -1337,7 +1332,7 @@ static void demo_prepare_pipeline(struct demo *demo) memset(&rs, 0, sizeof(rs)); rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO; rs.fillMode = VK_FILL_MODE_SOLID; - rs.cullMode = VK_CULL_MODE_BACK; + rs.cullMode = VK_CULL_MODE_BACK_BIT; rs.frontFace = VK_FRONT_FACE_CW; rs.depthClampEnable = VK_FALSE; rs.rasterizerDiscardEnable = VK_FALSE; diff --git a/include/vulkan.h b/include/vulkan.h index 38339984..d288e4a5 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -132,60 +132,57 @@ typedef enum { typedef enum { VK_STRUCTURE_TYPE_APPLICATION_INFO = 0, - VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1, - VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2, - VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 3, - VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 4, - VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 5, - VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 6, - VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 7, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 8, - VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 9, + VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2, + VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3, + VK_STRUCTURE_TYPE_SUBMIT_INFO = 4, + VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 5, + VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6, + VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7, + VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8, + VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9, VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10, - VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 11, - VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 12, - VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 13, - VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 14, - VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 15, - VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 16, - VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 17, - VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 18, - VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 19, - VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 20, - VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 21, - VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 22, - VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 23, - VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 24, - VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 25, - VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 26, - VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 27, - VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 28, - VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 29, - VK_STRUCTURE_TYPE_MEMORY_BARRIER = 30, - VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 31, - VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 32, - VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33, - VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 34, - VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 35, - VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 36, - VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 37, - VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 38, - VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 39, - VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION = 40, - VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION = 41, - VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY = 42, + VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11, + VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12, + VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13, + VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14, + VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15, + VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16, + VK_STRUCTURE_TYPE_SHADER_CREATE_INFO = 17, + VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 18, + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 19, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 20, + VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 21, + VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 22, + VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 23, + VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO = 24, + VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 25, + VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 26, + VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 27, + VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 28, + VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 29, + VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 30, + VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 31, + VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 32, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 33, + VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 34, + VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 35, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 36, + VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 37, + VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 38, + VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 39, + VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 40, + VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO = 41, + VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 42, VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43, - VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO = 44, - VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 45, - VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 46, - VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOC_INFO = 47, - VK_STRUCTURE_TYPE_SUBMIT_INFO = 48, - VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 49, - VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 50, - VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 51, + VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44, + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45, + VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46, + VK_STRUCTURE_TYPE_LAYER_INSTANCE_CREATE_INFO = 47, + VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO = 48, VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO, - VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO, - VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_BIND_SPARSE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1), + VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO, + VK_STRUCTURE_TYPE_NUM = (VK_STRUCTURE_TYPE_LAYER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1), VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkStructureType; @@ -401,11 +398,11 @@ typedef enum { } VkImageType; typedef enum { - VK_IMAGE_TILING_LINEAR = 0, - VK_IMAGE_TILING_OPTIMAL = 1, - VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_LINEAR, - VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_OPTIMAL, - VK_IMAGE_TILING_NUM = (VK_IMAGE_TILING_OPTIMAL - VK_IMAGE_TILING_LINEAR + 1), + VK_IMAGE_TILING_OPTIMAL = 0, + VK_IMAGE_TILING_LINEAR = 1, + VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL, + VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR, + VK_IMAGE_TILING_NUM = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1), VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF } VkImageTiling; @@ -471,15 +468,16 @@ typedef enum { } VkImageViewType; typedef enum { - VK_CHANNEL_SWIZZLE_ZERO = 0, - VK_CHANNEL_SWIZZLE_ONE = 1, - VK_CHANNEL_SWIZZLE_R = 2, - VK_CHANNEL_SWIZZLE_G = 3, - VK_CHANNEL_SWIZZLE_B = 4, - VK_CHANNEL_SWIZZLE_A = 5, - VK_CHANNEL_SWIZZLE_BEGIN_RANGE = VK_CHANNEL_SWIZZLE_ZERO, + VK_CHANNEL_SWIZZLE_IDENTITY = 0, + VK_CHANNEL_SWIZZLE_ZERO = 1, + VK_CHANNEL_SWIZZLE_ONE = 2, + VK_CHANNEL_SWIZZLE_R = 3, + VK_CHANNEL_SWIZZLE_G = 4, + VK_CHANNEL_SWIZZLE_B = 5, + VK_CHANNEL_SWIZZLE_A = 6, + VK_CHANNEL_SWIZZLE_BEGIN_RANGE = VK_CHANNEL_SWIZZLE_IDENTITY, VK_CHANNEL_SWIZZLE_END_RANGE = VK_CHANNEL_SWIZZLE_A, - VK_CHANNEL_SWIZZLE_NUM = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_ZERO + 1), + VK_CHANNEL_SWIZZLE_NUM = (VK_CHANNEL_SWIZZLE_A - VK_CHANNEL_SWIZZLE_IDENTITY + 1), VK_CHANNEL_SWIZZLE_MAX_ENUM = 0x7FFFFFFF } VkChannelSwizzle; @@ -511,26 +509,15 @@ typedef enum { } VkPrimitiveTopology; typedef enum { - VK_FILL_MODE_POINTS = 0, + VK_FILL_MODE_SOLID = 0, VK_FILL_MODE_WIREFRAME = 1, - VK_FILL_MODE_SOLID = 2, - VK_FILL_MODE_BEGIN_RANGE = VK_FILL_MODE_POINTS, - VK_FILL_MODE_END_RANGE = VK_FILL_MODE_SOLID, - VK_FILL_MODE_NUM = (VK_FILL_MODE_SOLID - VK_FILL_MODE_POINTS + 1), + VK_FILL_MODE_POINTS = 2, + VK_FILL_MODE_BEGIN_RANGE = VK_FILL_MODE_SOLID, + VK_FILL_MODE_END_RANGE = VK_FILL_MODE_POINTS, + VK_FILL_MODE_NUM = (VK_FILL_MODE_POINTS - VK_FILL_MODE_SOLID + 1), VK_FILL_MODE_MAX_ENUM = 0x7FFFFFFF } VkFillMode; -typedef enum { - VK_CULL_MODE_NONE = 0, - VK_CULL_MODE_FRONT = 1, - VK_CULL_MODE_BACK = 2, - VK_CULL_MODE_FRONT_AND_BACK = 3, - VK_CULL_MODE_BEGIN_RANGE = VK_CULL_MODE_NONE, - VK_CULL_MODE_END_RANGE = VK_CULL_MODE_FRONT_AND_BACK, - VK_CULL_MODE_NUM = (VK_CULL_MODE_FRONT_AND_BACK - VK_CULL_MODE_NONE + 1), - VK_CULL_MODE_MAX_ENUM = 0x7FFFFFFF -} VkCullMode; - typedef enum { VK_FRONT_FACE_CCW = 0, VK_FRONT_FACE_CW = 1, @@ -667,14 +654,14 @@ typedef enum { } VkSamplerMipmapMode; typedef enum { - VK_SAMPLER_ADDRESS_MODE_WRAP = 0, - VK_SAMPLER_ADDRESS_MODE_MIRROR = 1, - VK_SAMPLER_ADDRESS_MODE_CLAMP = 2, - VK_SAMPLER_ADDRESS_MODE_MIRROR_ONCE = 3, - VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER = 4, - VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_WRAP, - VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER, - VK_SAMPLER_ADDRESS_MODE_NUM = (VK_SAMPLER_ADDRESS_MODE_CLAMP_BORDER - VK_SAMPLER_ADDRESS_MODE_WRAP + 1), + VK_SAMPLER_ADDRESS_MODE_REPEAT = 0, + VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2, + VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3, + VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4, + VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT, + VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, + VK_SAMPLER_ADDRESS_MODE_NUM = (VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1), VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF } VkSamplerAddressMode; @@ -729,11 +716,11 @@ typedef enum { } VkAttachmentStoreOp; typedef enum { - VK_PIPELINE_BIND_POINT_COMPUTE = 0, - VK_PIPELINE_BIND_POINT_GRAPHICS = 1, - VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE, - VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS, - VK_PIPELINE_BIND_POINT_NUM = (VK_PIPELINE_BIND_POINT_GRAPHICS - VK_PIPELINE_BIND_POINT_COMPUTE + 1), + VK_PIPELINE_BIND_POINT_GRAPHICS = 0, + VK_PIPELINE_BIND_POINT_COMPUTE = 1, + VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS, + VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE, + VK_PIPELINE_BIND_POINT_NUM = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1), VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF } VkPipelineBindPoint; @@ -922,6 +909,7 @@ typedef enum { VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, + VK_SHADER_STAGE_ALL_GRAPHICS = 0x1F, VK_SHADER_STAGE_ALL = 0x7FFFFFFF, } VkShaderStageFlagBits; typedef VkFlags VkPipelineCacheCreateFlags; @@ -938,6 +926,14 @@ typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; typedef VkFlags VkPipelineTesselationStateCreateFlags; typedef VkFlags VkPipelineViewportStateCreateFlags; typedef VkFlags VkPipelineRasterStateCreateFlags; + +typedef enum { + VK_CULL_MODE_NONE = 0, + VK_CULL_MODE_FRONT_BIT = 0x00000001, + VK_CULL_MODE_BACK_BIT = 0x00000002, + VK_CULL_MODE_FRONT_AND_BACK = 0x3, +} VkCullModeFlagBits; +typedef VkFlags VkCullModeFlags; typedef VkFlags VkPipelineMultisampleStateCreateFlags; typedef VkFlags VkPipelineDepthStencilStateCreateFlags; typedef VkFlags VkPipelineColorBlendStateCreateFlags; @@ -1044,6 +1040,7 @@ typedef enum { VK_STENCIL_FACE_NONE = 0, VK_STENCIL_FACE_FRONT_BIT = 0x00000001, VK_STENCIL_FACE_BACK_BIT = 0x00000002, + VK_STENCIL_FRONT_AND_BACK = 0x3, } VkStencilFaceFlagBits; typedef VkFlags VkStencilFaceFlags; @@ -1270,6 +1267,7 @@ typedef struct { uint32_t maxColorAttachments; uint32_t maxSampledImageColorSamples; uint32_t maxSampledImageDepthSamples; + uint32_t maxSampledImageStencilSamples; uint32_t maxSampledImageIntegerSamples; uint32_t maxStorageImageSamples; uint32_t maxSampleMaskWords; @@ -1698,7 +1696,7 @@ typedef struct { VkBool32 depthClampEnable; VkBool32 rasterizerDiscardEnable; VkFillMode fillMode; - VkCullMode cullMode; + VkCullModeFlags cullMode; VkFrontFace frontFace; VkBool32 depthBiasEnable; float depthBiasConstantFactor; @@ -1929,8 +1927,6 @@ typedef struct { } VkFramebufferCreateInfo; typedef struct { - VkStructureType sType; - const void* pNext; VkAttachmentDescriptionFlags flags; VkFormat format; uint32_t samples; @@ -1948,8 +1944,6 @@ typedef struct { } VkAttachmentReference; typedef struct { - VkStructureType sType; - const void* pNext; VkSubpassDescriptionFlags flags; VkPipelineBindPoint pipelineBindPoint; uint32_t inputAttachmentCount; @@ -1957,14 +1951,12 @@ typedef struct { uint32_t colorAttachmentCount; const VkAttachmentReference* pColorAttachments; const VkAttachmentReference* pResolveAttachments; - VkAttachmentReference depthStencilAttachment; + const VkAttachmentReference* pDepthStencilAttachment; uint32_t preserveAttachmentCount; const VkAttachmentReference* pPreserveAttachments; } VkSubpassDescription; typedef struct { - VkStructureType sType; - const void* pNext; uint32_t srcSubpass; uint32_t destSubpass; VkPipelineStageFlags srcStageMask; diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 154d285d..cf733696 100755 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -614,8 +614,8 @@ static VkBool32 validatePipelineState(layer_data* my_data, const GLOBAL_CB_NODE* break; } } - if (pSD->depthStencilAttachment.attachment != VK_ATTACHMENT_UNUSED) { - const uint32_t samples = pRPCI->pAttachments[pSD->depthStencilAttachment.attachment].samples; + if (pSD->pDepthStencilAttachment && pSD->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) { + const uint32_t samples = pRPCI->pAttachments[pSD->pDepthStencilAttachment->attachment].samples; if (subpassNumSamples == 0) subpassNumSamples = samples; else if (subpassNumSamples != samples) @@ -3034,11 +3034,13 @@ VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments( } } else if (attachment->aspectMask & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { /* TODO: Is this a good test for depth/stencil? */ - if (pSD->depthStencilAttachment.attachment != attachment->colorAttachment) { + if (!pSD->pDepthStencilAttachment || pSD->pDepthStencilAttachment->attachment != attachment->colorAttachment) { skipCall |= log_msg(dev_data->report_data, VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cmdBuffer, 0, DRAWSTATE_MISSING_ATTACHMENT_REFERENCE, "DS", "vkCmdClearAttachments() attachment index %d does not match depthStencilAttachment.attachment (%d) found in active subpass %d", - attachment->colorAttachment, pSD->depthStencilAttachment.attachment, pCB->activeSubpass); + attachment->colorAttachment, + (pSD->pDepthStencilAttachment) ? pSD->pDepthStencilAttachment->attachment : VK_ATTACHMENT_UNUSED, + pCB->activeSubpass); } } } @@ -3351,8 +3353,9 @@ bool CheckPreserved(const layer_data* my_data, VkDevice device, const VkRenderPa if (attachment == subpass.pColorAttachments[j].attachment) return true; } - if (subpass.depthStencilAttachment.attachment != VK_ATTACHMENT_UNUSED) { - if (attachment == subpass.depthStencilAttachment.attachment) + if (subpass.pDepthStencilAttachment && + subpass.pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) { + if (attachment == subpass.pDepthStencilAttachment->attachment) return true; } bool result = false; @@ -3406,8 +3409,8 @@ bool validateDependencies(const layer_data* my_data, VkDevice device, const VkRe for (uint32_t j = 0; j < subpass.colorAttachmentCount; ++j) { output_attachment_to_subpass[subpass.pColorAttachments[j].attachment].push_back(i); } - if (subpass.depthStencilAttachment.attachment != VK_ATTACHMENT_UNUSED) { - output_attachment_to_subpass[subpass.depthStencilAttachment.attachment].push_back(i); + if (subpass.pDepthStencilAttachment && subpass.pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) { + output_attachment_to_subpass[subpass.pDepthStencilAttachment->attachment].push_back(i); } } // If there is a dependency needed make sure one exists @@ -3424,8 +3427,8 @@ bool validateDependencies(const layer_data* my_data, VkDevice device, const VkRe CheckDependencyExists(my_data, device, i, output_attachment_to_subpass[attachment], subpass_to_node, skip_call); CheckDependencyExists(my_data, device, i, input_attachment_to_subpass[attachment], subpass_to_node, skip_call); } - if (subpass.depthStencilAttachment.attachment != VK_ATTACHMENT_UNUSED) { - const uint32_t& attachment = subpass.depthStencilAttachment.attachment; + if (subpass.pDepthStencilAttachment && subpass.pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) { + const uint32_t& attachment = subpass.pDepthStencilAttachment->attachment; CheckDependencyExists(my_data, device, i, output_attachment_to_subpass[attachment], subpass_to_node, skip_call); CheckDependencyExists(my_data, device, i, input_attachment_to_subpass[attachment], subpass_to_node, skip_call); } @@ -3462,7 +3465,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRende VkSubpassDescription *subpass = (VkSubpassDescription *) &localRPCI->pSubpasses[i]; const uint32_t attachmentCount = subpass->inputAttachmentCount + subpass->colorAttachmentCount * (1 + (subpass->pResolveAttachments?1:0)) + - subpass->preserveAttachmentCount; + ((subpass->pDepthStencilAttachment) ? 1 : 0) + subpass->preserveAttachmentCount; VkAttachmentReference *attachments = new VkAttachmentReference[attachmentCount]; memcpy(attachments, subpass->pInputAttachments, @@ -3482,6 +3485,13 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRende attachments += subpass->colorAttachmentCount; } + if (subpass->pDepthStencilAttachment) { + memcpy(attachments, subpass->pDepthStencilAttachment, + sizeof(attachments[0]) * 1); + subpass->pDepthStencilAttachment = attachments; + attachments += 1; + } + memcpy(attachments, subpass->pPreserveAttachments, sizeof(attachments[0]) * subpass->preserveAttachmentCount); subpass->pPreserveAttachments = attachments; diff --git a/layers/image.cpp b/layers/image.cpp index af8bef49..b9d49b32 100644 --- a/layers/image.cpp +++ b/layers/image.cpp @@ -336,7 +336,8 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRende if (depthFormatPresent == VK_FALSE) { // No depth attachment is present, validate that subpasses set depthStencilAttachment to VK_ATTACHMENT_UNUSED; for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) { - if (pCreateInfo->pSubpasses[i].depthStencilAttachment.attachment != VK_ATTACHMENT_UNUSED) { + if (pCreateInfo->pSubpasses[i].pDepthStencilAttachment && + pCreateInfo->pSubpasses[i].pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) { std::stringstream ss; ss << "vkCreateRenderPass has no depth/stencil attachment, yet subpass[" << i << "] has VkSubpassDescription::depthStencilAttachment value that is not VK_ATTACHMENT_UNUSED"; skipCall |= log_msg(my_data->report_data, VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, IMAGE_RENDERPASS_INVALID_DS_ATTACHMENT, "IMAGE", ss.str().c_str()); diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index fa304f37..2181e44f 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -3855,8 +3855,7 @@ bool PreCreateGraphicsPipelines( "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator"); return false; } - if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE || - pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE) + if(pCreateInfos->pRasterState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK) { log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator"); @@ -4683,12 +4682,6 @@ bool PreCreateRenderPass( } if(pCreateInfo->pAttachments != nullptr) { - if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION) - { - log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", - "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator"); - return false; - } if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE || pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE) { @@ -4741,12 +4734,6 @@ bool PreCreateRenderPass( } if(pCreateInfo->pSubpasses != nullptr) { - if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION) - { - log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", - "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator"); - return false; - } if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE || pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE) { @@ -4784,11 +4771,12 @@ bool PreCreateRenderPass( return false; } } - if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE || - pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE) + if(pCreateInfo->pSubpasses->pDepthStencilAttachment && + (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE || + pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) { log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", - "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator"); + "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator"); return false; } if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr) @@ -4804,12 +4792,6 @@ bool PreCreateRenderPass( } if(pCreateInfo->pDependencies != nullptr) { - if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY) - { - log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", - "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator"); - return false; - } } } -- cgit v1.2.3