projects
/
mesa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mesa: Remove support for MSVC2008.
[mesa.git]
/
src
/
mesa
/
state_tracker
/
st_cb_drawtex.c
diff --git
a/src/mesa/state_tracker/st_cb_drawtex.c
b/src/mesa/state_tracker/st_cb_drawtex.c
index c99a8d792ed7445e3f0a09bf61bef6f9e6bb62f8..e6ab77fb521c4bb99025c9549a72cb5b94d27443 100644
(file)
--- a/
src/mesa/state_tracker/st_cb_drawtex.c
+++ b/
src/mesa/state_tracker/st_cb_drawtex.c
@@
-1,6
+1,6
@@
/**************************************************************************
*
/**************************************************************************
*
- * Copyright 2008
Tungsten Graphics, Inc., Cedar Park, Texas
.
+ * Copyright 2008
VMware, Inc
.
* All Rights Reserved.
*
**************************************************************************/
* All Rights Reserved.
*
**************************************************************************/
@@
-15,11
+15,13
@@
#include "main/imports.h"
#include "main/image.h"
#include "main/macros.h"
#include "main/imports.h"
#include "main/image.h"
#include "main/macros.h"
+#include "main/teximage.h"
#include "program/program.h"
#include "program/prog_print.h"
#include "st_context.h"
#include "st_atom.h"
#include "program/program.h"
#include "program/prog_print.h"
#include "st_context.h"
#include "st_atom.h"
+#include "st_cb_bitmap.h"
#include "st_cb_drawtex.h"
#include "pipe/p_context.h"
#include "st_cb_drawtex.h"
#include "pipe/p_context.h"
@@
-28,13
+30,11
@@
#include "pipe/p_shader_tokens.h"
#include "util/u_draw_quad.h"
#include "util/u_simple_shaders.h"
#include "pipe/p_shader_tokens.h"
#include "util/u_draw_quad.h"
#include "util/u_simple_shaders.h"
+#include "util/u_upload_mgr.h"
#include "cso_cache/cso_context.h"
#include "cso_cache/cso_context.h"
-#if FEATURE_OES_draw_texture
-
-
struct cached_shader
{
void *handle;
struct cached_shader
{
void *handle;
@@
-93,32
+93,33
@@
lookup_shader(struct pipe_context *pipe,
util_make_vertex_passthrough_shader(pipe,
num_attribs,
semantic_names,
util_make_vertex_passthrough_shader(pipe,
num_attribs,
semantic_names,
- semantic_indexes);
+ semantic_indexes
, FALSE
);
NumCachedShaders++;
return CachedShaders[i].handle;
}
static void
NumCachedShaders++;
return CachedShaders[i].handle;
}
static void
-st_DrawTex(
GL
context *ctx, GLfloat x, GLfloat y, GLfloat z,
+st_DrawTex(
struct gl_
context *ctx, GLfloat x, GLfloat y, GLfloat z,
GLfloat width, GLfloat height)
{
struct st_context *st = ctx->st;
struct pipe_context *pipe = st->pipe;
struct cso_context *cso = ctx->st->cso_context;
GLfloat width, GLfloat height)
{
struct st_context *st = ctx->st;
struct pipe_context *pipe = st->pipe;
struct cso_context *cso = ctx->st->cso_context;
- struct pipe_resource *vbuffer;
- struct pipe_transfer *vbuffer_transfer;
+ struct pipe_resource *vbuffer = NULL;
GLuint i, numTexCoords, numAttribs;
GLboolean emitColor;
uint semantic_names[2 + MAX_TEXTURE_UNITS];
uint semantic_indexes[2 + MAX_TEXTURE_UNITS];
struct pipe_vertex_element velements[2 + MAX_TEXTURE_UNITS];
GLuint i, numTexCoords, numAttribs;
GLboolean emitColor;
uint semantic_names[2 + MAX_TEXTURE_UNITS];
uint semantic_indexes[2 + MAX_TEXTURE_UNITS];
struct pipe_vertex_element velements[2 + MAX_TEXTURE_UNITS];
- GLbitfield inputs = VERT_BIT_POS;
+ unsigned offset;
+
+ st_flush_bitmap_cache(st);
st_validate_state(st);
/* determine if we need vertex color */
st_validate_state(st);
/* determine if we need vertex color */
- if (ctx->FragmentProgram._Current->Base.InputsRead &
FRA
G_BIT_COL0)
+ if (ctx->FragmentProgram._Current->Base.InputsRead &
VARYIN
G_BIT_COL0)
emitColor = GL_TRUE;
else
emitColor = GL_FALSE;
emitColor = GL_TRUE;
else
emitColor = GL_FALSE;
@@
-126,8
+127,8
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
/* determine how many enabled sets of texcoords */
numTexCoords = 0;
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
/* determine how many enabled sets of texcoords */
numTexCoords = 0;
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
- if (ctx->Texture.Unit[i]._
ReallyEnabled & TEXTURE_2D_BIT) {
- inputs |= VERT_BIT_TEX(i);
+ if (ctx->Texture.Unit[i]._
Current &&
+ ctx->Texture.Unit[i]._Current->Target == GL_TEXTURE_2D) {
numTexCoords++;
}
}
numTexCoords++;
}
}
@@
-135,11
+136,6
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
/* total number of attributes per vertex */
numAttribs = 1 + emitColor + numTexCoords;
/* total number of attributes per vertex */
numAttribs = 1 + emitColor + numTexCoords;
-
- /* create the vertex buffer */
- vbuffer = pipe_buffer_create(pipe->screen, PIPE_BIND_VERTEX_BUFFER,
- numAttribs * 4 * 4 * sizeof(GLfloat));
-
/* load vertex buffer */
{
#define SET_ATTRIB(VERT, ATTR, X, Y, Z, W) \
/* load vertex buffer */
{
#define SET_ATTRIB(VERT, ATTR, X, Y, Z, W) \
@@
-153,10
+149,15
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
} while (0)
const GLfloat x0 = x, y0 = y, x1 = x + width, y1 = y + height;
} while (0)
const GLfloat x0 = x, y0 = y, x1 = x + width, y1 = y + height;
- GLfloat *vbuf = (GLfloat *) pipe_buffer_map(pipe, vbuffer,
- PIPE_TRANSFER_WRITE,
- &vbuffer_transfer);
+ GLfloat *vbuf = NULL;
GLuint attr;
GLuint attr;
+
+ u_upload_alloc(st->uploader, 0,
+ numAttribs * 4 * 4 * sizeof(GLfloat), 4,
+ &offset, &vbuffer, (void **) &vbuf);
+ if (!vbuffer) {
+ return;
+ }
z = CLAMP(z, 0.0f, 1.0f);
z = CLAMP(z, 0.0f, 1.0f);
@@
-197,9
+198,10
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
/* texcoords */
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
/* texcoords */
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
- if (ctx->Texture.Unit[i]._ReallyEnabled & TEXTURE_2D_BIT) {
+ if (ctx->Texture.Unit[i]._Current &&
+ ctx->Texture.Unit[i]._Current->Target == GL_TEXTURE_2D) {
struct gl_texture_object *obj = ctx->Texture.Unit[i]._Current;
struct gl_texture_object *obj = ctx->Texture.Unit[i]._Current;
-
struct gl_texture_image *img = obj->Image[0][obj->BaseLevel]
;
+
const struct gl_texture_image *img = _mesa_base_tex_image(obj)
;
const GLfloat wt = (GLfloat) img->Width;
const GLfloat ht = (GLfloat) img->Height;
const GLfloat s0 = obj->CropRect[0] / wt;
const GLfloat wt = (GLfloat) img->Width;
const GLfloat ht = (GLfloat) img->Height;
const GLfloat s0 = obj->CropRect[0] / wt;
@@
-213,28
+215,38
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
SET_ATTRIB(2, attr, s1, t1, 0.0f, 1.0f); /* upper right */
SET_ATTRIB(3, attr, s0, t1, 0.0f, 1.0f); /* upper left */
SET_ATTRIB(2, attr, s1, t1, 0.0f, 1.0f); /* upper right */
SET_ATTRIB(3, attr, s0, t1, 0.0f, 1.0f); /* upper left */
- semantic_names[attr] = TGSI_SEMANTIC_GENERIC;
+ semantic_names[attr] = st->needs_texcoord_semantic ?
+ TGSI_SEMANTIC_TEXCOORD : TGSI_SEMANTIC_GENERIC;
+ /* XXX: should this use semantic index i instead of 0 ? */
semantic_indexes[attr] = 0;
attr++;
}
}
semantic_indexes[attr] = 0;
attr++;
}
}
-
pipe_buffer_unmap(pipe, vbuffer, vbuffer_transf
er);
+
u_upload_unmap(st->upload
er);
#undef SET_ATTRIB
}
cso_save_viewport(cso);
#undef SET_ATTRIB
}
cso_save_viewport(cso);
+ cso_save_stream_outputs(cso);
cso_save_vertex_shader(cso);
cso_save_vertex_shader(cso);
+ cso_save_tessctrl_shader(cso);
+ cso_save_tesseval_shader(cso);
+ cso_save_geometry_shader(cso);
cso_save_vertex_elements(cso);
cso_save_vertex_elements(cso);
+ cso_save_aux_vertex_buffer_slot(cso);
{
void *vs = lookup_shader(pipe, numAttribs,
semantic_names, semantic_indexes);
cso_set_vertex_shader_handle(cso, vs);
}
{
void *vs = lookup_shader(pipe, numAttribs,
semantic_names, semantic_indexes);
cso_set_vertex_shader_handle(cso, vs);
}
+ cso_set_tessctrl_shader_handle(cso, NULL);
+ cso_set_tesseval_shader_handle(cso, NULL);
+ cso_set_geometry_shader_handle(cso, NULL);
for (i = 0; i < numAttribs; i++) {
velements[i].src_offset = i * 4 * sizeof(float);
for (i = 0; i < numAttribs; i++) {
velements[i].src_offset = i * 4 * sizeof(float);
@@
-243,6
+255,7
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
velements[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
}
cso_set_vertex_elements(cso, numAttribs, velements);
velements[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
}
cso_set_vertex_elements(cso, numAttribs, velements);
+ cso_set_stream_outputs(st->cso_context, 0, NULL, NULL);
/* viewport state: viewport matching window dims */
{
/* viewport state: viewport matching window dims */
{
@@
-254,17
+267,16
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
vp.scale[0] = 0.5f * width;
vp.scale[1] = height * (invert ? -0.5f : 0.5f);
vp.scale[2] = 1.0f;
vp.scale[0] = 0.5f * width;
vp.scale[1] = height * (invert ? -0.5f : 0.5f);
vp.scale[2] = 1.0f;
- vp.scale[3] = 1.0f;
vp.translate[0] = 0.5f * width;
vp.translate[1] = 0.5f * height;
vp.translate[2] = 0.0f;
vp.translate[0] = 0.5f * width;
vp.translate[1] = 0.5f * height;
vp.translate[2] = 0.0f;
- vp.translate[3] = 0.0f;
cso_set_viewport(cso, &vp);
}
cso_set_viewport(cso, &vp);
}
- util_draw_vertex_buffer(pipe, vbuffer,
- 0, /* offset */
+ util_draw_vertex_buffer(pipe, cso, vbuffer,
+ cso_get_aux_vertex_buffer_slot(cso),
+ offset, /* offset */
PIPE_PRIM_TRIANGLE_FAN,
4, /* verts */
numAttribs); /* attribs/vert */
PIPE_PRIM_TRIANGLE_FAN,
4, /* verts */
numAttribs); /* attribs/vert */
@@
-275,7
+287,12
@@
st_DrawTex(GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z,
/* restore state */
cso_restore_viewport(cso);
cso_restore_vertex_shader(cso);
/* restore state */
cso_restore_viewport(cso);
cso_restore_vertex_shader(cso);
+ cso_restore_tessctrl_shader(cso);
+ cso_restore_tesseval_shader(cso);
+ cso_restore_geometry_shader(cso);
cso_restore_vertex_elements(cso);
cso_restore_vertex_elements(cso);
+ cso_restore_aux_vertex_buffer_slot(cso);
+ cso_restore_stream_outputs(cso);
}
}
@@
-298,6
+315,3
@@
st_destroy_drawtex(struct st_context *st)
}
NumCachedShaders = 0;
}
}
NumCachedShaders = 0;
}
-
-
-#endif /* FEATURE_OES_draw_texture */