mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
svga: handle mismatched number of samplers, sampler views
in svga_init_shader_key_common(). Since the CSO module only tracks
sampler views for fragment shaders, the number of samplers and sampler
views can be mismatched for other types of shaders. This situation
triggered an assertion in Chrome with maps.google.com
This patch adds defensive code to handle that situation.
Fixes VMware bug 1694027
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
(cherry picked from commit 50a669de4e)
This commit is contained in:
parent
6deeccf5aa
commit
474b169c1f
1 changed files with 10 additions and 5 deletions
|
|
@ -173,10 +173,16 @@ svga_init_shader_key_common(const struct svga_context *svga, unsigned shader,
|
|||
|
||||
assert(shader < ARRAY_SIZE(svga->curr.num_sampler_views));
|
||||
|
||||
for (i = 0; i < svga->curr.num_sampler_views[shader]; i++) {
|
||||
/* In case the number of samplers and sampler_views doesn't match,
|
||||
* loop over the lower of the two counts.
|
||||
*/
|
||||
key->num_textures = MIN2(svga->curr.num_sampler_views[shader],
|
||||
svga->curr.num_samplers[shader]);
|
||||
|
||||
for (i = 0; i < key->num_textures; i++) {
|
||||
struct pipe_sampler_view *view = svga->curr.sampler_views[shader][i];
|
||||
if (view) {
|
||||
assert(svga->curr.sampler[shader][i]);
|
||||
const struct svga_sampler_state *sampler = svga->curr.sampler[shader][i];
|
||||
if (view && sampler) {
|
||||
assert(view->texture);
|
||||
assert(view->texture->target < (1 << 4)); /* texture_target:4 */
|
||||
|
||||
|
|
@ -195,7 +201,7 @@ svga_init_shader_key_common(const struct svga_context *svga, unsigned shader,
|
|||
}
|
||||
}
|
||||
|
||||
if (!svga->curr.sampler[shader][i]->normalized_coords) {
|
||||
if (!sampler->normalized_coords) {
|
||||
assert(idx < (1 << 5)); /* width_height_idx:5 bitfield */
|
||||
key->tex[i].width_height_idx = idx++;
|
||||
key->tex[i].unnormalized = TRUE;
|
||||
|
|
@ -208,7 +214,6 @@ svga_init_shader_key_common(const struct svga_context *svga, unsigned shader,
|
|||
key->tex[i].swizzle_a = view->swizzle_a;
|
||||
}
|
||||
}
|
||||
key->num_textures = svga->curr.num_sampler_views[shader];
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue