1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#include "gpu_tests.h"
#include <libplacebo/dummy.h>
int main()
{
pl_log log = pl_test_logger();
pl_gpu gpu = pl_gpu_dummy_create(log, NULL);
pl_buffer_tests(gpu);
pl_texture_tests(gpu);
// Attempt creating a shader and accessing the resulting LUT
pl_tex dummy = pl_tex_dummy_create(gpu, pl_tex_dummy_params(
.w = 100,
.h = 100,
.format = pl_find_named_fmt(gpu, "rgba8"),
));
struct pl_sample_src src = {
.tex = dummy,
.new_w = 1000,
.new_h = 1000,
};
pl_shader_obj lut = NULL;
struct pl_sample_filter_params filter_params = {
.filter = pl_filter_ewa_lanczos,
.lut = &lut,
};
pl_shader sh = pl_shader_alloc(log, pl_shader_params( .gpu = gpu ));
REQUIRE(pl_shader_sample_polar(sh, &src, &filter_params));
const struct pl_shader_res *res = pl_shader_finalize(sh);
REQUIRE(res);
for (int n = 0; n < res->num_descriptors; n++) {
const struct pl_shader_desc *sd = &res->descriptors[n];
if (sd->desc.type != PL_DESC_SAMPLED_TEX)
continue;
pl_tex tex = sd->binding.object;
const float *data = (float *) pl_tex_dummy_data(tex);
if (!data)
continue; // means this was the `dummy` texture
#ifdef PRINT_LUTS
for (int i = 0; i < tex->params.w; i++)
printf("lut[%d] = %f\n", i, data[i]);
#endif
}
// Try out generation of the sampler2D interface
src.tex = NULL;
src.tex_w = 100;
src.tex_h = 100;
src.format = PL_FMT_UNORM;
src.sampler = PL_SAMPLER_NORMAL;
src.mode = PL_TEX_SAMPLE_LINEAR;
pl_shader_reset(sh, pl_shader_params( .gpu = gpu ));
REQUIRE(pl_shader_sample_polar(sh, &src, &filter_params));
REQUIRE((res = pl_shader_finalize(sh)));
REQUIRE_CMP(res->input, ==, PL_SHADER_SIG_SAMPLER, "u");
pl_shader_free(&sh);
pl_shader_obj_destroy(&lut);
pl_tex_destroy(gpu, &dummy);
pl_gpu_dummy_destroy(&gpu);
pl_log_destroy(&log);
}
|