mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
Merge branch 'mesa_7_5_branch'
Conflicts: src/mesa/main/api_validate.c
This commit is contained in:
commit
8d48222791
26 changed files with 215 additions and 105 deletions
|
|
@ -21,7 +21,7 @@ static void Display(void)
|
|||
GLfloat min, max;
|
||||
int i;
|
||||
|
||||
glClearColor(0.5, 0.5, 0.5, 0);
|
||||
glClearColor(0.5, 0.5, 0.5, 1.0);
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
/* draw a sphere */
|
||||
|
|
@ -82,7 +82,7 @@ static void Key(unsigned char key, int x, int y)
|
|||
|
||||
static void Init(void)
|
||||
{
|
||||
const GLfloat blue[4] = {.1, .1, 1.0, 0.0};
|
||||
const GLfloat blue[4] = {.1, .1, 1.0, 1.0};
|
||||
const GLfloat gray[4] = {0.2, 0.2, 0.2, 1.0};
|
||||
const GLfloat white[4] = {1.0, 1.0, 1.0, 1.0};
|
||||
const GLfloat pos[4] = {0, 0, 10, 0};
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ struct winthread {
|
|||
int WinWidth, WinHeight;
|
||||
GLboolean NewSize;
|
||||
HANDLE hEventInitialised;
|
||||
GLboolean Initialized;
|
||||
GLboolean MakeNewTexture;
|
||||
HANDLE hEventRedraw;
|
||||
};
|
||||
|
|
@ -114,20 +115,20 @@ static void
|
|||
MakeNewTexture(struct winthread *wt)
|
||||
{
|
||||
#define TEX_SIZE 128
|
||||
static float step = 0.0;
|
||||
static float step = 0.0f;
|
||||
GLfloat image[TEX_SIZE][TEX_SIZE][4];
|
||||
GLint width;
|
||||
int i, j;
|
||||
|
||||
for (j = 0; j < TEX_SIZE; j++) {
|
||||
for (i = 0; i < TEX_SIZE; i++) {
|
||||
float dt = 5.0 * (j - 0.5 * TEX_SIZE) / TEX_SIZE;
|
||||
float ds = 5.0 * (i - 0.5 * TEX_SIZE) / TEX_SIZE;
|
||||
float dt = 5.0f * (j - 0.5f * TEX_SIZE) / TEX_SIZE;
|
||||
float ds = 5.0f * (i - 0.5f * TEX_SIZE) / TEX_SIZE;
|
||||
float r = dt * dt + ds * ds + step;
|
||||
image[j][i][0] =
|
||||
image[j][i][1] =
|
||||
image[j][i][2] = 0.75 + 0.25 * cos(r);
|
||||
image[j][i][3] = 1.0;
|
||||
image[j][i][2] = 0.75f + 0.25f * (float) cos(r);
|
||||
image[j][i][3] = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -159,7 +160,7 @@ static void
|
|||
draw_object(void)
|
||||
{
|
||||
glPushMatrix();
|
||||
glScalef(0.75, 0.75, 0.75);
|
||||
glScalef(0.75f, 0.75f, 0.75f);
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
|
||||
|
|
@ -288,6 +289,15 @@ draw_loop(struct winthread *wt)
|
|||
|
||||
wglMakeCurrent(wt->hDC, wt->Context);
|
||||
|
||||
if (!wt->Initialized) {
|
||||
printf("wglthreads: %d: GL_RENDERER = %s\n", wt->Index,
|
||||
(char *) glGetString(GL_RENDERER));
|
||||
if (Texture /*&& wt->Index == 0*/) {
|
||||
MakeNewTexture(wt);
|
||||
}
|
||||
wt->Initialized = GL_TRUE;
|
||||
}
|
||||
|
||||
if (Locking)
|
||||
LeaveCriticalSection(&Mutex);
|
||||
|
||||
|
|
@ -315,7 +325,7 @@ draw_loop(struct winthread *wt)
|
|||
glPushMatrix();
|
||||
glRotatef(wt->Angle, 0, 1, 0);
|
||||
glRotatef(wt->Angle, 1, 0, 0);
|
||||
glScalef(0.7, 0.7, 0.7);
|
||||
glScalef(0.7f, 0.7f, 0.7f);
|
||||
draw_object();
|
||||
glPopMatrix();
|
||||
|
||||
|
|
@ -482,14 +492,6 @@ create_window(struct winthread *wt, HGLRC shareCtx)
|
|||
wt->WinWidth = width;
|
||||
wt->WinHeight = height;
|
||||
wt->NewSize = GL_TRUE;
|
||||
|
||||
wglMakeCurrent(hdc, ctx);
|
||||
printf("wglthreads: %d: GL_RENDERER = %s\n", wt->Index, (char *) glGetString(GL_RENDERER));
|
||||
wglMakeCurrent(NULL, NULL);
|
||||
|
||||
if (Texture/* && wt->Index == 0*/) {
|
||||
MakeNewTexture(wt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -539,6 +541,7 @@ main(int argc, char *argv[])
|
|||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-h") == 0) {
|
||||
usage();
|
||||
exit(0);
|
||||
}
|
||||
else if (strcmp(argv[i], "-l") == 0) {
|
||||
Locking = 1;
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ ppc_allocate_register(struct ppc_function *p)
|
|||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < PPC_NUM_REGS; i++) {
|
||||
const uint64_t mask = 1 << i;
|
||||
const uint32_t mask = 1 << i;
|
||||
if ((p->reg_used & mask) == 0) {
|
||||
p->reg_used |= mask;
|
||||
return i;
|
||||
|
|
@ -200,7 +200,7 @@ ppc_allocate_fp_register(struct ppc_function *p)
|
|||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < PPC_NUM_FP_REGS; i++) {
|
||||
const uint64_t mask = 1 << i;
|
||||
const uint32_t mask = 1 << i;
|
||||
if ((p->fp_used & mask) == 0) {
|
||||
p->fp_used |= mask;
|
||||
return i;
|
||||
|
|
@ -232,7 +232,7 @@ ppc_allocate_vec_register(struct ppc_function *p)
|
|||
{
|
||||
unsigned i;
|
||||
for (i = 0; i < PPC_NUM_VEC_REGS; i++) {
|
||||
const uint64_t mask = 1 << i;
|
||||
const uint32_t mask = 1 << i;
|
||||
if ((p->vec_used & mask) == 0) {
|
||||
p->vec_used |= mask;
|
||||
return i;
|
||||
|
|
|
|||
|
|
@ -126,6 +126,22 @@ softpipe_is_texture_referenced( struct pipe_context *pipe,
|
|||
struct pipe_texture *texture,
|
||||
unsigned face, unsigned level)
|
||||
{
|
||||
struct softpipe_context *softpipe = softpipe_context( pipe );
|
||||
unsigned i;
|
||||
|
||||
if(softpipe->dirty_render_cache) {
|
||||
for (i = 0; i < softpipe->framebuffer.nr_cbufs; i++) {
|
||||
if(softpipe->framebuffer.cbufs[i] &&
|
||||
softpipe->framebuffer.cbufs[i]->texture == texture)
|
||||
return PIPE_REFERENCED_FOR_WRITE;
|
||||
}
|
||||
if(softpipe->framebuffer.zsbuf &&
|
||||
softpipe->framebuffer.zsbuf->texture == texture)
|
||||
return PIPE_REFERENCED_FOR_WRITE;
|
||||
}
|
||||
|
||||
/* FIXME: we also need to do the same for the texture cache */
|
||||
|
||||
return PIPE_UNREFERENCED;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,8 @@ struct softpipe_context {
|
|||
struct draw_stage *vbuf;
|
||||
struct softpipe_vbuf_render *vbuf_render;
|
||||
|
||||
boolean dirty_render_cache;
|
||||
|
||||
struct softpipe_tile_cache *cbuf_cache[PIPE_MAX_COLOR_BUFS];
|
||||
struct softpipe_tile_cache *zsbuf_cache;
|
||||
|
||||
|
|
|
|||
|
|
@ -182,6 +182,8 @@ softpipe_draw_range_elements(struct pipe_context *pipe,
|
|||
/* Note: leave drawing surfaces mapped */
|
||||
softpipe_unmap_constant_buffers(sp);
|
||||
|
||||
sp->dirty_render_cache = TRUE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,8 @@ softpipe_flush( struct pipe_context *pipe,
|
|||
* to unmap surfaces when flushing.
|
||||
*/
|
||||
softpipe_unmap_transfers(softpipe);
|
||||
|
||||
softpipe->dirty_render_cache = FALSE;
|
||||
}
|
||||
|
||||
/* Enable to dump BMPs of the color/depth buffers each frame */
|
||||
|
|
|
|||
|
|
@ -444,7 +444,8 @@ static void flush_spans( struct setup_context *setup )
|
|||
mask |= MASK_TOP_RIGHT;
|
||||
if (x+1 >= xleft1 && x+1 < xright1)
|
||||
mask |= MASK_BOTTOM_RIGHT;
|
||||
EMIT_QUAD( setup, x, setup->span.y, mask );
|
||||
if (mask)
|
||||
EMIT_QUAD( setup, x, setup->span.y, mask );
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -458,7 +459,8 @@ static void flush_spans( struct setup_context *setup )
|
|||
mask |= MASK_TOP_LEFT;
|
||||
if (x+1 >= xleft0 && x+1 < xright0)
|
||||
mask |= MASK_TOP_RIGHT;
|
||||
EMIT_QUAD( setup, x, setup->span.y, mask );
|
||||
if (mask)
|
||||
EMIT_QUAD( setup, x, setup->span.y, mask );
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -472,7 +474,8 @@ static void flush_spans( struct setup_context *setup )
|
|||
mask |= MASK_BOTTOM_LEFT;
|
||||
if (x+1 >= xleft1 && x+1 < xright1)
|
||||
mask |= MASK_BOTTOM_RIGHT;
|
||||
EMIT_QUAD( setup, x, setup->span.y, mask );
|
||||
if (mask)
|
||||
EMIT_QUAD( setup, x, setup->span.y, mask );
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -62,29 +62,29 @@ pipe_is_referenced(struct pipe_reference *reference)
|
|||
* Set 'ptr' to point to 'reference' and update reference counting.
|
||||
* The old thing pointed to, if any, will be unreferenced first.
|
||||
* 'reference' may be NULL.
|
||||
*
|
||||
* XXX: thread safety issues!
|
||||
*/
|
||||
static INLINE bool
|
||||
pipe_reference(struct pipe_reference **ptr, struct pipe_reference *reference)
|
||||
{
|
||||
bool destroy = FALSE;
|
||||
|
||||
/* bump the reference.count first */
|
||||
if (reference) {
|
||||
assert(pipe_is_referenced(reference));
|
||||
p_atomic_inc(&reference->count);
|
||||
}
|
||||
|
||||
if (*ptr) {
|
||||
assert(pipe_is_referenced(*ptr));
|
||||
if (p_atomic_dec_zero(&(*ptr)->count)) {
|
||||
destroy = TRUE;
|
||||
if(*ptr != reference) {
|
||||
/* bump the reference.count first */
|
||||
if (reference) {
|
||||
assert(pipe_is_referenced(reference));
|
||||
p_atomic_inc(&reference->count);
|
||||
}
|
||||
|
||||
if (*ptr) {
|
||||
assert(pipe_is_referenced(*ptr));
|
||||
if (p_atomic_dec_zero(&(*ptr)->count)) {
|
||||
destroy = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
*ptr = reference;
|
||||
}
|
||||
|
||||
*ptr = reference;
|
||||
|
||||
return destroy;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
|
||||
|
||||
#include "pipe/p_compiler.h"
|
||||
#include "util/u_debug.h" /* for assert */
|
||||
|
||||
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,14 @@ for name, value in globals().items():
|
|||
if name.startswith("PIPE_FORMAT_") and isinstance(value, int):
|
||||
formats[value] = name
|
||||
|
||||
def is_depth_stencil_format(format):
|
||||
# FIXME: make and use binding to pf_is_depth_stencil
|
||||
return format in (
|
||||
PIPE_FORMAT_Z32_UNORM,
|
||||
PIPE_FORMAT_Z24S8_UNORM,
|
||||
PIPE_FORMAT_Z24X8_UNORM,
|
||||
PIPE_FORMAT_Z16_UNORM,
|
||||
)
|
||||
|
||||
def make_image(width, height, rgba):
|
||||
import Image
|
||||
|
|
|
|||
|
|
@ -497,17 +497,13 @@ def main():
|
|||
PIPE_TEXTURE_3D,
|
||||
]
|
||||
|
||||
formats = [
|
||||
color_formats = [
|
||||
PIPE_FORMAT_A8R8G8B8_UNORM,
|
||||
PIPE_FORMAT_X8R8G8B8_UNORM,
|
||||
#PIPE_FORMAT_A8R8G8B8_SRGB,
|
||||
PIPE_FORMAT_R5G6B5_UNORM,
|
||||
PIPE_FORMAT_A1R5G5B5_UNORM,
|
||||
PIPE_FORMAT_A4R4G4B4_UNORM,
|
||||
PIPE_FORMAT_Z32_UNORM,
|
||||
PIPE_FORMAT_Z24S8_UNORM,
|
||||
PIPE_FORMAT_Z24X8_UNORM,
|
||||
PIPE_FORMAT_Z16_UNORM,
|
||||
PIPE_FORMAT_A8_UNORM,
|
||||
PIPE_FORMAT_L8_UNORM,
|
||||
PIPE_FORMAT_YCBCR,
|
||||
|
|
@ -517,6 +513,13 @@ def main():
|
|||
#PIPE_FORMAT_DXT5_RGBA,
|
||||
]
|
||||
|
||||
depth_formats = [
|
||||
PIPE_FORMAT_Z32_UNORM,
|
||||
PIPE_FORMAT_Z24S8_UNORM,
|
||||
PIPE_FORMAT_Z24X8_UNORM,
|
||||
PIPE_FORMAT_Z16_UNORM,
|
||||
]
|
||||
|
||||
sizes = [64, 32, 16, 8, 4, 2, 1]
|
||||
#sizes = [1020, 508, 252, 62, 30, 14, 6, 3]
|
||||
#sizes = [64]
|
||||
|
|
@ -531,8 +534,8 @@ def main():
|
|||
PIPE_TEX_FACE_NEG_Z,
|
||||
]
|
||||
|
||||
for target in targets:
|
||||
for format in formats:
|
||||
for format in color_formats:
|
||||
for target in targets:
|
||||
for size in sizes:
|
||||
if target == PIPE_TEXTURE_3D:
|
||||
depth = size
|
||||
|
|
@ -546,17 +549,7 @@ def main():
|
|||
for level in range(0, last_level + 1):
|
||||
zslice = 0
|
||||
while zslice < depth >> level:
|
||||
if format in (
|
||||
PIPE_FORMAT_Z32_UNORM,
|
||||
PIPE_FORMAT_Z24S8_UNORM,
|
||||
PIPE_FORMAT_Z24X8_UNORM,
|
||||
PIPE_FORMAT_Z16_UNORM,
|
||||
):
|
||||
klass = TextureDepthSampleTest
|
||||
else:
|
||||
klass = TextureColorSampleTest
|
||||
|
||||
test = klass(
|
||||
test = TextureColorSampleTest(
|
||||
dev = dev,
|
||||
target = target,
|
||||
format = format,
|
||||
|
|
@ -570,6 +563,27 @@ def main():
|
|||
)
|
||||
suite.add_test(test)
|
||||
zslice = (zslice + 1)*2 - 1
|
||||
for format in depth_formats:
|
||||
target = PIPE_TEXTURE_2D
|
||||
depth = 1
|
||||
face = 0
|
||||
last_level = 0
|
||||
level = 0
|
||||
zslice = 0
|
||||
for size in sizes:
|
||||
test = TextureDepthSampleTest(
|
||||
dev = dev,
|
||||
target = target,
|
||||
format = format,
|
||||
width = size,
|
||||
height = size,
|
||||
depth = depth,
|
||||
last_level = last_level,
|
||||
face = face,
|
||||
level = level,
|
||||
zslice = zslice,
|
||||
)
|
||||
suite.add_test(test)
|
||||
suite.run()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -614,9 +614,10 @@ struct brw_context
|
|||
struct brw_wm_prog_data *prog_data;
|
||||
struct brw_wm_compile *compile_data;
|
||||
|
||||
/* Input sizes, calculated from active vertex program:
|
||||
/** Input sizes, calculated from active vertex program.
|
||||
* One bit per fragment program input attribute.
|
||||
*/
|
||||
GLuint input_size_masks[4];
|
||||
GLbitfield input_size_masks[4];
|
||||
|
||||
/** Array of surface default colors (texture border color) */
|
||||
dri_bo *sdc_bo[BRW_MAX_TEX_UNIT];
|
||||
|
|
|
|||
|
|
@ -39,8 +39,8 @@
|
|||
*/
|
||||
struct tracker {
|
||||
GLboolean twoside;
|
||||
GLubyte active[PROGRAM_OUTPUT+1][128];
|
||||
GLuint size_masks[4];
|
||||
GLubyte active[PROGRAM_OUTPUT+1][MAX_PROGRAM_TEMPS];
|
||||
GLbitfield size_masks[4]; /**< one bit per fragment program input attrib */
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -53,8 +53,10 @@ static void set_active_component( struct tracker *t,
|
|||
case PROGRAM_TEMPORARY:
|
||||
case PROGRAM_INPUT:
|
||||
case PROGRAM_OUTPUT:
|
||||
assert(file < PROGRAM_OUTPUT + 1);
|
||||
assert(index < Elements(t->active[0]));
|
||||
t->active[file][index] |= active;
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -108,10 +110,15 @@ static GLubyte get_active( struct tracker *t,
|
|||
return active;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the size (1,2,3 or 4) of the output/result for VERT_RESULT_idx.
|
||||
*/
|
||||
static GLubyte get_output_size( struct tracker *t,
|
||||
GLuint idx )
|
||||
{
|
||||
GLubyte active = t->active[PROGRAM_OUTPUT][idx];
|
||||
GLubyte active;
|
||||
assert(idx < VERT_RESULT_MAX);
|
||||
active = t->active[PROGRAM_OUTPUT][idx];
|
||||
if (active & (1<<3)) return 4;
|
||||
if (active & (1<<2)) return 3;
|
||||
if (active & (1<<1)) return 2;
|
||||
|
|
@ -123,7 +130,7 @@ static GLubyte get_output_size( struct tracker *t,
|
|||
*/
|
||||
static void calc_sizes( struct tracker *t )
|
||||
{
|
||||
GLuint i;
|
||||
GLint vertRes;
|
||||
|
||||
if (t->twoside) {
|
||||
t->active[PROGRAM_OUTPUT][VERT_RESULT_COL0] |=
|
||||
|
|
@ -133,12 +140,27 @@ static void calc_sizes( struct tracker *t )
|
|||
t->active[PROGRAM_OUTPUT][VERT_RESULT_BFC1];
|
||||
}
|
||||
|
||||
for (i = 0; i < FRAG_ATTRIB_MAX; i++) {
|
||||
switch (get_output_size(t, i)) {
|
||||
case 4: t->size_masks[4-1] |= 1<<i;
|
||||
case 3: t->size_masks[3-1] |= 1<<i;
|
||||
case 2: t->size_masks[2-1] |= 1<<i;
|
||||
case 1: t->size_masks[1-1] |= 1<<i;
|
||||
/* Examine vertex program output sizes to set the size_masks[] info
|
||||
* which describes the fragment program input sizes.
|
||||
*/
|
||||
for (vertRes = VERT_RESULT_TEX0; vertRes < VERT_RESULT_MAX; vertRes++) {
|
||||
GLint fragAttrib;
|
||||
|
||||
/* map vertex program output index to fragment program input index */
|
||||
if (vertRes <= VERT_RESULT_TEX7)
|
||||
fragAttrib = FRAG_ATTRIB_TEX0 + vertRes - VERT_RESULT_TEX0;
|
||||
else if (vertRes >= VERT_RESULT_VAR0)
|
||||
fragAttrib = FRAG_ATTRIB_VAR0 + vertRes - VERT_RESULT_VAR0;
|
||||
else
|
||||
continue;
|
||||
assert(fragAttrib >= FRAG_ATTRIB_TEX0);
|
||||
assert(fragAttrib <= FRAG_ATTRIB_MAX);
|
||||
|
||||
switch (get_output_size(t, vertRes)) {
|
||||
case 4: t->size_masks[4-1] |= 1 << fragAttrib;
|
||||
case 3: t->size_masks[3-1] |= 1 << fragAttrib;
|
||||
case 2: t->size_masks[2-1] |= 1 << fragAttrib;
|
||||
case 1: t->size_masks[1-1] |= 1 << fragAttrib;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -267,7 +267,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
|
|||
|
||||
|
||||
/* BRW_NEW_WM_INPUT_DIMENSIONS */
|
||||
key->projtex_mask = brw->wm.input_size_masks[4-1] >> (FRAG_ATTRIB_TEX0 - FRAG_ATTRIB_WPOS);
|
||||
key->proj_attrib_mask = brw->wm.input_size_masks[4-1];
|
||||
|
||||
/* _NEW_LIGHT */
|
||||
key->flat_shade = (ctx->Light.ShadeModel == GL_FLAT);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ struct brw_wm_prog_key {
|
|||
GLuint linear_color:1; /**< linear interpolation vs perspective interp */
|
||||
GLuint runtime_check_aads_emit:1;
|
||||
|
||||
GLuint projtex_mask:16;
|
||||
GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */
|
||||
GLuint shadowtex_mask:16;
|
||||
GLuint yuvtex_mask:16;
|
||||
GLuint yuvtex_swap_mask:16; /* UV swaped */
|
||||
|
|
|
|||
|
|
@ -846,10 +846,16 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if the given TXP instruction really needs the divide-by-W step.
|
||||
*/
|
||||
static GLboolean projtex( struct brw_wm_compile *c,
|
||||
const struct prog_instruction *inst )
|
||||
{
|
||||
struct prog_src_register src = inst->SrcReg[0];
|
||||
const struct prog_src_register src = inst->SrcReg[0];
|
||||
GLboolean retVal;
|
||||
|
||||
assert(inst->Opcode == OPCODE_TXP);
|
||||
|
||||
/* Only try to detect the simplest cases. Could detect (later)
|
||||
* cases where we are trying to emit code like RCP {1.0}, MUL x,
|
||||
|
|
@ -859,16 +865,21 @@ static GLboolean projtex( struct brw_wm_compile *c,
|
|||
* user-provided fragment programs anyway:
|
||||
*/
|
||||
if (inst->TexSrcTarget == TEXTURE_CUBE_INDEX)
|
||||
return 0; /* ut2004 gun rendering !?! */
|
||||
retVal = GL_FALSE; /* ut2004 gun rendering !?! */
|
||||
else if (src.File == PROGRAM_INPUT &&
|
||||
GET_SWZ(src.Swizzle, W) == W &&
|
||||
(c->key.projtex_mask & (1<<(src.Index + FRAG_ATTRIB_WPOS - FRAG_ATTRIB_TEX0))) == 0)
|
||||
return 0;
|
||||
(c->key.proj_attrib_mask & (1 << src.Index)) == 0)
|
||||
retVal = GL_FALSE;
|
||||
else
|
||||
return 1;
|
||||
retVal = GL_TRUE;
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Emit code for TXP.
|
||||
*/
|
||||
static void precalc_txp( struct brw_wm_compile *c,
|
||||
const struct prog_instruction *inst )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -410,6 +410,30 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
|
|||
static void
|
||||
intelDestroyBuffer(__DRIdrawablePrivate * driDrawPriv)
|
||||
{
|
||||
struct intel_framebuffer *intel_fb = driDrawPriv->driverPrivate;
|
||||
struct intel_renderbuffer *depth_rb;
|
||||
struct intel_renderbuffer *stencil_rb;
|
||||
|
||||
if (intel_fb) {
|
||||
if (intel_fb->color_rb[0]) {
|
||||
intel_renderbuffer_set_region(intel_fb->color_rb[0], NULL);
|
||||
}
|
||||
|
||||
if (intel_fb->color_rb[1]) {
|
||||
intel_renderbuffer_set_region(intel_fb->color_rb[1], NULL);
|
||||
}
|
||||
|
||||
depth_rb = intel_get_renderbuffer(&intel_fb->Base, BUFFER_DEPTH);
|
||||
if (depth_rb) {
|
||||
intel_renderbuffer_set_region(depth_rb, NULL);
|
||||
}
|
||||
|
||||
stencil_rb = intel_get_renderbuffer(&intel_fb->Base, BUFFER_STENCIL);
|
||||
if (stencil_rb) {
|
||||
intel_renderbuffer_set_region(stencil_rb, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
_mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ max_buffer_index(GLcontext *ctx, GLuint count, GLenum type,
|
|||
{
|
||||
const GLubyte *map = NULL;
|
||||
GLuint max = 0;
|
||||
GLint i;
|
||||
GLuint i;
|
||||
|
||||
if (elementBuf->Name) {
|
||||
/* elements are in a user-defined buffer object. need to map it */
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
|
|||
|
||||
|
||||
/** Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0], texture/fb data */
|
||||
#define BYTE_TO_FLOAT_TEX(B) ((B) == -128 ? -1.0 : (B) * (1.0F/127.0F))
|
||||
#define BYTE_TO_FLOAT_TEX(B) ((B) == -128 ? -1.0F : (B) * (1.0F/127.0F))
|
||||
|
||||
/** Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127], texture/fb data */
|
||||
#define FLOAT_TO_BYTE_TEX(X) ( (GLint) (127.0F * (X)) )
|
||||
|
|
@ -65,7 +65,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
|
|||
#define USHORT_TO_FLOAT(S) ((GLfloat) (S) * (1.0F / 65535.0F))
|
||||
|
||||
/** Convert GLfloat in [0.0,1.0] to GLushort in [0, 65535] */
|
||||
#define FLOAT_TO_USHORT(X) ((GLuint) ((X) * 65535.0))
|
||||
#define FLOAT_TO_USHORT(X) ((GLuint) ((X) * 65535.0F))
|
||||
|
||||
|
||||
/** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */
|
||||
|
|
@ -76,7 +76,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
|
|||
|
||||
|
||||
/** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0], texture/fb data */
|
||||
#define SHORT_TO_FLOAT_TEX(S) ((S) == -32768 ? -1.0 : (S) * (1.0F/32767.0F))
|
||||
#define SHORT_TO_FLOAT_TEX(S) ((S) == -32768 ? -1.0F : (S) * (1.0F/32767.0F))
|
||||
|
||||
/** Convert GLfloat in [-1.0,1.0] to GLshort in [-32768,32767], texture/fb data */
|
||||
#define FLOAT_TO_SHORT_TEX(X) ( (GLint) (32767.0F * (X)) )
|
||||
|
|
@ -86,7 +86,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
|
|||
#define UINT_TO_FLOAT(U) ((GLfloat) (U) * (1.0F / 4294967295.0F))
|
||||
|
||||
/** Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */
|
||||
#define FLOAT_TO_UINT(X) ((GLuint) ((X) * 4294967295.0))
|
||||
#define FLOAT_TO_UINT(X) ((GLuint) ((X) * 4294967295.0F))
|
||||
|
||||
|
||||
/** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */
|
||||
|
|
@ -97,11 +97,11 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
|
|||
#define FLOAT_TO_INT(X) ( (((GLint) (4294967294.0F * (X))) - 1) / 2 )
|
||||
*/
|
||||
/* a close approximation: */
|
||||
#define FLOAT_TO_INT(X) ( (GLint) (2147483647.0 * (X)) )
|
||||
#define FLOAT_TO_INT(X) ( (GLint) (2147483647.0F * (X)) )
|
||||
|
||||
|
||||
/** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0], texture/fb data */
|
||||
#define INT_TO_FLOAT_TEX(I) ((I) == -2147483648 ? -1.0 : (I) * (1.0F/2147483647.0))
|
||||
#define INT_TO_FLOAT_TEX(I) ((I) == -2147483648 ? -1.0F : (I) * (1.0F/2147483647.0F))
|
||||
|
||||
/** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647], texture/fb data */
|
||||
#define FLOAT_TO_INT_TEX(X) ( (GLint) (2147483647.0F * (X)) )
|
||||
|
|
@ -120,7 +120,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
|
|||
#define INT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 15)))
|
||||
#define UINT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 16)))
|
||||
#define UNCLAMPED_FLOAT_TO_USHORT(us, f) \
|
||||
us = ( (GLushort) IROUND( CLAMP((f), 0.0, 1.0) * 65535.0F) )
|
||||
us = ( (GLushort) IROUND( CLAMP((f), 0.0F, 1.0F) * 65535.0F) )
|
||||
#define CLAMPED_FLOAT_TO_USHORT(us, f) \
|
||||
us = ( (GLushort) IROUND( (f) * 65535.0F) )
|
||||
|
||||
|
|
|
|||
|
|
@ -959,7 +959,7 @@ void GLAPIENTRY
|
|||
_mesa_GetTexBumpParameterivATI( GLenum pname, GLint *param )
|
||||
{
|
||||
const struct gl_texture_unit *texUnit;
|
||||
GLint i;
|
||||
GLuint i;
|
||||
GLint temp = 0;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
|
@ -1006,7 +1006,7 @@ void GLAPIENTRY
|
|||
_mesa_GetTexBumpParameterfvATI( GLenum pname, GLfloat *param )
|
||||
{
|
||||
const struct gl_texture_unit *texUnit;
|
||||
GLint i;
|
||||
GLuint i;
|
||||
GLint temp = 0;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
|
|
|||
|
|
@ -877,6 +877,7 @@ static struct ureg get_source( struct texenv_fragment_program *p,
|
|||
|
||||
default:
|
||||
assert(0);
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1347,13 +1347,13 @@ static void FETCH(f_ycbcr)( const struct gl_texture_image *texImage,
|
|||
const GLubyte cb = *src0 & 0xff; /* chroma U */
|
||||
const GLubyte y1 = (*src1 >> 8) & 0xff; /* luminance */
|
||||
const GLubyte cr = *src1 & 0xff; /* chroma V */
|
||||
const GLfloat y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
|
||||
GLfloat r = 1.164 * (y - 16) + 1.596 * (cr - 128);
|
||||
GLfloat g = 1.164 * (y - 16) - 0.813 * (cr - 128) - 0.391 * (cb - 128);
|
||||
GLfloat b = 1.164 * (y - 16) + 2.018 * (cb - 128);
|
||||
r *= (1.0 / 255.0F);
|
||||
g *= (1.0 / 255.0F);
|
||||
b *= (1.0 / 255.0F);
|
||||
const GLubyte y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
|
||||
GLfloat r = 1.164F * (y - 16) + 1.596F * (cr - 128);
|
||||
GLfloat g = 1.164F * (y - 16) - 0.813F * (cr - 128) - 0.391F * (cb - 128);
|
||||
GLfloat b = 1.164F * (y - 16) + 2.018F * (cb - 128);
|
||||
r *= (1.0F / 255.0F);
|
||||
g *= (1.0F / 255.0F);
|
||||
b *= (1.0F / 255.0F);
|
||||
texel[RCOMP] = CLAMP(r, 0.0F, 1.0F);
|
||||
texel[GCOMP] = CLAMP(g, 0.0F, 1.0F);
|
||||
texel[BCOMP] = CLAMP(b, 0.0F, 1.0F);
|
||||
|
|
@ -1388,13 +1388,13 @@ static void FETCH(f_ycbcr_rev)( const struct gl_texture_image *texImage,
|
|||
const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */
|
||||
const GLubyte y1 = *src1 & 0xff; /* luminance */
|
||||
const GLubyte cb = (*src1 >> 8) & 0xff; /* chroma U */
|
||||
const GLfloat y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
|
||||
GLfloat r = 1.164 * (y - 16) + 1.596 * (cr - 128);
|
||||
GLfloat g = 1.164 * (y - 16) - 0.813 * (cr - 128) - 0.391 * (cb - 128);
|
||||
GLfloat b = 1.164 * (y - 16) + 2.018 * (cb - 128);
|
||||
r *= (1.0 / 255.0F);
|
||||
g *= (1.0 / 255.0F);
|
||||
b *= (1.0 / 255.0F);
|
||||
const GLubyte y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
|
||||
GLfloat r = 1.164F * (y - 16) + 1.596F * (cr - 128);
|
||||
GLfloat g = 1.164F * (y - 16) - 0.813F * (cr - 128) - 0.391F * (cb - 128);
|
||||
GLfloat b = 1.164F * (y - 16) + 2.018F * (cb - 128);
|
||||
r *= (1.0F / 255.0F);
|
||||
g *= (1.0F / 255.0F);
|
||||
b *= (1.0F / 255.0F);
|
||||
texel[RCOMP] = CLAMP(r, 0.0F, 1.0F);
|
||||
texel[GCOMP] = CLAMP(g, 0.0F, 1.0F);
|
||||
texel[BCOMP] = CLAMP(b, 0.0F, 1.0F);
|
||||
|
|
|
|||
|
|
@ -73,11 +73,11 @@ linear_to_nonlinear(GLfloat cl)
|
|||
{
|
||||
/* can't have values outside [0, 1] */
|
||||
GLfloat cs;
|
||||
if (cl < 0.0031308) {
|
||||
cs = 12.92 * cl;
|
||||
if (cl < 0.0031308f) {
|
||||
cs = 12.92f * cl;
|
||||
}
|
||||
else {
|
||||
cs = 1.055 * _mesa_pow(cl, 0.41666) - 0.055;
|
||||
cs = (GLfloat)(1.055 * _mesa_pow(cl, 0.41666) - 0.055);
|
||||
}
|
||||
return cs;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,8 +73,8 @@ _mesa_set_viewport(GLcontext *ctx, GLint x, GLint y,
|
|||
}
|
||||
|
||||
/* clamp width and height to the implementation dependent range */
|
||||
width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth);
|
||||
height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight);
|
||||
width = MIN2(width, (GLsizei) ctx->Const.MaxViewportWidth);
|
||||
height = MIN2(height, (GLsizei) ctx->Const.MaxViewportHeight);
|
||||
|
||||
ctx->Viewport.X = x;
|
||||
ctx->Viewport.Width = width;
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ lerp_rgba_3d(GLfloat result[4], GLfloat a, GLfloat b, GLfloat c,
|
|||
* If A is a signed integer, A % B doesn't give the right value for A < 0
|
||||
* (in terms of texture repeat). Just casting to unsigned fixes that.
|
||||
*/
|
||||
#define REMAINDER(A, B) ((unsigned) (A) % (unsigned) (B))
|
||||
#define REMAINDER(A, B) (((A) + (B) * 1024) % (B))
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue