{-# language CPP #-} -- | = Name -- -- VK_EXT_shader_object - device extension -- -- == VK_EXT_shader_object -- -- [__Name String__] -- @VK_EXT_shader_object@ -- -- [__Extension Type__] -- Device extension -- -- [__Registered Extension Number__] -- 483 -- -- [__Revision__] -- 1 -- -- [__Ratification Status__] -- Ratified -- -- [__Extension and Version Dependencies__] --      -- --      or --      -- -- and --      -- --      or --      -- -- -- [__Contact__] -- -- - Daniel Story -- -- -- [__Extension Proposal__] -- -- -- == Other Extension Metadata -- -- [__Last Modified Date__] -- 2023-03-30 -- -- [__Interactions and External Dependencies__] -- -- - Interacts with @VK_EXT_extended_dynamic_state@ -- -- - Interacts with @VK_EXT_extended_dynamic_state2@ -- -- - Interacts with @VK_EXT_extended_dynamic_state3@ -- -- - Interacts with @VK_EXT_vertex_input_dynamic_state@ -- -- [__IP Status__] -- No known IP claims. -- -- [__Contributors__] -- -- - Piers Daniell, NVIDIA -- -- - Sandy Jamieson, Nintendo -- -- - Žiga Markuš, LunarG -- -- - Tobias Hector, AMD -- -- - Alex Walters, Imagination -- -- - Shahbaz Youssefi, Google -- -- - Ralph Potter, Samsung -- -- - Jan-Harald Fredriksen, ARM -- -- - Connor Abott, Valve -- -- - Arseny Kapoulkine, Roblox -- -- - Patrick Doane, Activision -- -- - Jeff Leger, Qualcomm -- -- - Stu Smith, AMD -- -- - Chris Glover, Google -- -- - Ricardo Garcia, Igalia -- -- - Faith Ekstrand, Collabora -- -- - Timur Kristóf, Valve -- -- - Constantine Shablya, Collabora -- -- - Daniel Koch, NVIDIA -- -- - Alyssa Rosenzweig, Collabora -- -- - Mike Blumenkrantz, Valve -- -- - Samuel Pitoiset, Valve -- -- - Qun Lin, AMD -- -- - Spencer Fricke, LunarG -- -- - Soroush Faghihi Kashani, Imagination -- -- == Description -- -- This extension introduces a new 'Vulkan.Extensions.Handles.ShaderEXT' -- object type which represents a single compiled shader stage. Shader -- objects provide a more flexible alternative to -- 'Vulkan.Core10.Handles.Pipeline' objects, which may be helpful in -- certain use cases. -- -- == New Object Types -- -- - 'Vulkan.Extensions.Handles.ShaderEXT' -- -- == New Commands -- -- - 'cmdBindShadersEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToCoverageEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToOneEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetConservativeRasterizationModeEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetCullModeEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthBoundsTestEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClampEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClipEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClipNegativeOneToOneEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthCompareOpEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthTestEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthWriteEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetExtraPrimitiveOverestimationSizeEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetFrontFaceEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineRasterizationModeEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineStippleEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLogicOpEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetPolygonModeEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetProvokingVertexModeEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationStreamEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleMaskEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetStencilOpEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetStencilTestEnableEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetTessellationDomainOriginEXT' -- -- - 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT' -- -- - 'createShadersEXT' -- -- - 'destroyShaderEXT' -- -- - 'getShaderBinaryDataEXT' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetViewportWScalingEnableNV' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageReductionModeNV' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorEnableNV' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageToColorLocationNV' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationModeNV' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationTableEnableNV' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetCoverageModulationTableNV' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRepresentativeFragmentTestEnableNV' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetShadingRateImageEnableNV' -- -- If -- -- is supported: -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetViewportSwizzleNV' -- -- == New Structures -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.ColorBlendAdvancedEXT' -- -- - 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.ColorBlendEquationEXT' -- -- - 'ShaderCreateInfoEXT' -- -- - 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.VertexInputAttributeDescription2EXT' -- -- - 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.VertexInputBindingDescription2EXT' -- -- - Extending -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2', -- 'Vulkan.Core10.Device.DeviceCreateInfo': -- -- - 'PhysicalDeviceShaderObjectFeaturesEXT' -- -- - Extending -- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2': -- -- - 'PhysicalDeviceShaderObjectPropertiesEXT' -- -- - Extending 'Vulkan.Core10.Pipeline.PipelineShaderStageCreateInfo', -- 'ShaderCreateInfoEXT': -- -- - 'ShaderRequiredSubgroupSizeCreateInfoEXT' -- -- == New Enums -- -- - 'ShaderCodeTypeEXT' -- -- - 'ShaderCreateFlagBitsEXT' -- -- == New Bitmasks -- -- - 'ShaderCreateFlagsEXT' -- -- == New Enum Constants -- -- - 'EXT_SHADER_OBJECT_EXTENSION_NAME' -- -- - 'EXT_SHADER_OBJECT_SPEC_VERSION' -- -- - Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType': -- -- - 'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_SHADER_EXT' -- -- - Extending 'Vulkan.Core10.Enums.Result.Result': -- -- - 'Vulkan.Core10.Enums.Result.ERROR_INCOMPATIBLE_SHADER_BINARY_EXT' -- -- - Extending 'Vulkan.Core10.Enums.StructureType.StructureType': -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT' -- -- - 'STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT' -- -- - 'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT' -- -- If -- -- is supported: -- -- - Extending 'ShaderCreateFlagBitsEXT': -- -- - 'SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT' -- -- If -- -- or -- -- is supported: -- -- - Extending 'ShaderCreateFlagBitsEXT': -- -- - 'SHADER_CREATE_NO_TASK_SHADER_BIT_EXT' -- -- If -- -- or -- -- is supported: -- -- - Extending 'ShaderCreateFlagBitsEXT': -- -- - 'SHADER_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT' -- -- - 'SHADER_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT' -- -- If -- -- or -- -- is supported: -- -- - Extending 'ShaderCreateFlagBitsEXT': -- -- - 'SHADER_CREATE_DISPATCH_BASE_BIT_EXT' -- -- If -- -- is supported: -- -- - Extending 'ShaderCreateFlagBitsEXT': -- -- - 'SHADER_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_EXT' -- -- == Examples -- -- __Example 1__ -- -- Create linked pair of vertex and fragment shaders. -- -- > // Logical device created with the shaderObject feature enabled -- > VkDevice device; -- > -- > // SPIR-V shader code for a vertex shader, along with its size in bytes -- > void* pVertexSpirv; -- > size_t vertexSpirvSize; -- > -- > // SPIR-V shader code for a fragment shader, along with its size in bytes -- > void* pFragmentSpirv; -- > size_t fragmentSpirvSize; -- > -- > // Descriptor set layout compatible with the shaders -- > VkDescriptorSetLayout descriptorSetLayout; -- > -- > VkShaderCreateInfoEXT shaderCreateInfos[2] = -- > { -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, -- > .stage = VK_SHADER_STAGE_VERTEX_BIT, -- > .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = vertexSpirvSize, -- > .pCode = pVertexSpirv, -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > }, -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, -- > .stage = VK_SHADER_STAGE_FRAGMENT_BIT, -- > .nextStage = 0, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = fragmentSpirvSize, -- > .pCode = pFragmentSpirv, -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > } -- > }; -- > -- > VkResult result; -- > VkShaderEXT shaders[2]; -- > -- > result = vkCreateShadersEXT(device, 2, &shaderCreateInfos, NULL, shaders); -- > if (result != VK_SUCCESS) -- > { -- > // Handle error -- > } -- -- Later, during command buffer recording, bind the linked shaders and -- draw. -- -- > // Command buffer in the recording state -- > VkCommandBuffer commandBuffer; -- > -- > // Vertex and fragment shader objects created above -- > VkShaderEXT shaders[2]; -- > -- > // Assume vertex buffers, descriptor sets, etc. have been bound, and existing -- > // state setting commands have been called to set all required state -- > -- > const VkShaderStageFlagBits stages[2] = -- > { -- > VK_SHADER_STAGE_VERTEX_BIT, -- > VK_SHADER_STAGE_FRAGMENT_BIT -- > }; -- > -- > // Bind linked shaders -- > vkCmdBindShadersEXT(commandBuffer, 2, stages, shaders); -- > -- > // Equivalent to the previous line. Linked shaders can be bound one at a time, -- > // in any order: -- > // vkCmdBindShadersEXT(commandBuffer, 1, &stages[1], &shaders[1]); -- > // vkCmdBindShadersEXT(commandBuffer, 1, &stages[0], &shaders[0]); -- > -- > // The above is sufficient to draw if the device was created with the -- > // tessellationShader and geometryShader features disabled. Otherwise, since -- > // those stages should not execute, vkCmdBindShadersEXT() must be called at -- > // least once with each of their stages in pStages before drawing: -- > -- > const VkShaderStageFlagBits unusedStages[3] = -- > { -- > VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, -- > VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, -- > VK_SHADER_STAGE_GEOMETRY_BIT -- > }; -- > -- > // NULL pShaders is equivalent to an array of stageCount VK_NULL_HANDLE values, -- > // meaning no shaders are bound to those stages, and that any previously bound -- > // shaders are unbound -- > vkCmdBindShadersEXT(commandBuffer, 3, unusedStages, NULL); -- > -- > // Graphics shader objects may only be used to draw inside dynamic render pass -- > // instances begun with vkCmdBeginRendering(), assume one has already been begun -- > -- > // Draw a triangle -- > vkCmdDraw(commandBuffer, 3, 1, 0, 0); -- -- __Example 2__ -- -- Create unlinked vertex, geometry, and fragment shaders. -- -- > // Logical device created with the shaderObject feature enabled -- > VkDevice device; -- > -- > // SPIR-V shader code for vertex shaders, along with their sizes in bytes -- > void* pVertexSpirv[2]; -- > size_t vertexSpirvSize[2]; -- > -- > // SPIR-V shader code for a geometry shader, along with its size in bytes -- > void pGeometrySpirv; -- > size_t geometrySpirvSize; -- > -- > // SPIR-V shader code for fragment shaders, along with their sizes in bytes -- > void* pFragmentSpirv[2]; -- > size_t fragmentSpirvSize[2]; -- > -- > // Descriptor set layout compatible with the shaders -- > VkDescriptorSetLayout descriptorSetLayout; -- > -- > VkShaderCreateInfoEXT shaderCreateInfos[5] = -- > { -- > // Stage order does not matter -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = 0, -- > .stage = VK_SHADER_STAGE_GEOMETRY_BIT, -- > .nextStage = VK_SHADER_STAGE_FRAGMENT_BIT, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = pGeometrySpirv, -- > .pCode = geometrySpirvSize, -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > }, -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = 0, -- > .stage = VK_SHADER_STAGE_VERTEX_BIT, -- > .nextStage = VK_SHADER_STAGE_GEOMETRY_BIT, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = vertexSpirvSize[0], -- > .pCode = pVertexSpirv[0], -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > }, -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = 0, -- > .stage = VK_SHADER_STAGE_FRAGMENT_BIT, -- > .nextStage = 0, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = fragmentSpirvSize[0], -- > .pCode = pFragmentSpirv[0], -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > }, -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = 0, -- > .stage = VK_SHADER_STAGE_FRAGMENT_BIT, -- > .nextStage = 0, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = fragmentSpirvSize[1], -- > .pCode = pFragmentSpirv[1], -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > }, -- > { -- > .sType = VK_STRUCTURE_TYPE_SHADER_CREATE_INFO_EXT, -- > .pNext = NULL, -- > .flags = 0, -- > .stage = VK_SHADER_STAGE_VERTEX_BIT, -- > // Suppose we want this vertex shader to be able to be followed by -- > // either a geometry shader or fragment shader: -- > .nextStage = VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, -- > .codeType = VK_SHADER_CODE_TYPE_SPIRV_EXT, -- > .codeSize = vertexSpirvSize[1], -- > .pCode = pVertexSpirv[1], -- > .pName = "main", -- > .setLayoutCount = 1, -- > .pSetLayouts = &descriptorSetLayout; -- > .pushConstantRangeCount = 0, -- > .pPushConstantRanges = NULL, -- > .pSpecializationInfo = NULL -- > } -- > }; -- > -- > VkResult result; -- > VkShaderEXT shaders[5]; -- > -- > result = vkCreateShadersEXT(device, 5, &shaderCreateInfos, NULL, shaders); -- > if (result != VK_SUCCESS) -- > { -- > // Handle error -- > } -- -- Later, during command buffer recording, bind the linked shaders in -- different combinations and draw. -- -- > // Command buffer in the recording state -- > VkCommandBuffer commandBuffer; -- > -- > // Vertex, geometry, and fragment shader objects created above -- > VkShaderEXT shaders[5]; -- > -- > // Assume vertex buffers, descriptor sets, etc. have been bound, and existing -- > // state setting commands have been called to set all required state -- > -- > const VkShaderStageFlagBits stages[3] = -- > { -- > // Any order is allowed -- > VK_SHADER_STAGE_FRAGMENT_BIT, -- > VK_SHADER_STAGE_VERTEX_BIT, -- > VK_SHADER_STAGE_GEOMETRY_BIT, -- > }; -- > -- > VkShaderEXT bindShaders[3] = -- > { -- > shaders[2], // FS -- > shaders[1], // VS -- > shaders[0] // GS -- > }; -- > -- > // Bind unlinked shaders -- > vkCmdBindShadersEXT(commandBuffer, 3, stages, bindShaders); -- > -- > // Assume the tessellationShader feature is disabled, so vkCmdBindShadersEXT() -- > // need not have been called with either tessellation stage -- > -- > // Graphics shader objects may only be used to draw inside dynamic render pass -- > // instances begun with vkCmdBeginRendering(), assume one has already been begun -- > -- > // Draw a triangle -- > vkCmdDraw(commandBuffer, 3, 1, 0, 0); -- > -- > // Bind a different unlinked fragment shader -- > const VkShaderStageFlagBits fragmentStage = VK_SHADER_STAGE_FRAGMENT_BIT; -- > vkCmdBindShadersEXT(commandBuffer, 1, &fragmentStage, &shaders[3]); -- > -- > // Draw another triangle -- > vkCmdDraw(commandBuffer, 3, 1, 0, 0); -- > -- > // Bind a different unlinked vertex shader -- > const VkShaderStageFlagBits vertexStage = VK_SHADER_STAGE_VERTEX_BIT; -- > vkCmdBindShadersEXT(commandBuffer, 1, &vertexStage, &shaders[4]); -- > -- > // Draw another triangle -- > vkCmdDraw(commandBuffer, 3, 1, 0, 0); -- -- == Version History -- -- - Revision 1, 2023-03-30 (Daniel Story) -- -- - Initial draft -- -- == See Also -- -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.ColorBlendAdvancedEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.ColorBlendEquationEXT', -- 'PhysicalDeviceShaderObjectFeaturesEXT', -- 'PhysicalDeviceShaderObjectPropertiesEXT', 'ShaderCodeTypeEXT', -- 'ShaderCreateFlagBitsEXT', 'ShaderCreateFlagsEXT', -- 'ShaderCreateInfoEXT', 'Vulkan.Extensions.Handles.ShaderEXT', -- 'ShaderRequiredSubgroupSizeCreateInfoEXT', -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.VertexInputAttributeDescription2EXT', -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.VertexInputBindingDescription2EXT', -- 'cmdBindShadersEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdBindVertexBuffers2EXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToCoverageEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetAlphaToOneEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendAdvancedEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorBlendEquationEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetColorWriteMaskEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetConservativeRasterizationModeEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetCullModeEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetDepthBiasEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthBoundsTestEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClampEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClipEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetDepthClipNegativeOneToOneEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthCompareOpEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthTestEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetDepthWriteEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetExtraPrimitiveOverestimationSizeEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetFrontFaceEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineRasterizationModeEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLineStippleEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetLogicOpEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetLogicOpEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPatchControlPointsEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetPolygonModeEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetPrimitiveRestartEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetPrimitiveTopologyEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetProvokingVertexModeEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationSamplesEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetRasterizationStreamEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.cmdSetRasterizerDiscardEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleLocationsEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetSampleMaskEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetScissorWithCountEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetStencilOpEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetStencilTestEnableEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.cmdSetTessellationDomainOriginEXT', -- 'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.cmdSetVertexInputEXT', -- 'Vulkan.Extensions.VK_EXT_extended_dynamic_state.cmdSetViewportWithCountEXT', -- 'createShadersEXT', 'destroyShaderEXT', 'getShaderBinaryDataEXT' -- -- == Document Notes -- -- For more information, see the -- -- -- This page is a generated document. Fixes and changes should be made to -- the generator scripts, not directly. module Vulkan.Extensions.VK_EXT_shader_object ( PhysicalDeviceShaderObjectFeaturesEXT , PhysicalDeviceShaderObjectPropertiesEXT , ShaderCreateInfoEXT ) where import Vulkan.CStruct (FromCStruct) import Vulkan.CStruct (ToCStruct) import Data.Kind (Type) import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain) import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss) import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain) import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain) data PhysicalDeviceShaderObjectFeaturesEXT instance ToCStruct PhysicalDeviceShaderObjectFeaturesEXT instance Show PhysicalDeviceShaderObjectFeaturesEXT instance FromCStruct PhysicalDeviceShaderObjectFeaturesEXT data PhysicalDeviceShaderObjectPropertiesEXT instance ToCStruct PhysicalDeviceShaderObjectPropertiesEXT instance Show PhysicalDeviceShaderObjectPropertiesEXT instance FromCStruct PhysicalDeviceShaderObjectPropertiesEXT type role ShaderCreateInfoEXT nominal data ShaderCreateInfoEXT (es :: [Type]) instance ( Extendss ShaderCreateInfoEXT es , PokeChain es ) => ToCStruct (ShaderCreateInfoEXT es) instance Show (Chain es) => Show (ShaderCreateInfoEXT es) instance ( Extendss ShaderCreateInfoEXT es , PeekChain es ) => FromCStruct (ShaderCreateInfoEXT es)