freedreno: fix for null textures
Some apps seem to give us a null sampler/view for texture slots which come before the last used texture slot. In particular 0ad triggers this. Signed-off-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
parent
2ea8e2fccf
commit
6aeeb706d2
2 changed files with 10 additions and 6 deletions
|
|
@ -195,8 +195,10 @@ emit_textures(struct fd_ringbuffer *ring,
|
|||
OUT_RING(ring, CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS) |
|
||||
CP_LOAD_STATE_1_EXT_SRC_ADDR(0));
|
||||
for (i = 0; i < tex->num_textures; i++) {
|
||||
struct fd3_pipe_sampler_view *view =
|
||||
fd3_pipe_sampler_view(tex->textures[i]);
|
||||
static const struct fd3_pipe_sampler_view dummy_view = {};
|
||||
const struct fd3_pipe_sampler_view *view = tex->textures[i] ?
|
||||
fd3_pipe_sampler_view(tex->textures[i]) :
|
||||
&dummy_view;
|
||||
OUT_RING(ring, view->texconst0);
|
||||
OUT_RING(ring, view->texconst1);
|
||||
OUT_RING(ring, view->texconst2 |
|
||||
|
|
@ -213,8 +215,10 @@ emit_textures(struct fd_ringbuffer *ring,
|
|||
OUT_RING(ring, CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS) |
|
||||
CP_LOAD_STATE_1_EXT_SRC_ADDR(0));
|
||||
for (i = 0; i < tex->num_textures; i++) {
|
||||
struct fd3_pipe_sampler_view *view =
|
||||
fd3_pipe_sampler_view(tex->textures[i]);
|
||||
static const struct fd3_pipe_sampler_view dummy_view = {};
|
||||
const struct fd3_pipe_sampler_view *view = tex->textures[i] ?
|
||||
fd3_pipe_sampler_view(tex->textures[i]) :
|
||||
&dummy_view;
|
||||
struct fd_resource *rsc = view->tex_resource;
|
||||
|
||||
for (j = 0; j < view->mipaddrs; j++) {
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ static void bind_sampler_states(struct fd_texture_stateobj *prog,
|
|||
|
||||
for (i = 0; i < nr; i++) {
|
||||
if (hwcso[i])
|
||||
new_nr++;
|
||||
new_nr = i + 1;
|
||||
prog->samplers[i] = hwcso[i];
|
||||
prog->dirty_samplers |= (1 << i);
|
||||
}
|
||||
|
|
@ -78,7 +78,7 @@ static void set_sampler_views(struct fd_texture_stateobj *prog,
|
|||
|
||||
for (i = 0; i < nr; i++) {
|
||||
if (views[i])
|
||||
new_nr++;
|
||||
new_nr = i + 1;
|
||||
pipe_sampler_view_reference(&prog->textures[i], views[i]);
|
||||
prog->dirty_samplers |= (1 << i);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue