Merge commit 'origin/gallium-0.1' into gallium-0.2
This commit is contained in:
@@ -40,3 +40,4 @@ tri-swz
|
||||
tri-swz2
|
||||
tri-tex
|
||||
tri-xpd
|
||||
fp-tri
|
||||
|
||||
@@ -21,6 +21,8 @@ static int TexWidth = 256, TexHeight = 256;
|
||||
static int WinWidth = 1044, WinHeight = 900;
|
||||
static GLfloat Bias = 0.0;
|
||||
static GLboolean ScaleQuads = GL_FALSE;
|
||||
static GLint Win = 0;
|
||||
|
||||
|
||||
|
||||
static void
|
||||
@@ -145,6 +147,7 @@ Key(unsigned char key, int x, int y)
|
||||
ScaleQuads = !ScaleQuads;
|
||||
break;
|
||||
case 27:
|
||||
glutDestroyWindow(Win);
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
@@ -238,7 +241,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowPosition(0, 0);
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
|
||||
glutCreateWindow(argv[0]);
|
||||
Win = glutCreateWindow(argv[0]);
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Display);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
vp-tris
|
||||
@@ -0,0 +1 @@
|
||||
exptmp
|
||||
@@ -30,6 +30,27 @@
|
||||
* \author Karl Rasche
|
||||
*/
|
||||
|
||||
/**
|
||||
Notes on program parameters, etc.
|
||||
|
||||
The instructions we emit will use six kinds of source registers:
|
||||
|
||||
PROGRAM_INPUT - input registers
|
||||
PROGRAM_TEMPORARY - temp registers
|
||||
PROGRAM_ADDRESS - address/indirect register
|
||||
PROGRAM_SAMPLER - texture sampler
|
||||
PROGRAM_CONSTANT - indexes into program->Parameters, a known constant/literal
|
||||
PROGRAM_STATE_VAR - indexes into program->Parameters, and may actually be:
|
||||
+ a state variable, like "state.fog.color", or
|
||||
+ a pointer to a "program.local[k]" parameter, or
|
||||
+ a pointer to a "program.env[k]" parameter
|
||||
|
||||
Basically, all the program.local[] and program.env[] values will get mapped
|
||||
into the unified gl_program->Parameters array. This solves the problem of
|
||||
having three separate program parameter arrays.
|
||||
*/
|
||||
|
||||
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
@@ -1871,7 +1892,11 @@ parse_param_elements (GLcontext * ctx, const GLubyte ** inst,
|
||||
const_values, 4);
|
||||
if (param_var->param_binding_begin == ~0U)
|
||||
param_var->param_binding_begin = idx;
|
||||
param_var->param_binding_type = PROGRAM_CONSTANT;
|
||||
param_var->param_binding_type = PROGRAM_STATE_VAR;
|
||||
/* Note: when we reference this parameter in an instruction later,
|
||||
* we'll check if it's really a constant/immediate and set the
|
||||
* instruction register type appropriately.
|
||||
*/
|
||||
param_var->param_binding_length++;
|
||||
Program->Base.NumParameters++;
|
||||
break;
|
||||
@@ -2578,6 +2603,18 @@ parse_src_reg (GLcontext * ctx, const GLubyte ** inst,
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (*File == PROGRAM_STATE_VAR) {
|
||||
enum register_file file;
|
||||
|
||||
/* If we're referencing the Program->Parameters[] array, check if the
|
||||
* parameter is really a constant/literal. If so, set File to CONSTANT.
|
||||
*/
|
||||
assert(*Index < Program->Base.Parameters->NumParameters);
|
||||
file = Program->Base.Parameters->Parameters[*Index].Type;
|
||||
if (file == PROGRAM_CONSTANT)
|
||||
*File = PROGRAM_CONSTANT;
|
||||
}
|
||||
|
||||
/* Add attributes to InputsRead only if they are used the program.
|
||||
* This avoids the handling of unused ATTRIB declarations in the drivers. */
|
||||
if (*File == PROGRAM_INPUT)
|
||||
|
||||
@@ -481,8 +481,15 @@ st_TexImage(GLcontext * ctx,
|
||||
if (!stObj->pt) {
|
||||
guess_and_alloc_texture(ctx->st, stObj, stImage);
|
||||
if (!stObj->pt) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
return;
|
||||
/* Probably out of memory.
|
||||
* Try flushing any pending rendering, then retry.
|
||||
*/
|
||||
st_finish(ctx->st);
|
||||
guess_and_alloc_texture(ctx->st, stObj, stImage);
|
||||
if (!stObj->pt) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,7 @@ map_register_file(
|
||||
case PROGRAM_CONSTANT:
|
||||
if (indirectAccess)
|
||||
return TGSI_FILE_CONSTANT;
|
||||
assert(immediateMapping[index] != ~0);
|
||||
return TGSI_FILE_IMMEDIATE;
|
||||
case PROGRAM_INPUT:
|
||||
return TGSI_FILE_INPUT;
|
||||
@@ -118,6 +119,7 @@ map_register_file_index(
|
||||
case TGSI_FILE_IMMEDIATE:
|
||||
if (indirectAccess)
|
||||
return index;
|
||||
assert(immediateMapping[index] != ~0);
|
||||
return immediateMapping[index];
|
||||
|
||||
default:
|
||||
@@ -242,14 +244,6 @@ compile_instruction(
|
||||
immediateMapping,
|
||||
indirectAccess );
|
||||
|
||||
/**
|
||||
* This not at all the correct solution.
|
||||
* FIXME: Roll this up in the above map functions
|
||||
*/
|
||||
if (fullsrc->SrcRegister.File == TGSI_FILE_IMMEDIATE && fullsrc->SrcRegister.Index == ~0) {
|
||||
fullsrc->SrcRegister.File = TGSI_FILE_CONSTANT;
|
||||
fullsrc->SrcRegister.Index = inst->SrcReg[i].Index;
|
||||
}
|
||||
|
||||
/* swizzle (ext swizzle also depends on negation) */
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user