OpenGL: two stage texture binding bug #787
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a specific problem with the OpenGL backend: despite the API providing support for at least 12(
SG_MAX_SHADERSTAGE_IMAGES
) slots for textures for the vertex shader and 12 for the fragment shader, the OpenGL implementation could bind only SG_MAX_SHADERSTAGE_IMAGES combined for both stages because of the length of the binding cache.I propose fixing this issue by increasing the cache size to the value of
SG_MAX_SHADERSTAGE_IMAGES * SG_NUM_SHADER_STAGES
so that all images can be bound. The actual number of supported images is known at runtime,_sg.gl.max_combined_texture_image_units
, and is already used to prevent unsupported bindings.PS: the previous PR #766 could be used to work around these restrictions as well, but that is an independent improvement with its own goal to provide the possibility to increase limits itself (there are shaders where a total of 24 textures is not enough).