Home | History | Annotate | Download | only in svga

Lines Matching refs:emit

55 svga_shader_expand(struct svga_shader_emitter *emit)
58 unsigned newsize = emit->size * 2;
60 if (emit->buf != err_buf)
61 new_buf = REALLOC(emit->buf, emit->size, newsize);
66 emit->ptr = err_buf;
67 emit->buf = err_buf;
68 emit->size = sizeof(err_buf);
72 emit->size = newsize;
73 emit->ptr = new_buf + (emit->ptr - emit->buf);
74 emit->buf = new_buf;
80 reserve(struct svga_shader_emitter *emit, unsigned nr_dwords)
82 if (emit->ptr - emit->buf + nr_dwords * sizeof(unsigned) >= emit->size) {
83 if (!svga_shader_expand(emit)) {
93 svga_shader_emit_dword(struct svga_shader_emitter * emit, unsigned dword)
95 if (!reserve(emit, 1))
98 *(unsigned *) emit->ptr = dword;
99 emit->ptr += sizeof dword;
105 svga_shader_emit_dwords(struct svga_shader_emitter * emit,
108 if (!reserve(emit, nr))
111 memcpy(emit->ptr, dwords, nr * sizeof *dwords);
112 emit->ptr += nr * sizeof *dwords;
118 svga_shader_emit_opcode(struct svga_shader_emitter * emit, unsigned opcode)
122 if (!reserve(emit, 1))
125 here = (SVGA3dShaderInstToken *) emit->ptr;
128 if (emit->insn_offset) {
130 (SVGA3dShaderInstToken *) (emit->buf + emit->insn_offset);
134 emit->insn_offset = emit->ptr - emit->buf;
135 emit->ptr += sizeof(unsigned);
141 svga_shader_emit_header(struct svga_shader_emitter *emit)
147 switch (emit->unit) {
156 return svga_shader_emit_dword(emit, header.value);
174 struct svga_shader_emitter emit;
178 memset(&emit, 0, sizeof(emit));
180 emit.size = 1024;
181 emit.buf = MALLOC(emit.size);
182 if (emit.buf == NULL) {
186 emit.ptr = emit.buf;
187 emit.unit = unit;
188 emit.key = *key;
190 tgsi_scan_shader(shader->tokens, &emit.info);
192 emit.imm_start = emit.info.file_max[TGSI_FILE_CONSTANT] + 1;
195 emit.imm_start += key->num_unnormalized_coords;
198 emit.imm_start += key->vs.need_prescale ? 2 : 0;
201 emit.nr_hw_float_const =
202 (emit.imm_start + emit.info.file_max[TGSI_FILE_IMMEDIATE] + 1);
204 emit.nr_hw_temp = emit.info.file_max[TGSI_FILE_TEMPORARY] + 1;
206 if (emit.nr_hw_temp >= SVGA3D_TEMPREG_MAX) {
208 emit.nr_hw_temp);
212 emit.in_main_func = TRUE;
214 if (!svga_shader_emit_header(&emit)) {
215 debug_printf("svga: emit header failed\n");
219 if (!svga_shader_emit_instructions(&emit, shader->tokens)) {
220 debug_printf("svga: emit instructions failed\n");
229 variant->tokens = (const unsigned *) emit.buf;
230 variant->nr_tokens = (emit.ptr - emit.buf) / sizeof(unsigned);
234 variant->pstipple_sampler_unit = emit.pstipple_sampler_unit;
241 emit.constant_color_output && emit.num_output_writes == 1;
261 if (emit.buf != err_buf)
262 FREE(emit.buf);