Marking brw_stage_state::sampler_count as CACHE_NEW_SAMPLER is wrong.
The number of samplers used by each program is actually computed at
draw time (brw_try_draw_prims), based purely on the currently bound
shader programs (gl_program::SamplersUsed).
CACHE_NEW_SAMPLER means that we've emitted a new SAMPLER_STATE table.
Although this could indicate that the number of samplers has changed,
it could also simply mean that the contents of the table has changed
(i.e. we've bound different textures).
The real reason these atoms depend on CACHE_NEW_SAMPLER is because they
include a pointer to the SAMPLER_STATE table. This was not commented.
So, move the comments to the appropriate place.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
Reviewed-by: Matt Turner <mattst88@gmail.com>
if (brw->gen == 5)
vs->vs5.sampler_count = 0; /* hardware requirement */
else {
- /* CACHE_NEW_SAMPLER */
vs->vs5.sampler_count = (stage_state->sampler_count + 3) / 4;
}
/* Set the sampler state pointer, and its reloc
*/
if (stage_state->sampler_count) {
+ /* CACHE_NEW_SAMPLER - reloc */
vs->vs5.sampler_state_pointer =
(brw->batch.bo->offset64 + stage_state->sampler_offset) >> 5;
drm_intel_bo_emit_reloc(brw->batch.bo,
if (brw->gen == 5)
wm->wm4.sampler_count = 0; /* hardware requirement */
else {
- /* CACHE_NEW_SAMPLER */
wm->wm4.sampler_count = (brw->wm.base.sampler_count + 1) / 4;
}
if (brw->wm.base.sampler_count) {
- /* reloc */
+ /* CACHE_NEW_SAMPLER - reloc */
wm->wm4.sampler_state_pointer = (brw->batch.bo->offset64 +
brw->wm.base.sampler_offset) >> 5;
} else {