Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/auxiliary/postprocess/pp_program.c
4561 views
1
/**************************************************************************
2
*
3
* Copyright 2010 Jakob Bornecrantz
4
* Copyright 2011 Lauri Kasanen
5
* All Rights Reserved.
6
*
7
* Permission is hereby granted, free of charge, to any person obtaining a
8
* copy of this software and associated documentation files (the
9
* "Software"), to deal in the Software without restriction, including
10
* without limitation the rights to use, copy, modify, merge, publish,
11
* distribute, sub license, and/or sell copies of the Software, and to
12
* permit persons to whom the Software is furnished to do so, subject to
13
* the following conditions:
14
*
15
* The above copyright notice and this permission notice (including the
16
* next paragraph) shall be included in all copies or substantial portions
17
* of the Software.
18
*
19
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
23
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
*
27
**************************************************************************/
28
29
#include "postprocess/postprocess.h"
30
#include "postprocess/pp_private.h"
31
32
#include "cso_cache/cso_context.h"
33
#include "pipe/p_screen.h"
34
#include "pipe/p_context.h"
35
#include "pipe/p_state.h"
36
#include "pipe/p_shader_tokens.h"
37
#include "util/u_inlines.h"
38
#include "util/u_simple_shaders.h"
39
#include "util/u_memory.h"
40
41
/** Initialize the internal details */
42
struct pp_program *
43
pp_init_prog(struct pp_queue_t *ppq, struct pipe_context *pipe,
44
struct cso_context *cso, struct st_context_iface *st)
45
{
46
struct pp_program *p;
47
48
pp_debug("Initializing program\n");
49
if (!pipe)
50
return NULL;
51
52
p = CALLOC(1, sizeof(struct pp_program));
53
if (!p)
54
return NULL;
55
56
p->screen = pipe->screen;
57
p->pipe = pipe;
58
p->cso = cso;
59
p->st = st;
60
61
{
62
static const float verts[4][2][4] = {
63
{
64
{1.0f, 1.0f, 0.0f, 1.0f},
65
{1.0f, 1.0f, 0.0f, 1.0f}
66
},
67
{
68
{-1.0f, 1.0f, 0.0f, 1.0f},
69
{0.0f, 1.0f, 0.0f, 1.0f}
70
},
71
{
72
{-1.0f, -1.0f, 0.0f, 1.0f},
73
{0.0f, 0.0f, 0.0f, 1.0f}
74
},
75
{
76
{1.0f, -1.0f, 0.0f, 1.0f},
77
{1.0f, 0.0f, 0.0f, 1.0f}
78
}
79
};
80
81
p->vbuf = pipe_buffer_create(pipe->screen, PIPE_BIND_VERTEX_BUFFER,
82
PIPE_USAGE_DEFAULT, sizeof(verts));
83
pipe_buffer_write(p->pipe, p->vbuf, 0, sizeof(verts), verts);
84
}
85
86
p->blend.rt[0].colormask = PIPE_MASK_RGBA;
87
p->blend.rt[0].rgb_src_factor = p->blend.rt[0].alpha_src_factor =
88
PIPE_BLENDFACTOR_SRC_ALPHA;
89
p->blend.rt[0].rgb_dst_factor = p->blend.rt[0].alpha_dst_factor =
90
PIPE_BLENDFACTOR_INV_SRC_ALPHA;
91
92
p->rasterizer.cull_face = PIPE_FACE_NONE;
93
p->rasterizer.half_pixel_center = 1;
94
p->rasterizer.bottom_edge_rule = 1;
95
p->rasterizer.depth_clip_near = 1;
96
p->rasterizer.depth_clip_far = 1;
97
98
p->sampler.wrap_s = p->sampler.wrap_t = p->sampler.wrap_r =
99
PIPE_TEX_WRAP_CLAMP_TO_EDGE;
100
101
p->sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
102
p->sampler.min_img_filter = p->sampler.mag_img_filter =
103
PIPE_TEX_FILTER_LINEAR;
104
p->sampler.normalized_coords = 1;
105
106
p->sampler_point.wrap_s = p->sampler_point.wrap_t =
107
p->sampler_point.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
108
p->sampler_point.min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
109
p->sampler_point.min_img_filter = p->sampler_point.mag_img_filter =
110
PIPE_TEX_FILTER_NEAREST;
111
p->sampler_point.normalized_coords = 1;
112
113
p->velem.count = 2;
114
p->velem.velems[0].src_offset = 0;
115
p->velem.velems[0].instance_divisor = 0;
116
p->velem.velems[0].vertex_buffer_index = 0;
117
p->velem.velems[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
118
p->velem.velems[1].src_offset = 1 * 4 * sizeof(float);
119
p->velem.velems[1].instance_divisor = 0;
120
p->velem.velems[1].vertex_buffer_index = 0;
121
p->velem.velems[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
122
123
if (!p->screen->is_format_supported(p->screen,
124
PIPE_FORMAT_R32G32B32A32_FLOAT,
125
PIPE_BUFFER, 1, 1,
126
PIPE_BIND_VERTEX_BUFFER))
127
pp_debug("Vertex buf format fail\n");
128
129
130
{
131
const enum tgsi_semantic semantic_names[] = { TGSI_SEMANTIC_POSITION,
132
TGSI_SEMANTIC_GENERIC
133
};
134
const uint semantic_indexes[] = { 0, 0 };
135
p->passvs = util_make_vertex_passthrough_shader(p->pipe, 2,
136
semantic_names,
137
semantic_indexes, FALSE);
138
}
139
140
p->framebuffer.nr_cbufs = 1;
141
142
p->surf.format = PIPE_FORMAT_B8G8R8A8_UNORM;
143
144
return p;
145
}
146
147