"Too many mipmaps requested for texture format and dimensions ("+itos(image_create_info.mipLevels)+"), maximum allowed: ("+itos(required_mipmaps)+").");
"Data for slice index "+itos(i)+" (mapped to layer "+itos(i)+") differs in size (supplied: "+itos(p_data[i].size())+") than what is required by the format ("+itos(required_size)+").");
"Texture can't be updated while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
"Texture can't be retrieved while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
"Source texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
"Destination texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
"Source texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
"Destination texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
ERR_FAIL_COND_V_MSG(src_tex->format!=dst_tex->format,ERR_INVALID_PARAMETER,"Source and Destination textures must be the same format.");
ERR_FAIL_COND_V_MSG(src_tex->width!=dst_tex->width&&src_tex->height!=dst_tex->height&&src_tex->depth!=dst_tex->depth,ERR_INVALID_PARAMETER,"Source and Destination textures must have the same dimensions.");
"Source texture can't be cleared while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
VkRenderPassrender_pass=_render_pass_create(p_format,INITIAL_ACTION_CLEAR,FINAL_ACTION_READ,INITIAL_ACTION_CLEAR,FINAL_ACTION_READ,&color_references);//actions don't matter for this use case
*r_error="On shader stage '"+String(shader_stage_names[p_stage])+"', uniform '"+reflection.name+"' push constants for different stages should all be the same size.";
*r_error="On shader stage '"+String(shader_stage_names[p_stage])+"', uniform '"+reflection.name+"' uses a set ("+itos(set)+") index larger than what is supported ("+itos(MAX_UNIFORM_SETS)+").";
*r_error="On shader stage '"+String(shader_stage_names[p_stage])+"', uniform '"+reflection.name+"' uses a set ("+itos(set)+") index larger than what is supported by the hardware ("+itos(limits.maxBoundDescriptorSets)+").";
*r_error="On shader stage '"+String(shader_stage_names[p_stage])+"', uniform '"+reflection.name+"' trying to re-use location for set="+itos(set)+", binding="+itos(binding)+" with different uniform type.";
*r_error="On shader stage '"+String(shader_stage_names[p_stage])+"', uniform '"+reflection.name+"' trying to re-use location for set="+itos(set)+", binding="+itos(binding)+" with different uniform size.";
"On shader stage '"+String(shader_stage_names[stage])+"', uniform '"+binding.name+"' uses a set ("+itos(set)+") index larger than what is supported ("+itos(MAX_UNIFORM_SETS)+").");
"On shader stage '"+String(shader_stage_names[stage])+"', uniform '"+binding.name+"' uses a set ("+itos(set)+") index larger than what is supported by the hardware ("+itos(limits.maxBoundDescriptorSets)+").");
"On shader stage '"+String(shader_stage_names[stage])+"', uniform '"+binding.name+"' trying to re-use location for set="+itos(set)+", binding="+itos(info.binding)+" with different uniform type.");
"On shader stage '"+String(shader_stage_names[stage])+"', uniform '"+binding.name+"' trying to re-use location for set="+itos(set)+", binding="+itos(info.binding)+" with different uniform size.");
"Reflection of SPIR-V shader stage '"+String(shader_stage_names[p_stages[i].shader_stage])+"' failed enumerating push constants.");
if(pc_count){
ERR_FAIL_COND_V_MSG(pc_count>1,RID(),
"Reflection of SPIR-V shader stage '"+String(shader_stage_names[p_stages[i].shader_stage])+"': Only one push constant is supported, which should be the same across shader stages.");
"Reflection of SPIR-V shader stage '"+String(shader_stage_names[p_stages[i].shader_stage])+"': Push constant block must be the same across shader stages.");
"All the shader bindings for the given set must be covered by the uniforms provided. Binding ("+itos(set_uniform.binding)+"), set ("+itos(p_shader_set)+") was not provided.");
"Mismatch uniform type for binding ("+itos(set_uniform.binding)+"), set ("+itos(p_shader_set)+"). Expected '"+shader_uniform_names[set_uniform.type]+"', supplied: '"+shader_uniform_names[uniform.uniform_type]+"'.");
ERR_FAIL_V_MSG(RID(),"Sampler (binding: "+itos(uniform.binding)+") is an array of ("+itos(set_uniform.length)+") sampler elements, so it should be provided equal number of sampler IDs to satisfy it (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"Sampler (binding: "+itos(uniform.binding)+") should provide one ID referencing a sampler (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"SamplerTexture (binding: "+itos(uniform.binding)+") is an array of ("+itos(set_uniform.length)+") sampler&texture elements, so it should provided twice the amount of IDs (sampler,texture pairs) to satisfy it (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"SamplerTexture (binding: "+itos(uniform.binding)+") should provide two IDs referencing a sampler and then a texture (IDs provided: "+itos(uniform.ids.size())+").");
"Texture (binding: "+itos(uniform.binding)+", index "+itos(j)+") needs the TEXTURE_USAGE_SAMPLING_BIT usage flag set in order to be used as uniform.");
ERR_FAIL_V_MSG(RID(),"Texture (binding: "+itos(uniform.binding)+") is an array of ("+itos(set_uniform.length)+") textures, so it should be provided equal number of texture IDs to satisfy it (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"Texture (binding: "+itos(uniform.binding)+") should provide one ID referencing a texture (IDs provided: "+itos(uniform.ids.size())+").");
"Texture (binding: "+itos(uniform.binding)+", index "+itos(j)+") needs the TEXTURE_USAGE_SAMPLING_BIT usage flag set in order to be used as uniform.");
ERR_FAIL_V_MSG(RID(),"Image (binding: "+itos(uniform.binding)+") is an array of ("+itos(set_uniform.length)+") textures, so it should be provided equal number of texture IDs to satisfy it (IDs provided: "+itos(uniform.ids.size())+").");
}else{
ERR_FAIL_V_MSG(RID(),"Image (binding: "+itos(uniform.binding)+") should provide one ID referencing a texture (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"Buffer (binding: "+itos(uniform.binding)+") is an array of ("+itos(set_uniform.length)+") texture buffer elements, so it should be provided equal number of texture buffer IDs to satisfy it (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"Buffer (binding: "+itos(uniform.binding)+") should provide one ID referencing a texture buffer (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"SamplerBuffer (binding: "+itos(uniform.binding)+") is an array of ("+itos(set_uniform.length)+") sampler buffer elements, so it should provided twice the amount of IDs (sampler,buffer pairs) to satisfy it (IDs provided: "+itos(uniform.ids.size())+").");
ERR_FAIL_V_MSG(RID(),"SamplerBuffer (binding: "+itos(uniform.binding)+") should provide two IDs referencing a sampler and then a texture buffer (IDs provided: "+itos(uniform.ids.size())+").");
"Uniform buffer supplied (binding: "+itos(uniform.binding)+") size ("+itos(buffer->size)+" does not match size of shader uniform: ("+itos(set_uniform.length)+").");
ERR_FAIL_COND_V_MSG(!(buffer->usage&VK_BUFFER_USAGE_STORAGE_BUFFER_BIT),RID(),"Vertex buffer supplied (binding: "+itos(uniform.binding)+") was not created with storage flag.");
"Storage buffer supplied (binding: "+itos(uniform.binding)+") size ("+itos(buffer->size)+" does not match size of shader uniform: ("+itos(set_uniform.length)+").");
ERR_FAIL_V_MSG(Vector<uint8_t>(),"Buffer is either invalid or this type of buffer can't be retrieved. Only Index and Vertex buffers allow retrieving.");
vkCmdCopyBuffer(command_buffer,buffer->buffer,tmp_buffer.buffer,1,®ion);//dst buffer is in CPU, but I wonder if src buffer needs a barrier for this..
"Mismatch fragment output bindings ("+itos(shader->fragment_outputs)+") and framebuffer color buffers ("+itos(fb_format.color_attachments)+") when binding both in render pipeline.");
ERR_CONTINUE_MSG(!(texture->usage_flags&TEXTURE_USAGE_STORAGE_BIT),"Supplied storage texture "+itos(i)+" for draw list is not set to be used for storage.");
ERR_FAIL_COND_V_MSG(compute_list!=nullptr&&!compute_list->state.allow_draw_overlap,INVALID_ID,"Only one draw/compute list can be active at the same time.");
"Attempted to use the same texture in framebuffer attachment and a uniform (set: "+itos(p_index)+", binding: "+itos(attachable_ptr[i].bind)+"), this is not allowed.");
"Number of instances requested ("+itos(p_instances)+" is larger than the maximum number supported by the bound vertex array ("+itos(dl->validation.vertex_max_instances_allowed)+").");
ERR_FAIL_MSG("Uniforms supplied for set ("+itos(i)+"):\n"+_shader_uniform_debug(us->shader_id,us->shader_set)+"\nare not the same format as required by the pipeline shader. Pipeline shader requires the following bindings:\n"+_shader_uniform_debug(dl->state.pipeline_shader));
}else{
ERR_FAIL_MSG("Uniforms supplied for set ("+itos(i)+", which was was just freed) are not the same format as required by the pipeline shader. Pipeline shader requires the following bindings:\n"+_shader_uniform_debug(dl->state.pipeline_shader));
"Index amount ("+itos(to_draw)+") must be a multiple of the amount of indices required by the render primitive ("+itos(dl->validation.pipeline_primitive_divisor)+").");
"Vertex amount ("+itos(to_draw)+") must be a multiple of the amount of vertices required by the render primitive ("+itos(dl->validation.pipeline_primitive_divisor)+").");
ERR_FAIL_MSG("Uniforms supplied for set ("+itos(i)+"):\n"+_shader_uniform_debug(us->shader_id,us->shader_set)+"\nare not the same format as required by the pipeline shader. Pipeline shader requires the following bindings:\n"+_shader_uniform_debug(cl->state.pipeline_shader));
}else{
ERR_FAIL_MSG("Uniforms supplied for set ("+itos(i)+", which was was just freed) are not the same format as required by the pipeline shader. Pipeline shader requires the following bindings:\n"+_shader_uniform_debug(cl->state.pipeline_shader));
ERR_FAIL_MSG("Uniforms supplied for set ("+itos(i)+"):\n"+_shader_uniform_debug(us->shader_id,us->shader_set)+"\nare not the same format as required by the pipeline shader. Pipeline shader requires the following bindings:\n"+_shader_uniform_debug(cl->state.pipeline_shader));
}else{
ERR_FAIL_MSG("Uniforms supplied for set ("+itos(i)+", which was was just freed) are not the same format as required by the pipeline shader. Pipeline shader requires the following bindings:\n"+_shader_uniform_debug(cl->state.pipeline_shader));
frame_count=p_context->get_swapchain_image_count()+1;//always need one extra to ensure it's unused at any time, without having to use a fence for this.