*/
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.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.varying[0]",
"result.varying[1]",
"result.varying[2]",
}
-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, "InputsRead: %" PRIx64 " (0b%s)\n",
(uint64_t) prog->info.inputs_read, binary(prog->info.inputs_read));
fprintf(f, "OutputsWritten: %" PRIx64 " (0b%s)\n",
- (uint64_t) prog->OutputsWritten, binary(prog->OutputsWritten));
- 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);
+ (uint64_t) prog->info.outputs_written,
+ binary(prog->info.outputs_written));
+ 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=[ ");
case MESA_SHADER_COMPUTE:
type = "comp";
break;
+ default:
+ break;
}
_mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
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";