diff --git a/.pick_status.json b/.pick_status.json index 6c55d85d9b9..27b17511576 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -490,7 +490,7 @@ "description": "llvmpipe: bind sampler views/images properly.", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/llvmpipe/lp_state_cs.c b/src/gallium/drivers/llvmpipe/lp_state_cs.c index 13873893755..5b26bf7265f 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_cs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_cs.c @@ -634,7 +634,7 @@ make_variant_key(struct llvmpipe_context *lp, * This will still work, the only downside is that not actually * used views may be included in the shader key. */ - if(shader->info.base.file_mask[TGSI_FILE_SAMPLER_VIEW] & (1u << (i & 31))) { + if((shader->info.base.file_mask[TGSI_FILE_SAMPLER_VIEW] & (1u << (i & 31))) || i > 31) { lp_sampler_static_texture_state(&cs_sampler[i].texture_state, lp->sampler_views[PIPE_SHADER_COMPUTE][i]); } @@ -643,7 +643,7 @@ make_variant_key(struct llvmpipe_context *lp, else { key->nr_sampler_views = key->nr_samplers; for(i = 0; i < key->nr_sampler_views; ++i) { - if(shader->info.base.file_mask[TGSI_FILE_SAMPLER] & (1 << i)) { + if((shader->info.base.file_mask[TGSI_FILE_SAMPLER] & (1 << i)) || i > 31) { lp_sampler_static_texture_state(&cs_sampler[i].texture_state, lp->sampler_views[PIPE_SHADER_COMPUTE][i]); } @@ -657,7 +657,7 @@ make_variant_key(struct llvmpipe_context *lp, memset(lp_image, 0, key->nr_images * sizeof *lp_image); for (i = 0; i < key->nr_images; ++i) { - if (shader->info.base.file_mask[TGSI_FILE_IMAGE] & (1 << i)) { + if ((shader->info.base.file_mask[TGSI_FILE_IMAGE] & (1 << i)) || i > 31) { lp_sampler_static_texture_state_image(&lp_image[i].image_state, &lp->images[PIPE_SHADER_COMPUTE][i]); } diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 426b1864e82..14318687e28 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -4466,8 +4466,8 @@ make_variant_key(struct llvmpipe_context *lp, * This will still work, the only downside is that not actually * used views may be included in the shader key. */ - if (shader->info.base.file_mask[TGSI_FILE_SAMPLER_VIEW] - & (1u << (i & 31))) { + if ((shader->info.base.file_mask[TGSI_FILE_SAMPLER_VIEW] + & (1u << (i & 31))) || i > 31) { lp_sampler_static_texture_state(&fs_sampler[i].texture_state, lp->sampler_views[PIPE_SHADER_FRAGMENT][i]); } @@ -4476,7 +4476,7 @@ make_variant_key(struct llvmpipe_context *lp, else { key->nr_sampler_views = key->nr_samplers; for (unsigned i = 0; i < key->nr_sampler_views; ++i) { - if (shader->info.base.file_mask[TGSI_FILE_SAMPLER] & (1 << i)) { + if ((shader->info.base.file_mask[TGSI_FILE_SAMPLER] & (1 << i)) || i > 31) { lp_sampler_static_texture_state(&fs_sampler[i].texture_state, lp->sampler_views[PIPE_SHADER_FRAGMENT][i]); } @@ -4490,7 +4490,7 @@ make_variant_key(struct llvmpipe_context *lp, memset(lp_image, 0, key->nr_images * sizeof *lp_image); for (unsigned i = 0; i < key->nr_images; ++i) { - if (shader->info.base.file_mask[TGSI_FILE_IMAGE] & (1 << i)) { + if ((shader->info.base.file_mask[TGSI_FILE_IMAGE] & (1 << i)) || i > 31) { lp_sampler_static_texture_state_image(&lp_image[i].image_state, &lp->images[PIPE_SHADER_FRAGMENT][i]); }