Lines Matching defs:r300

53 static void r300_blitter_begin(struct r300_context* r300, enum r300_blitter_op op)
55 if ((op & R300_STOP_QUERY) && r300->query_current) {
56 r300->blitter_saved_query = r300->query_current;
57 r300_stop_query(r300);
63 util_blitter_save_blend(r300->blitter, r300->blend_state.state);
64 util_blitter_save_depth_stencil_alpha(r300->blitter, r300->dsa_state.state);
65 util_blitter_save_stencil_ref(r300->blitter, &(r300->stencil_ref));
66 util_blitter_save_rasterizer(r300->blitter, r300->rs_state.state);
67 util_blitter_save_fragment_shader(r300->blitter, r300->fs.state);
68 util_blitter_save_vertex_shader(r300->blitter, r300->vs_state.state);
69 util_blitter_save_viewport(r300->blitter, &r300->viewport);
70 util_blitter_save_scissor(r300->blitter, r300->scissor_state.state);
71 util_blitter_save_sample_mask(r300->blitter, *(unsigned*)r300->sample_mask.state, 0);
72 util_blitter_save_vertex_buffer_slot(r300->blitter, r300->vertex_buffer);
73 util_blitter_save_vertex_elements(r300->blitter, r300->velems);
76 /* r300 doesn't use the size for FS at all. The shader determines it.
80 .user_buffer = ((struct r300_constant_buffer*)r300->fs_constants.state)->ptr,
82 util_blitter_save_fragment_constant_buffer_slot(r300->blitter, &cb);
85 util_blitter_save_framebuffer(r300->blitter, r300->fb_state.state);
90 (struct r300_textures_state*)r300->textures_state.state;
93 r300->blitter, state->sampler_state_count,
97 r300->blitter, state->sampler_view_count,
103 r300->blitter_saved_skip_rendering = r300->skip_rendering+1;
104 r300->skip_rendering = FALSE;
106 r300->blitter_saved_skip_rendering = 0;
110 static void r300_blitter_end(struct r300_context *r300)
112 if (r300->blitter_saved_query) {
113 r300_resume_query(r300, r300->blitter_saved_query);
114 r300->blitter_saved_query = NULL;
117 if (r300->blitter_saved_skip_rendering) {
119 r300->skip_rendering = r300->blitter_saved_skip_rendering-1;
135 static boolean r300_cbzb_clear_allowed(struct r300_context *r300,
139 (struct pipe_framebuffer_state*)r300->fb_state.state;
148 static boolean r300_fast_zclear_allowed(struct r300_context *r300,
152 (struct pipe_framebuffer_state*)r300->fb_state.state;
157 static boolean r300_hiz_clear_allowed(struct r300_context *r300)
160 (struct pipe_framebuffer_state*)r300->fb_state.state;
189 static void r300_set_clear_color(struct r300_context *r300,
193 (struct pipe_framebuffer_state*)r300->fb_state.state;
202 r300->color_clear_value_gb = uc.h[0] | ((uint32_t)uc.h[1] << 16);
203 r300->color_clear_value_ar = uc.h[2] | ((uint32_t)uc.h[3] << 16);
205 r300->color_clear_value = uc.ui[0];
263 struct r300_context* r300 = r300_context(pipe);
265 (struct pipe_framebuffer_state*)r300->fb_state.state;
267 (struct r300_hyperz_state*)r300->hyperz_state.state;
283 zmask_clear = r300_fast_zclear_allowed(r300, buffers);
284 hiz_clear = r300_hiz_clear_allowed(r300);
290 if (!r300->hyperz_enabled &&
291 (r300->screen->caps.is_r500 || debug_get_option_hyperz())) {
292 r300->hyperz_enabled =
293 r300->rws->cs_request_feature(&r300->cs,
296 if (r300->hyperz_enabled) {
298 r300_mark_fb_state_dirty(r300, R300_CHANGED_HYPERZ_FLAG);
303 if (r300->hyperz_enabled) {
308 r300_mark_atom_dirty(r300, &r300->zmask_clear);
309 r300_mark_atom_dirty(r300, &r300->gpu_flush);
314 r300->hiz_clear_value = r300_hiz_clear_value(depth);
315 r300_mark_atom_dirty(r300, &r300->hiz_clear);
316 r300_mark_atom_dirty(r300, &r300->gpu_flush);
318 r300->num_z_clears++;
329 if (!r300->cmask_access) {
330 r300->cmask_access =
331 r300->rws->cs_request_feature(&r300->cs,
337 if (r300->cmask_access) {
340 if (!r300->screen->cmask_resource) {
341 mtx_lock(&r300->screen->cmask_mutex);
343 if (!r300->screen->cmask_resource) {
347 r300->screen->cmask_resource = fb->cbufs[0]->texture;
349 mtx_unlock(&r300->screen->cmask_mutex);
352 if (r300->screen->cmask_resource == fb->cbufs[0]->texture) {
353 r300_set_clear_color(r300, color);
354 r300_mark_atom_dirty(r300, &r300->cmask_clear);
355 r300_mark_atom_dirty(r300, &r300->gpu_flush);
361 else if (r300_cbzb_clear_allowed(r300, buffers)) {
370 r300->cbzb_clear = TRUE;
371 r300_mark_fb_state_dirty(r300, R300_CHANGED_HYPERZ_FLAG);
377 r300_blitter_begin(r300, R300_CLEAR);
378 util_blitter_clear(r300->blitter, width, height, 1,
381 r300_blitter_end(r300);
382 } else if (r300->zmask_clear.dirty ||
383 r300->hiz_clear.dirty ||
384 r300->cmask_clear.dirty) {
389 r300->gpu_flush.size +
390 (r300->zmask_clear.dirty ? r300->zmask_clear.size : 0) +
391 (r300->hiz_clear.dirty ? r300->hiz_clear.size : 0) +
392 (r300->cmask_clear.dirty ? r300->cmask_clear.size : 0) +
393 r300_get_num_cs_end_dwords(r300);
396 if (!r300->rws->cs_check_space(&r300->cs, dwords)) {
397 r300_flush(&r300->context, PIPE_FLUSH_ASYNC, NULL);
401 r300_emit_gpu_flush(r300, r300->gpu_flush.size, r300->gpu_flush.state);
402 r300->gpu_flush.dirty = FALSE;
404 if (r300->zmask_clear.dirty) {
405 r300_emit_zmask_clear(r300, r300->zmask_clear.size,
406 r300->zmask_clear.state);
407 r300->zmask_clear.dirty = FALSE;
409 if (r300->hiz_clear.dirty) {
410 r300_emit_hiz_clear(r300, r300->hiz_clear.size,
411 r300->hiz_clear.state);
412 r300->hiz_clear.dirty = FALSE;
414 if (r300->cmask_clear.dirty) {
415 r300_emit_cmask_clear(r300, r300->cmask_clear.size,
416 r300->cmask_clear.state);
417 r300->cmask_clear.dirty = FALSE;
424 if (r300->cbzb_clear) {
425 r300->cbzb_clear = FALSE;
427 r300_mark_fb_state_dirty(r300, R300_CHANGED_HYPERZ_FLAG);
434 if (r300->zmask_in_use || r300->hiz_in_use) {
435 r300_mark_atom_dirty(r300, &r300->hyperz_state);
447 struct r300_context *r300 = r300_context(pipe);
449 r300_blitter_begin(r300, R300_CLEAR_SURFACE |
451 util_blitter_clear_render_target(r300->blitter, dst, color,
453 r300_blitter_end(r300);
466 struct r300_context *r300 = r300_context(pipe);
468 (struct pipe_framebuffer_state*)r300->fb_state.state;
470 if (r300->zmask_in_use && !r300->locked_zbuffer) {
472 r300_decompress_zmask(r300);
477 r300_blitter_begin(r300, R300_CLEAR_SURFACE |
479 util_blitter_clear_depth_stencil(r300->blitter, dst, clear_flags, depth, stencil,
481 r300_blitter_end(r300);
484 void r300_decompress_zmask(struct r300_context *r300)
487 (struct pipe_framebuffer_state*)r300->fb_state.state;
489 if (!r300->zmask_in_use || r300->locked_zbuffer)
492 r300->zmask_decompress = TRUE;
493 r300_mark_atom_dirty(r300, &r300->hyperz_state);
495 r300_blitter_begin(r300, R300_DECOMPRESS);
496 util_blitter_custom_clear_depth(r300->blitter, fb->width, fb->height, 0,
497 r300->dsa_decompress_zmask);
498 r300_blitter_end(r300);
500 r300->zmask_decompress = FALSE;
501 r300->zmask_in_use = FALSE;
502 r300_mark_atom_dirty(r300, &r300->hyperz_state);
505 void r300_decompress_zmask_locked_unsafe(struct r300_context *r300)
510 fb.width = r300->locked_zbuffer->width;
511 fb.height = r300->locked_zbuffer->height;
512 fb.zsbuf = r300->locked_zbuffer;
514 r300->context.set_framebuffer_state(&r300->context, &fb);
515 r300_decompress_zmask(r300);
518 void r300_decompress_zmask_locked(struct r300_context *r300)
523 util_copy_framebuffer_state(&saved_fb, r300->fb_state.state);
524 r300_decompress_zmask_locked_unsafe(r300);
525 r300->context.set_framebuffer_state(&r300->context, &saved_fb);
528 pipe_surface_reference(&r300->locked_zbuffer, NULL);
551 struct r300_context *r300 = r300_context(pipe);
553 (struct pipe_framebuffer_state*)r300->fb_state.state;
581 util_blitter_default_src_texture(r300->blitter, &src_templ, src, src_level);
607 debug_printf("r300: copy_region: Unhandled format: %s. Falling back to software.\n"
608 "r300: copy_region: Software fallback doesn't work for tiled textures.\n",
671 if (r300->zmask_in_use && !r300->locked_zbuffer) {
674 r300_decompress_zmask(r300);
684 r300_blitter_begin(r300, R300_COPY);
685 util_blitter_blit_generic(r300->blitter, dst_view, &dstbox,
689 r300_blitter_end(r300);
728 struct r300_context *r300 = r300_context(pipe);
731 struct r300_aa_state *aa = (struct r300_aa_state*)r300->aa_state.state;
750 r300->aa_state.size = 8;
751 r300_mark_atom_dirty(r300, &r300->aa_state);
754 r300_blitter_begin(r300, R300_CLEAR_SURFACE);
755 util_blitter_custom_color(r300->blitter, &srcsurf->base, NULL);
756 r300_blitter_end(r300);
760 r300->aa_state.size = 4;
761 r300_mark_atom_dirty(r300, &r300->aa_state);
770 struct r300_context *r300 = r300_context(pipe);
809 r300_blitter_begin(r300, R300_BLIT | R300_IGNORE_RENDER_COND);
810 util_blitter_blit(r300->blitter, &blit);
811 r300_blitter_end(r300);
819 struct r300_context *r300 = r300_context(pipe);
821 (struct pipe_framebuffer_state*)r300->fb_state.state;
869 if (r300->zmask_in_use && !r300->locked_zbuffer) {
872 r300_decompress_zmask(r300);
876 r300_blitter_begin(r300, R300_BLIT |
878 util_blitter_blit(r300->blitter, &info);
879 r300_blitter_end(r300);
887 void r300_init_blit_functions(struct r300_context *r300)
889 r300->context.clear = r300_clear;
890 r300->context.clear_render_target = r300_clear_render_target;
891 r300->context.clear_depth_stencil = r300_clear_depth_stencil;
892 r300->context.resource_copy_region = r300_resource_copy_region;
893 r300->context.blit = r300_blit;
894 r300->context.flush_resource = r300_flush_resource;