|
@@ -15,11 +15,14 @@ void main() {
|
|
|
|
|
|
|
|
// TODO: Specialization constants for num_samples?
|
|
// TODO: Specialization constants for num_samples?
|
|
|
const int num_samples = imageSamples(msaa_in);
|
|
const int num_samples = imageSamples(msaa_in);
|
|
|
|
|
+ const ivec3 msaa_size = imageSize(msaa_in);
|
|
|
|
|
+ const ivec3 out_size = imageSize(output_img);
|
|
|
|
|
+ const ivec3 scale = out_size / msaa_size;
|
|
|
for (int curr_sample = 0; curr_sample < num_samples; ++curr_sample) {
|
|
for (int curr_sample = 0; curr_sample < num_samples; ++curr_sample) {
|
|
|
const vec4 pixel = imageLoad(msaa_in, coords, curr_sample);
|
|
const vec4 pixel = imageLoad(msaa_in, coords, curr_sample);
|
|
|
|
|
|
|
|
- const int single_sample_x = 2 * coords.x + (curr_sample & 1);
|
|
|
|
|
- const int single_sample_y = 2 * coords.y + ((curr_sample / 2) & 1);
|
|
|
|
|
|
|
+ const int single_sample_x = scale.x * coords.x + (curr_sample & 1);
|
|
|
|
|
+ const int single_sample_y = scale.y * coords.y + ((curr_sample / 2) & 1);
|
|
|
const ivec3 dest_coords = ivec3(single_sample_x, single_sample_y, coords.z);
|
|
const ivec3 dest_coords = ivec3(single_sample_x, single_sample_y, coords.z);
|
|
|
|
|
|
|
|
if (any(greaterThanEqual(dest_coords, imageSize(output_img)))) {
|
|
if (any(greaterThanEqual(dest_coords, imageSize(output_img)))) {
|