diff options
author | Brian Paul <[email protected]> | 2014-11-17 14:29:45 -0700 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2014-11-19 00:50:00 +0000 |
commit | 864f604bb1c1746c8ae1222c1dff701e4e3a235a (patch) | |
tree | 5417a5c19886e97d9cc5ae051c6586cb2692f2b6 | |
parent | f02f0559c69daae6ca73e72d32dc329fcb2fd316 (diff) |
st/mesa: copy sampler_array_size field when copying instructions
The sampler_array_size field was added by "mesa/st: add support for
dynamic sampler offsets". But the field wasn't getting copied in
the get_pixel_transfer_visitor() or get_bitmap_visitor() functions.
The count_resources() function then didn't properly compute the
glsl_to_tgsi_visitor::samplers_used bitmask. Then, we didn't declare
all the sampler registers in st_translate_program(). Finally, we
asserted when we tried to emit a tgsi ureg src register with File =
TGSI_FILE_UNDEFINED.
Add the missing assignments and some new assertions to catch the
invalid register sooner.
Cc: "10.3, 10.4" <[email protected]>
Reviewed-by: Ilia Mirkin <[email protected]>
(cherry picked from commit 11abd7b2bc49455bb8c5b2f9e60f92d4284ae6c2)
-rw-r--r-- | src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 57416d1bf59..a5117fdbdc8 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4059,6 +4059,7 @@ get_pixel_transfer_visitor(struct st_fragment_program *fp, newinst = v->emit(NULL, inst->op, inst->dst, src_regs[0], src_regs[1], src_regs[2]); newinst->tex_target = inst->tex_target; + newinst->sampler_array_size = inst->sampler_array_size; } /* Make modifications to fragment program info. */ @@ -4138,6 +4139,7 @@ get_bitmap_visitor(struct st_fragment_program *fp, newinst = v->emit(NULL, inst->op, inst->dst, src_regs[0], src_regs[1], src_regs[2]); newinst->tex_target = inst->tex_target; + newinst->sampler_array_size = inst->sampler_array_size; } /* Make modifications to fragment program info. */ @@ -4561,8 +4563,10 @@ compile_tgsi_instruction(struct st_translate *t, inst->saturate, clamp_dst_color_output); - for (i = 0; i < num_src; i++) + for (i = 0; i < num_src; i++) { + assert(inst->src[i].file != PROGRAM_UNDEFINED); src[i] = translate_src(t, &inst->src[i]); + } switch(inst->op) { case TGSI_OPCODE_BGNLOOP: @@ -4592,6 +4596,7 @@ compile_tgsi_instruction(struct st_translate *t, case TGSI_OPCODE_TG4: case TGSI_OPCODE_LODQ: src[num_src] = t->samplers[inst->sampler.index]; + assert(src[num_src].File != TGSI_FILE_NULL); if (inst->sampler.reladdr) src[num_src] = ureg_src_indirect(src[num_src], ureg_src(t->address[2])); |