gallivm: use texture target from shader instead of static state for size query
authorRoland Scheidegger <sroland@vmware.com>
Thu, 8 Aug 2013 01:42:46 +0000 (03:42 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 9 Aug 2013 18:49:18 +0000 (20:49 +0200)
commitb0f74250e1496d4872fd731b45049868b3efc883
tree720be86f5b649d145d91690e37b0f59233bfe550
parent38ad404f7633aded98a0d67438e6bec0d684a5c6
gallivm: use texture target from shader instead of static state for size query

d3d10 has no notion of distinct array resources neither at the resource nor
sampler view level. However, shader dcl of resources certainly has, and
d3d10 expects resinfo to return the values according to that - in particular
a resource might have been a 1d texture with some array layers, then the
sampler view might have only used 1 layer so it can be accessed both as 1d
or 1d array texture (I think - the former definitely works). resinfo of a
resource decleared as array needs to return number of array layers but
non-array resource needs to return 0 (and not 1). Hence fix this by passing
the target from the shader decl to emit_size_query and use that (in case of
OpenGL the target will come from the instruction itself).
Could probably do the same for actual sampling, though it may not matter there
(as the bogus components will essentially get clamped away), possibly could
wreak havoc though if it REALLY doesn't match (which is of course an error
but still).

Reviewed-by: Zack Rusin <zackr@vmware.com>
src/gallium/auxiliary/draw/draw_llvm_sample.c
src/gallium/auxiliary/gallivm/lp_bld_sample.h
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
src/gallium/drivers/llvmpipe/lp_tex_sample.c