Lines Matching refs:asyw

112 nv50_wndw_wait_armed(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
115 if (asyw->set.ntfy) {
117 asyw->ntfy.offset,
125 struct nv50_wndw_atom *asyw)
128 .mask = asyw->clr.mask & ~(flush ? 0 : asyw->set.mask),
141 struct nv50_wndw_atom *asyw)
144 asyw->image.mode = NV507C_SET_PRESENT_CONTROL_BEGIN_MODE_NON_TEARING;
145 asyw->image.interval = 1;
148 if (asyw->set.sema ) wndw->func->sema_set (wndw, asyw);
149 if (asyw->set.ntfy ) wndw->func->ntfy_set (wndw, asyw);
150 if (asyw->set.image) wndw->func->image_set(wndw, asyw);
152 if (asyw->set.xlut ) {
153 if (asyw->ilut) {
154 asyw->xlut.i.offset =
155 nv50_lut_load(&wndw->ilut, asyw->xlut.i.buffer,
156 asyw->ilut, asyw->xlut.i.load);
158 wndw->func->xlut_set(wndw, asyw);
161 if (asyw->set.csc ) wndw->func->csc_set (wndw, asyw);
162 if (asyw->set.scale) wndw->func->scale_set(wndw, asyw);
163 if (asyw->set.blend) wndw->func->blend_set(wndw, asyw);
164 if (asyw->set.point) {
165 if (asyw->set.point = false, asyw->set.mask)
169 wndw->immd->point(wndw, asyw);
177 nv50_wndw_ntfy_enable(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
181 asyw->ntfy.handle = wndw->wndw.sync.handle;
182 asyw->ntfy.offset = wndw->ntfy;
183 asyw->ntfy.awaken = false;
184 asyw->set.ntfy = true;
192 struct nv50_wndw_atom *asyw,
197 wndw->func->release(wndw, asyw, asyh);
198 asyw->ntfy.handle = 0;
199 asyw->sema.handle = 0;
200 asyw->xlut.handle = 0;
201 memset(asyw->image.handle, 0x00, sizeof(asyw->image.handle));
205 nv50_wndw_atomic_check_acquire_yuv(struct nv50_wndw_atom *asyw)
207 switch (asyw->state.fb->format->format) {
209 asyw->image.format = NV507E_SURFACE_SET_PARAMS_FORMAT_VE8YO8UE8YE8;
212 asyw->image.format = NV507E_SURFACE_SET_PARAMS_FORMAT_YO8VE8YE8UE8;
219 asyw->image.colorspace = NV507E_SURFACE_SET_PARAMS_COLOR_SPACE_YUV_601;
224 nv50_wndw_atomic_check_acquire_rgb(struct nv50_wndw_atom *asyw)
226 switch (asyw->state.fb->format->format) {
228 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_I8;
232 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A8R8G8B8;
235 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_R5G6B5;
239 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A1R5G5B5;
243 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A2B10G10R10;
247 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_A8B8G8R8;
251 asyw->image.format = NVC37E_SET_PARAMS_FORMAT_A2R10G10B10;
255 asyw->image.format = NV507C_SURFACE_SET_PARAMS_FORMAT_RF16_GF16_BF16_AF16;
261 asyw->image.colorspace = NV507E_SURFACE_SET_PARAMS_COLOR_SPACE_RGB;
268 struct nv50_wndw_atom *asyw,
271 struct drm_framebuffer *fb = asyw->state.fb;
282 asyw->image.w = fb->width;
283 asyw->image.h = fb->height;
284 asyw->image.kind = kind;
286 ret = nv50_wndw_atomic_check_acquire_rgb(asyw);
288 ret = nv50_wndw_atomic_check_acquire_yuv(asyw);
293 if (asyw->image.kind) {
294 asyw->image.layout = NV507C_SURFACE_SET_STORAGE_MEMORY_LAYOUT_BLOCKLINEAR;
296 asyw->image.blockh = tile_mode >> 4;
298 asyw->image.blockh = tile_mode;
299 asyw->image.blocks[0] = fb->pitches[0] / 64;
300 asyw->image.pitch[0] = 0;
302 asyw->image.layout = NV507C_SURFACE_SET_STORAGE_MEMORY_LAYOUT_PITCH;
303 asyw->image.blockh = NV507C_SURFACE_SET_STORAGE_BLOCK_HEIGHT_ONE_GOB;
304 asyw->image.blocks[0] = 0;
305 asyw->image.pitch[0] = fb->pitches[0];
309 asyw->image.interval = 1;
311 asyw->image.interval = 0;
313 if (asyw->image.interval)
314 asyw->image.mode = NV507C_SET_PRESENT_CONTROL_BEGIN_MODE_NON_TEARING;
316 asyw->image.mode = NV507C_SET_PRESENT_CONTROL_BEGIN_MODE_IMMEDIATE;
318 asyw->set.image = wndw->func->image_set != NULL;
322 asyw->scale.sx = asyw->state.src_x >> 16;
323 asyw->scale.sy = asyw->state.src_y >> 16;
324 asyw->scale.sw = asyw->state.src_w >> 16;
325 asyw->scale.sh = asyw->state.src_h >> 16;
326 asyw->scale.dw = asyw->state.crtc_w;
327 asyw->scale.dh = asyw->state.crtc_h;
328 if (memcmp(&armw->scale, &asyw->scale, sizeof(asyw->scale)))
329 asyw->set.scale = true;
333 asyw->blend.depth = 255 - asyw->state.normalized_zpos;
334 asyw->blend.k1 = asyw->state.alpha >> 8;
335 switch (asyw->state.pixel_blend_mode) {
337 asyw->blend.src_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_SRC_COLOR_FACTOR_MATCH_SELECT_K1;
338 asyw->blend.dst_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_DST_COLOR_FACTOR_MATCH_SELECT_NEG_K1_TIMES_SRC;
341 asyw->blend.src_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_SRC_COLOR_FACTOR_MATCH_SELECT_K1_TIMES_SRC;
342 asyw->blend.dst_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_DST_COLOR_FACTOR_MATCH_SELECT_NEG_K1_TIMES_SRC;
346 asyw->blend.src_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_SRC_COLOR_FACTOR_MATCH_SELECT_K1;
347 asyw->blend.dst_color = NVC37E_SET_COMPOSITION_FACTOR_SELECT_DST_COLOR_FACTOR_MATCH_SELECT_NEG_K1;
350 if (memcmp(&armw->blend, &asyw->blend, sizeof(asyw->blend)))
351 asyw->set.blend = true;
355 asyw->point.x = asyw->state.crtc_x;
356 asyw->point.y = asyw->state.crtc_y;
357 if (memcmp(&armw->point, &asyw->point, sizeof(asyw->point)))
358 asyw->set.point = true;
361 return wndw->func->acquire(wndw, asyw, asyh);
367 struct nv50_wndw_atom *asyw,
378 if (!ilut && asyw->state.fb->format->format == DRM_FORMAT_C8) {
385 asyw->visible = false;
396 asyw->state.fb->format->format != DRM_FORMAT_XBGR16161616F &&
397 asyw->state.fb->format->format != DRM_FORMAT_ABGR16161616F) {
403 memset(&asyw->xlut, 0x00, sizeof(asyw->xlut));
404 if ((asyw->ilut = wndw->func->ilut ? ilut : NULL)) {
405 if (!wndw->func->ilut(wndw, asyw, drm_color_lut_size(ilut))) {
409 asyw->xlut.handle = wndw->wndw.vram.handle;
410 asyw->xlut.i.buffer = !asyw->xlut.i.buffer;
411 asyw->set.xlut = true;
413 asyw->clr.xlut = armw->xlut.handle != 0;
418 (!armw->visible || (armw->xlut.handle && !asyw->xlut.handle)))
419 asyw->set.xlut = true;
423 wndw->func->csc(wndw, asyw, ctm);
424 asyw->csc.valid = true;
425 asyw->set.csc = true;
427 asyw->csc.valid = false;
428 asyw->clr.csc = armw->csc.valid;
442 struct nv50_wndw_atom *asyw = nv50_wndw_atom(state);
452 if (asyw->state.crtc) {
453 asyh = nv50_head_atom_get(asyw->state.state, asyw->state.crtc);
457 asyw->visible = asyh->state.active;
459 asyw->visible = false;
464 harm = nv50_head_atom_get(asyw->state.state, armw->state.crtc);
470 if (asyw->visible && wndw->func->xlut_set &&
473 asyw->state.fb->format->format !=
475 ret = nv50_wndw_atomic_check_lut(wndw, armw, asyw, asyh);
481 if (asyw->visible) {
483 armw, asyw, asyh);
490 nv50_wndw_atomic_check_release(wndw, asyw, harm);
500 if (!asyw->visible || modeset) {
501 asyw->clr.ntfy = armw->ntfy.handle != 0;
502 asyw->clr.sema = armw->sema.handle != 0;
503 asyw->clr.xlut = armw->xlut.handle != 0;
504 if (asyw->clr.xlut && asyw->visible)
505 asyw->set.xlut = asyw->xlut.handle != 0;
506 asyw->clr.csc = armw->csc.valid;
508 asyw->clr.image = armw->image.handle[0] != 0;
534 struct nv50_wndw_atom *asyw = nv50_wndw_atom(state);
541 if (!asyw->state.fb)
556 if (asyw->visible)
557 asyw->image.handle[0] = ctxdma->object.handle;
560 asyw->state.fence = dma_resv_get_excl_rcu(nvbo->bo.base.resv);
561 asyw->image.offset[0] = nvbo->offset;
564 asyh = nv50_head_atom_get(asyw->state.state, asyw->state.crtc);
568 wndw->func->prepare(wndw, asyh, asyw);
585 struct nv50_wndw_atom *asyw = nv50_wndw_atom(state);
586 __drm_atomic_helper_plane_destroy_state(&asyw->state);
587 kfree(asyw);
594 struct nv50_wndw_atom *asyw;
595 if (!(asyw = kmalloc(sizeof(*asyw), GFP_KERNEL)))
597 __drm_atomic_helper_plane_duplicate_state(plane, &asyw->state);
598 asyw->sema = armw->sema;
599 asyw->ntfy = armw->ntfy;
600 asyw->ilut = NULL;
601 asyw->xlut = armw->xlut;
602 asyw->csc = armw->csc;
603 asyw->image = armw->image;
604 asyw->point = armw->point;
605 asyw->clr.mask = 0;
606 asyw->set.mask = 0;
607 return &asyw->state;
620 struct nv50_wndw_atom *asyw;
622 if (WARN_ON(!(asyw = kzalloc(sizeof(*asyw), GFP_KERNEL))))
628 __drm_atomic_helper_plane_reset(plane, &asyw->state);