@@ -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)) | |||
/** |