#include "main/glheader.h"
#include "main/context.h"
-#include "main/imports.h"
+
#include "prog_instruction.h"
#include "prog_parameter.h"
#include "prog_print.h"
#include "prog_statevars.h"
+#include "util/bitscan.h"
switch (f) {
case PROGRAM_TEMPORARY:
return "TEMP";
- case PROGRAM_STATE_VAR:
- return "STATE";
+ case PROGRAM_ARRAY:
+ return "ARRAY";
case PROGRAM_INPUT:
return "INPUT";
case PROGRAM_OUTPUT:
return "OUTPUT";
+ case PROGRAM_STATE_VAR:
+ return "STATE";
case PROGRAM_CONSTANT:
return "CONST";
case PROGRAM_UNIFORM:
return "SYSVAL";
case PROGRAM_UNDEFINED:
return "UNDEFINED";
+ case PROGRAM_IMMEDIATE:
+ return "IMM";
+ case PROGRAM_BUFFER:
+ return "BUFFER";
+ case PROGRAM_MEMORY:
+ return "MEMORY";
+ case PROGRAM_IMAGE:
+ return "IMAGE";
+ case PROGRAM_HW_ATOMIC:
+ return "HWATOMIC";
default:
{
static char s[20];
- _mesa_snprintf(s, sizeof(s), "FILE%u", f);
+ snprintf(s, sizeof(s), "FILE%u", f);
return s;
}
}
*/
static const char *const vertAttribs[] = {
"vertex.position",
- "vertex.weight",
"vertex.normal",
"vertex.color.primary",
"vertex.color.secondary",
"fragment.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
"fragment.(twenty-eight)", /* VARYING_SLOT_BOUNDING_BOX0 */
"fragment.(twenty-nine)", /* VARYING_SLOT_BOUNDING_BOX1 */
+ "fragment.(thirty)", /* VARYING_SLOT_VIEW_INDEX */
+ "fragment.(thirty-one)", /* VARYING_SLOT_VIEWPORT_MASK */
"fragment.varying[0]",
"fragment.varying[1]",
"fragment.varying[2]",
"result.(twenty-seven)", /* VARYING_SLOT_CULL_DIST1 */
"result.(twenty-eight)", /* VARYING_SLOT_BOUNDING_BOX0 */
"result.(twenty-nine)", /* VARYING_SLOT_BOUNDING_BOX1 */
+ "result.(thirty)", /* VARYING_SLOT_VIEW_INDEX */
+ "result.(thirty-one)", /* VARYING_SLOT_VIEWPORT_MASK */
"result.varying[0]",
"result.varying[1]",
"result.varying[2]",
reg_string((gl_register_file) dstReg->File,
dstReg->Index, mode, dstReg->RelAddr, prog),
_mesa_writemask_string(dstReg->WriteMask));
-
+
#if 0
fprintf(f, "%s[%d]%s",
_mesa_register_file_name((gl_register_file) dstReg->File),
static void
fprint_src_reg(FILE *f,
- const struct prog_src_register *srcReg,
+ const struct prog_src_register *srcReg,
gl_prog_print_mode mode,
const struct gl_program *prog)
{
}
-static void
-fprint_comment(FILE *f, const struct prog_instruction *inst)
-{
- if (inst->Comment)
- fprintf(f, "; # %s\n", inst->Comment);
- else
- fprintf(f, ";\n");
-}
-
-
void
_mesa_fprint_alu_instruction(FILE *f,
const struct prog_instruction *inst,
fprintf(f, ", ");
}
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
}
inst->SrcReg[0].Index,
_mesa_swizzle_string(inst->SrcReg[0].Swizzle,
inst->SrcReg[0].Negate, GL_TRUE));
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_TEX:
case OPCODE_TXP:
}
if (inst->TexShadow)
fprintf(f, " SHADOW");
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_KIL:
fprintf(f, "%s", _mesa_opcode_string(inst->Opcode));
fprintf(f, " ");
fprint_src_reg(f, &inst->SrcReg[0], mode, prog);
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_ARL:
fprintf(f, "ARL ");
fprint_dst_reg(f, &inst->DstReg, mode, prog);
fprintf(f, ", ");
fprint_src_reg(f, &inst->SrcReg[0], mode, prog);
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_IF:
fprintf(f, "IF ");
fprint_src_reg(f, &inst->SrcReg[0], mode, prog);
fprintf(f, "; ");
fprintf(f, " # (if false, goto %d)", inst->BranchTarget);
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
return indent + 3;
case OPCODE_ELSE:
fprintf(f, "ELSE; # (goto %d)\n", inst->BranchTarget);
fprintf(f, "%s; # (goto %d)",
_mesa_opcode_string(inst->Opcode),
inst->BranchTarget);
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_BGNSUB:
fprintf(f, "BGNSUB");
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
return indent + 3;
case OPCODE_ENDSUB:
if (mode == PROG_PRINT_DEBUG) {
fprintf(f, "ENDSUB");
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
}
break;
case OPCODE_CAL:
fprintf(f, "CAL %u", inst->BranchTarget);
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_RET:
fprintf(f, "RET");
- fprint_comment(f, inst);
+ fprintf(f, ";\n");
break;
case OPCODE_END:
case OPCODE_NOP:
if (mode == PROG_PRINT_DEBUG) {
fprintf(f, "NOP");
- fprint_comment(f, inst);
- }
- else if (inst->Comment) {
- /* ARB/NV extensions don't have NOP instruction */
- fprintf(f, "# %s\n", inst->Comment);
+ fprintf(f, ";\n");
}
break;
/* XXX may need other special-case instructions */
fprintf(f, "# Geometry Shader\n");
}
- for (i = 0; i < prog->NumInstructions; i++) {
+ for (i = 0; i < prog->arb.NumInstructions; i++) {
if (lineNumbers)
fprintf(f, "%3d: ", i);
- indent = _mesa_fprint_instruction_opt(f, prog->Instructions + i,
+ indent = _mesa_fprint_instruction_opt(f, prog->arb.Instructions + i,
indent, mode, prog);
}
}
fprintf(f, "OutputsWritten: %" PRIx64 " (0b%s)\n",
(uint64_t) prog->info.outputs_written,
binary(prog->info.outputs_written));
- fprintf(f, "NumInstructions=%d\n", prog->NumInstructions);
- fprintf(f, "NumTemporaries=%d\n", prog->NumTemporaries);
- fprintf(f, "NumParameters=%d\n", prog->NumParameters);
- fprintf(f, "NumAttributes=%d\n", prog->NumAttributes);
- fprintf(f, "NumAddressRegs=%d\n", prog->NumAddressRegs);
+ fprintf(f, "NumInstructions=%d\n", prog->arb.NumInstructions);
+ fprintf(f, "NumTemporaries=%d\n", prog->arb.NumTemporaries);
+ fprintf(f, "NumParameters=%d\n", prog->arb.NumParameters);
+ fprintf(f, "NumAttributes=%d\n", prog->arb.NumAttributes);
+ fprintf(f, "NumAddressRegs=%d\n", prog->arb.NumAddressRegs);
fprintf(f, "IndirectRegisterFiles: 0x%x (0b%s)\n",
- prog->IndirectRegisterFiles, binary(prog->IndirectRegisterFiles));
+ prog->arb.IndirectRegisterFiles,
+ binary(prog->arb.IndirectRegisterFiles));
fprintf(f, "SamplersUsed: 0x%x (0b%s)\n",
prog->SamplersUsed, binary(prog->SamplersUsed));
fprintf(f, "Samplers=[ ");
const GLfloat *p = prog->LocalParams[i];
fprintf(f, "%2d: %f, %f, %f, %f\n", i, p[0], p[1], p[2], p[3]);
}
-#endif
+#endif
_mesa_print_parameter_list(prog->Parameters);
}
fprintf(f, "dirty state flags: 0x%x\n", list->StateFlags);
for (i = 0; i < list->NumParameters; i++){
struct gl_program_parameter *param = list->Parameters + i;
- const GLfloat *v = (GLfloat *) list->ParameterValues[i];
+ unsigned pvo = list->ParameterValueOffset[i];
+ const GLfloat *v = (GLfloat *) list->ParameterValues + pvo;
+
fprintf(f, "param[%d] sz=%d %s %s = {%.3g, %.3g, %.3g, %.3g}",
i, param->Size,
_mesa_register_file_name(list->Parameters[i].Type),
case MESA_SHADER_COMPUTE:
type = "comp";
break;
+ default:
+ break;
}
- _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
+ snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
f = fopen(filename, "w");
if (!f) {
fprintf(stderr, "Unable to open %s for writing\n", filename);
return;
}
+#ifdef DEBUG
fprintf(f, "/* Shader %u source, checksum %u */\n", shader->Name, shader->SourceChecksum);
+#else
+ fprintf(f, "/* Shader %u source */\n", shader->Name);
+#endif
fputs(shader->Source, f);
fprintf(f, "\n");
* _mesa_write_shader_to_file function.
*/
void
-_mesa_append_uniforms_to_file(const struct gl_linked_shader *shader)
+_mesa_append_uniforms_to_file(const struct gl_program *prog)
{
- const struct gl_program *const prog = shader->Program;
const char *type;
char filename[100];
FILE *f;
- if (shader->Stage == MESA_SHADER_FRAGMENT)
+ if (prog->info.stage == MESA_SHADER_FRAGMENT)
type = "frag";
else
type = "vert";
- _mesa_snprintf(filename, sizeof(filename), "shader.%s", type);
+ snprintf(filename, sizeof(filename), "shader.%s", type);
f = fopen(filename, "a"); /* append */
if (!f) {
fprintf(stderr, "Unable to open %s for appending\n", filename);