diff --git a/examples/15-shadowmaps-simple/fs_sms_shadow.sc b/examples/15-shadowmaps-simple/fs_sms_shadow.sc index 3cdf1973f..ff26f3891 100644 --- a/examples/15-shadowmaps-simple/fs_sms_shadow.sc +++ b/examples/15-shadowmaps-simple/fs_sms_shadow.sc @@ -7,5 +7,8 @@ void main() { + // Vulkan does not like shader writing to a target that is not attached +#ifndef BGFX_SHADER_LANGUAGE_SPIRV gl_FragColor = vec4_splat(0.0); +#endif } diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index 997c749f2..d8a16ef46 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -2804,9 +2804,6 @@ VK_IMPORT_DEVICE wds[2].pBufferInfo = NULL; wds[2].pTexelBufferView = NULL; - m_vsChanges = 0; - m_fsChanges = 0; - vkUpdateDescriptorSets(m_device, 3, wds, 0, NULL); vkCmdBindDescriptorSets( m_commandBuffer @@ -3013,16 +3010,13 @@ VK_IMPORT_DEVICE void setShaderUniform(uint8_t _flags, uint32_t _regIndex, const void* _val, uint32_t _numRegs) { - BX_UNUSED(_flags, _regIndex, _val, _numRegs); - if (_flags&BGFX_UNIFORM_FRAGMENTBIT) + if (_flags & BGFX_UNIFORM_FRAGMENTBIT) { bx::memCopy(&m_fsScratch[_regIndex], _val, _numRegs*16); - m_fsChanges += _numRegs; } else { bx::memCopy(&m_vsScratch[_regIndex], _val, _numRegs*16); - m_vsChanges += _numRegs; } } @@ -3070,9 +3064,6 @@ VK_IMPORT_DEVICE // , NULL // ); // } -// -// m_vsChanges = 0; -// m_fsChanges = 0; // } void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true) @@ -3604,7 +3595,10 @@ VK_IMPORT_DEVICE murmur.add(_stencil); murmur.add(program.m_vsh->m_hash); murmur.add(program.m_vsh->m_attrMask, sizeof(program.m_vsh->m_attrMask) ); - murmur.add(program.m_fsh->m_hash); + if (NULL != program.m_fsh) + { + murmur.add(program.m_fsh->m_hash); + } for (uint8_t ii = 0; ii < _numStreams; ++ii) { murmur.add(_layouts[ii]->m_hash); @@ -3670,13 +3664,17 @@ VK_IMPORT_DEVICE shaderStages[0].module = program.m_vsh->m_module; shaderStages[0].pName = "main"; shaderStages[0].pSpecializationInfo = NULL; - shaderStages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - shaderStages[1].pNext = NULL; - shaderStages[1].flags = 0; - shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; - shaderStages[1].module = program.m_fsh->m_module; - shaderStages[1].pName = "main"; - shaderStages[1].pSpecializationInfo = NULL; + + if (NULL != program.m_fsh) + { + shaderStages[1].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + shaderStages[1].pNext = NULL; + shaderStages[1].flags = 0; + shaderStages[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; + shaderStages[1].module = program.m_fsh->m_module; + shaderStages[1].pName = "main"; + shaderStages[1].pSpecializationInfo = NULL; + } VkPipelineViewportStateCreateInfo viewportState; viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; @@ -3702,7 +3700,7 @@ VK_IMPORT_DEVICE graphicsPipeline.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; graphicsPipeline.pNext = NULL; graphicsPipeline.flags = 0; - graphicsPipeline.stageCount = BX_COUNTOF(shaderStages); + graphicsPipeline.stageCount = NULL == program.m_fsh ? 1 : 2; graphicsPipeline.pStages = shaderStages; graphicsPipeline.pVertexInputState = &vertexInputState; graphicsPipeline.pInputAssemblyState = &inputAssemblyState; @@ -3935,7 +3933,7 @@ VK_IMPORT_DEVICE if (0 < total) { uint32_t vsUniformBinding = program.m_vsh->m_uniformBinding; - uint32_t fsUniformBinding = program.m_fsh ? program.m_fsh->m_uniformBinding : 0; + uint32_t fsUniformBinding = NULL != program.m_fsh ? program.m_fsh->m_uniformBinding : 0; if (vsize > 0) { @@ -4080,7 +4078,7 @@ VK_IMPORT_DEVICE if (isValid(fbh) ) { const FrameBufferVK& fb = m_frameBuffers[fbh.idx]; - numMrt = bx::max((uint8_t)1, fb.m_num); + numMrt = fb.m_num; } VkClearAttachment attachments[BGFX_CONFIG_MAX_FRAME_BUFFERS]; @@ -4305,8 +4303,6 @@ VK_IMPORT_DEVICE VkFence m_fence; VkRenderPass m_renderPass; VkDescriptorPool m_descriptorPool; -// VkDescriptorSetLayout m_descriptorSetLayout; -// VkPipelineLayout m_pipelineLayout; VkPipelineCache m_pipelineCache; VkCommandPool m_commandPool; @@ -4338,8 +4334,6 @@ VK_IMPORT_DEVICE uint8_t m_fsScratch[64<<10]; uint8_t m_vsScratch[64<<10]; - uint32_t m_fsChanges; - uint32_t m_vsChanges; uint32_t m_backBufferColorIdx; FrameBufferHandle m_fbh; @@ -6113,9 +6107,6 @@ VK_DESTROY offset = scratchBuffer.m_pos; - m_vsChanges = 0; - m_fsChanges = 0; - bx::memCopy(&scratchBuffer.m_data[scratchBuffer.m_pos], m_vsScratch, program.m_vsh->m_size); scratchBuffer.m_pos += vsize; @@ -6425,8 +6416,6 @@ VK_DESTROY bx::memCopy(&scratchBuffer.m_data[scratchBuffer.m_pos + vsize], m_fsScratch, program.m_fsh->m_size); } - m_vsChanges = 0; - m_fsChanges = 0; scratchBuffer.m_pos += total; }