aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/mesa/state_tracker/st_atom_texture.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-01-31 08:07:51 +0100
committermarha <marha@users.sourceforge.net>2013-01-31 08:07:51 +0100
commit436f8246cd5a377596f6e42e6562da186ef8df48 (patch)
treea00e72591f276cac16bc0fd65bc263ba89c93c00 /mesalib/src/mesa/state_tracker/st_atom_texture.c
parent69c8cec54b01ed522bf10baf20da70304bac701a (diff)
downloadvcxsrv-436f8246cd5a377596f6e42e6562da186ef8df48.tar.gz
vcxsrv-436f8246cd5a377596f6e42e6562da186ef8df48.tar.bz2
vcxsrv-436f8246cd5a377596f6e42e6562da186ef8df48.zip
libxtrans mesa pixman xkeyboard-config git update 31 jan 2013
libxtrans: bd53f4c8543faf910a7a151241ee07661b4d57ad mesa: a527b2192e3cb4a68af927ab405e38181d2fcf75 pixman: 958bd334b3c17f529c80f2eeef4224f45c62f292 xkeyboard-config: 46cfd7a3b5c6b6e00648407bd4c0dd56ae86d65a
Diffstat (limited to 'mesalib/src/mesa/state_tracker/st_atom_texture.c')
-rw-r--r--mesalib/src/mesa/state_tracker/st_atom_texture.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_atom_texture.c b/mesalib/src/mesa/state_tracker/st_atom_texture.c
index dba1d829c..4b43b2a7d 100644
--- a/mesalib/src/mesa/state_tracker/st_atom_texture.c
+++ b/mesalib/src/mesa/state_tracker/st_atom_texture.c
@@ -152,7 +152,27 @@ st_create_texture_sampler_view_from_stobj(struct pipe_context *pipe,
u_sampler_view_default_template(&templ,
stObj->pt,
format);
- templ.u.tex.first_level = stObj->base.BaseLevel;
+
+ if (stObj->pt->target == PIPE_BUFFER) {
+ unsigned base, size;
+ unsigned f, n;
+ const struct util_format_description *desc
+ = util_format_description(templ.format);
+
+ base = stObj->base.BufferOffset;
+ if (base >= stObj->pt->width0)
+ return NULL;
+ size = MIN2(stObj->pt->width0 - base, (unsigned)stObj->base.BufferSize);
+
+ f = ((base * 8) / desc->block.bits) * desc->block.width;
+ n = ((size * 8) / desc->block.bits) * desc->block.width;
+ if (!n)
+ return NULL;
+ templ.u.buf.first_element = f;
+ templ.u.buf.last_element = f + (n - 1);
+ } else {
+ templ.u.tex.first_level = stObj->base.BaseLevel;
+ }
if (swizzle != SWIZZLE_NOOP) {
templ.swizzle_r = GET_SWZ(swizzle, 0);