translate_sse: Use the correct buffer index in this fast path.
It is possible that there are multiple input buffers but only one is relevant for translation. Then there will be only a single translation group, which might need to source data from a buffer index != 0. Fixes wrong vertex shader inputs as observed while debugging with an application and driver combination that requires translation of a vertex attribute in a non-trivial set of attributes and input buffers. Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
ca848e8bee
commit
1c6aa6599e
|
@ -1228,8 +1228,10 @@ static boolean
|
||||||
incr_inputs(struct translate_sse *p, unsigned index_size)
|
incr_inputs(struct translate_sse *p, unsigned index_size)
|
||||||
{
|
{
|
||||||
if (!index_size && p->nr_buffer_variants == 1) {
|
if (!index_size && p->nr_buffer_variants == 1) {
|
||||||
|
const unsigned buffer_index = p->buffer_variant[0].buffer_index;
|
||||||
struct x86_reg stride =
|
struct x86_reg stride =
|
||||||
x86_make_disp(p->machine_EDI, get_offset(p, &p->buffer[0].stride));
|
x86_make_disp(p->machine_EDI,
|
||||||
|
get_offset(p, &p->buffer[buffer_index].stride));
|
||||||
|
|
||||||
if (p->buffer_variant[0].instance_divisor == 0) {
|
if (p->buffer_variant[0].instance_divisor == 0) {
|
||||||
x64_rexw(p->func);
|
x64_rexw(p->func);
|
||||||
|
|
Loading…
Reference in New Issue