1bf215546Sopenharmony_ci/************************************************************************** 2bf215546Sopenharmony_ci * 3bf215546Sopenharmony_ci * Copyright 2011 Christian König 4bf215546Sopenharmony_ci * All Rights Reserved. 5bf215546Sopenharmony_ci * 6bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 7bf215546Sopenharmony_ci * copy of this software and associated documentation files (the 8bf215546Sopenharmony_ci * "Software"), to deal in the Software without restriction, including 9bf215546Sopenharmony_ci * without limitation the rights to use, copy, modify, merge, publish, 10bf215546Sopenharmony_ci * distribute, sub license, and/or sell copies of the Software, and to 11bf215546Sopenharmony_ci * permit persons to whom the Software is furnished to do so, subject to 12bf215546Sopenharmony_ci * the following conditions: 13bf215546Sopenharmony_ci * 14bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the 15bf215546Sopenharmony_ci * next paragraph) shall be included in all copies or substantial portions 16bf215546Sopenharmony_ci * of the Software. 17bf215546Sopenharmony_ci * 18bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19bf215546Sopenharmony_ci * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20bf215546Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21bf215546Sopenharmony_ci * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22bf215546Sopenharmony_ci * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23bf215546Sopenharmony_ci * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24bf215546Sopenharmony_ci * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25bf215546Sopenharmony_ci * 26bf215546Sopenharmony_ci **************************************************************************/ 27bf215546Sopenharmony_ci 28bf215546Sopenharmony_ci#ifndef vl_zscan_h 29bf215546Sopenharmony_ci#define vl_zscan_h 30bf215546Sopenharmony_ci 31bf215546Sopenharmony_ci#include "pipe/p_compiler.h" 32bf215546Sopenharmony_ci#include "pipe/p_state.h" 33bf215546Sopenharmony_ci 34bf215546Sopenharmony_ci/* 35bf215546Sopenharmony_ci * shader based zscan and quantification 36bf215546Sopenharmony_ci * expect usage of vl_vertex_buffers as a todo list 37bf215546Sopenharmony_ci */ 38bf215546Sopenharmony_cistruct vl_zscan 39bf215546Sopenharmony_ci{ 40bf215546Sopenharmony_ci struct pipe_context *pipe; 41bf215546Sopenharmony_ci 42bf215546Sopenharmony_ci unsigned buffer_width; 43bf215546Sopenharmony_ci unsigned buffer_height; 44bf215546Sopenharmony_ci 45bf215546Sopenharmony_ci unsigned num_channels; 46bf215546Sopenharmony_ci 47bf215546Sopenharmony_ci unsigned blocks_per_line; 48bf215546Sopenharmony_ci unsigned blocks_total; 49bf215546Sopenharmony_ci 50bf215546Sopenharmony_ci void *rs_state; 51bf215546Sopenharmony_ci void *blend; 52bf215546Sopenharmony_ci 53bf215546Sopenharmony_ci void *samplers[3]; 54bf215546Sopenharmony_ci 55bf215546Sopenharmony_ci void *vs, *fs; 56bf215546Sopenharmony_ci}; 57bf215546Sopenharmony_ci 58bf215546Sopenharmony_cistruct vl_zscan_buffer 59bf215546Sopenharmony_ci{ 60bf215546Sopenharmony_ci struct pipe_viewport_state viewport; 61bf215546Sopenharmony_ci struct pipe_framebuffer_state fb_state; 62bf215546Sopenharmony_ci 63bf215546Sopenharmony_ci struct pipe_sampler_view *src, *layout, *quant; 64bf215546Sopenharmony_ci struct pipe_surface *dst; 65bf215546Sopenharmony_ci}; 66bf215546Sopenharmony_ci 67bf215546Sopenharmony_ciextern const int vl_zscan_normal_16[]; 68bf215546Sopenharmony_ciextern const int vl_zscan_linear[]; 69bf215546Sopenharmony_ciextern const int vl_zscan_normal[]; 70bf215546Sopenharmony_ciextern const int vl_zscan_alternate[]; 71bf215546Sopenharmony_ciextern const int vl_zscan_h265_up_right_diagonal_16[]; 72bf215546Sopenharmony_ciextern const int vl_zscan_h265_up_right_diagonal[]; 73bf215546Sopenharmony_ci 74bf215546Sopenharmony_cistruct pipe_sampler_view * 75bf215546Sopenharmony_civl_zscan_layout(struct pipe_context *pipe, const int layout[64], unsigned blocks_per_line); 76bf215546Sopenharmony_ci 77bf215546Sopenharmony_cibool 78bf215546Sopenharmony_civl_zscan_init(struct vl_zscan *zscan, struct pipe_context *pipe, 79bf215546Sopenharmony_ci unsigned buffer_width, unsigned buffer_height, 80bf215546Sopenharmony_ci unsigned blocks_per_line, unsigned blocks_total, 81bf215546Sopenharmony_ci unsigned num_channels); 82bf215546Sopenharmony_ci 83bf215546Sopenharmony_civoid 84bf215546Sopenharmony_civl_zscan_cleanup(struct vl_zscan *zscan); 85bf215546Sopenharmony_ci 86bf215546Sopenharmony_cibool 87bf215546Sopenharmony_civl_zscan_init_buffer(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer, 88bf215546Sopenharmony_ci struct pipe_sampler_view *src, struct pipe_surface *dst); 89bf215546Sopenharmony_ci 90bf215546Sopenharmony_civoid 91bf215546Sopenharmony_civl_zscan_cleanup_buffer(struct vl_zscan_buffer *buffer); 92bf215546Sopenharmony_ci 93bf215546Sopenharmony_civoid 94bf215546Sopenharmony_civl_zscan_set_layout(struct vl_zscan_buffer *buffer, struct pipe_sampler_view *layout); 95bf215546Sopenharmony_ci 96bf215546Sopenharmony_civoid 97bf215546Sopenharmony_civl_zscan_upload_quant(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer, 98bf215546Sopenharmony_ci const uint8_t matrix[64], bool intra); 99bf215546Sopenharmony_ci 100bf215546Sopenharmony_civoid 101bf215546Sopenharmony_civl_zscan_render(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer, unsigned num_instances); 102bf215546Sopenharmony_ci 103bf215546Sopenharmony_ci#endif 104