@ -701,6 +701,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
. depthBiasClamp = 0.0f ,
. depthBiasClamp = 0.0f ,
. depthBiasSlopeFactor = 0.0f ,
. depthBiasSlopeFactor = 0.0f ,
. lineWidth = 1.0f ,
. lineWidth = 1.0f ,
// TODO(alekpop): Transfer from regs
} ;
} ;
VkPipelineRasterizationLineStateCreateInfoEXT line_state {
VkPipelineRasterizationLineStateCreateInfoEXT line_state {
. sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT ,
. sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT ,
@ -708,9 +709,9 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
. lineRasterizationMode = key . state . smooth_lines ! = 0
. lineRasterizationMode = key . state . smooth_lines ! = 0
? VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT
? VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT
: VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT ,
: VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT ,
. stippledLineEnable = VK_FALSE , // TODO
. lineStippleFactor = 0 ,
. lineStipplePattern = 0 ,
. stippledLineEnable = dynamic . line_stipple_enable ? VK_TRUE : VK_FALSE ,
. lineStippleFactor = key . state . line_stipple_factor ,
. lineStipplePattern = static_cast < uint16_t > ( key . state . line_stipple_pattern ) ,
} ;
} ;
VkPipelineRasterizationConservativeStateCreateInfoEXT conservative_raster {
VkPipelineRasterizationConservativeStateCreateInfoEXT conservative_raster {
. sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT ,
. sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT ,
@ -763,8 +764,8 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
. stencilTestEnable = dynamic . stencil_enable ,
. stencilTestEnable = dynamic . stencil_enable ,
. front = GetStencilFaceState ( dynamic . front ) ,
. front = GetStencilFaceState ( dynamic . front ) ,
. back = GetStencilFaceState ( dynamic . back ) ,
. back = GetStencilFaceState ( dynamic . back ) ,
. minDepthBounds = 0.0f ,
. maxDepthBounds = 0.0f ,
. minDepthBounds = static_cast < f32 > ( key . state . depth_bounds_min ) ,
. maxDepthBounds = static_cast < f32 > ( key . state . depth_bounds_max ) ,
} ;
} ;
if ( dynamic . depth_bounds_enable & & ! device . IsDepthBoundsSupported ( ) ) {
if ( dynamic . depth_bounds_enable & & ! device . IsDepthBoundsSupported ( ) ) {
LOG_WARNING ( Render_Vulkan , " Depth bounds is enabled but not supported " ) ;
LOG_WARNING ( Render_Vulkan , " Depth bounds is enabled but not supported " ) ;
@ -805,12 +806,12 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
. pAttachments = cb_attachments . data ( ) ,
. pAttachments = cb_attachments . data ( ) ,
. blendConstants = { }
. blendConstants = { }
} ;
} ;
static_vector < VkDynamicState , 38 > dynamic_states {
static_vector < VkDynamicState , 34 > dynamic_states {
VK_DYNAMIC_STATE_VIEWPORT , VK_DYNAMIC_STATE_SCISSOR ,
VK_DYNAMIC_STATE_VIEWPORT , VK_DYNAMIC_STATE_SCISSOR ,
VK_DYNAMIC_STATE_DEPTH_BIAS , VK_DYNAMIC_STATE_BLEND_CONSTANTS ,
VK_DYNAMIC_STATE_DEPTH_BIAS , VK_DYNAMIC_STATE_BLEND_CONSTANTS ,
VK_DYNAMIC_STATE_DEPTH_BOUNDS , VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK ,
VK_DYNAMIC_STATE_DEPTH_BOUNDS , VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK ,
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK , VK_DYNAMIC_STATE_STENCIL_REFERENCE ,
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK , VK_DYNAMIC_STATE_STENCIL_REFERENCE ,
VK_DYNAMIC_STATE_LINE_WIDTH , VK_DYNAMIC_STATE_LINE_STIPPLE ,
VK_DYNAMIC_STATE_LINE_WIDTH ,
} ;
} ;
if ( key . state . extended_dynamic_state ) {
if ( key . state . extended_dynamic_state ) {
static constexpr std : : array extended {
static constexpr std : : array extended {
@ -855,9 +856,6 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT ,
VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT ,
// additional state3 extensions
// additional state3 extensions
// FIXME(crueter): conservative rasterization is totally broken
// VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT,
VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT ,
VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT ,
VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT ,
VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT ,
@ -865,7 +863,6 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) {
VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT ,
VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT ,
VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT ,
VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT ,
VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT ,
VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT ,
VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT ,
VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT ,
VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT ,
VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT ,
VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT ,
} ;
} ;