]> git.sesse.net Git - narabu/blobdiff - narabu.cpp
Make num_blocks a uniform.
[narabu] / narabu.cpp
index 2eb29dcd46877d788de0ee43a03e443352b1308b..11117f4fd9f9c744e62b4fe15a7b06b365120812 100644 (file)
@@ -179,7 +179,7 @@ int main(int argc, char **argv)
        check_error();
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        check_error();
-        glTexImage2D(GL_TEXTURE_2D, 0, GL_R16I, 1280, 720, 0, GL_RED_INTEGER, GL_SHORT, nullptr);
+        glTexImage2D(GL_TEXTURE_2D, 0, GL_R16I, WIDTH, HEIGHT, 0, GL_RED_INTEGER, GL_SHORT, nullptr);
        check_error();
 
        GLuint out_tex;
@@ -189,8 +189,8 @@ int main(int argc, char **argv)
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
-        glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, 1280, 720, 0, GL_RED, GL_UNSIGNED_BYTE, nullptr);
-        //glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, 1280, 720, 0, GL_RED, GL_FLOAT, nullptr);
+        glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, WIDTH, HEIGHT, 0, GL_RED, GL_UNSIGNED_BYTE, nullptr);
+        //glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, WIDTH, HEIGHT, 0, GL_RED, GL_FLOAT, nullptr);
        check_error();
 
        GLint cum2sym_tex_pos = glGetUniformLocation(glsl_program_num, "cum2sym_tex");
@@ -198,14 +198,18 @@ int main(int argc, char **argv)
        GLint out_tex_pos = glGetUniformLocation(glsl_program_num, "out_tex");
        GLint coeff_tex_pos = glGetUniformLocation(glsl_program_num, "coeff_tex");
        GLint sign_bias_pos = glGetUniformLocation(glsl_program_num, "sign_bias_per_model");
+       GLint num_blocks_pos = glGetUniformLocation(glsl_program_num, "num_blocks");
        printf("%d err=0x%x pos=%d,%d,%d,%d\n", __LINE__, glGetError(), cum2sym_tex_pos, dsyms_tex_pos, out_tex_pos, sign_bias_pos);
 
+       unsigned num_blocks = (HEIGHT / 16);
+
        // Bind the textures.
        glUniform1i(cum2sym_tex_pos, 0);
        glUniform1i(dsyms_tex_pos, 1);
        glUniform1i(out_tex_pos, 2);
        glUniform1i(coeff_tex_pos, 3);
        glUniform1uiv(sign_bias_pos, 16, sign_bias);
+       glUniform1i(num_blocks_pos, num_blocks);
         glBindImageTexture(0, cum2sym_tex, 0, GL_FALSE, 0, GL_READ_ONLY, GL_R8UI);
         glBindImageTexture(1, dsyms_tex, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RG16UI);
         glBindImageTexture(2, out_tex, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_R8);
@@ -213,7 +217,6 @@ int main(int argc, char **argv)
        printf("%d err=0x%x\n", __LINE__, glGetError());
 
        // Decode all luma blocks.
-       unsigned num_blocks = (HEIGHT / 16);
        for (unsigned y = 0; y < 8; ++y) {
                 for (unsigned x = 0; x < 8; ++x) {
                        unsigned coeff_num = y * 8 + x;
@@ -262,8 +265,10 @@ int main(int argc, char **argv)
 
 #define PARALLEL_SLICES 1
        steady_clock::time_point start = steady_clock::now();
-       for (int i = 0; i < 1000; ++i)
-               glDispatchCompute(1, (45+PARALLEL_SLICES-1)/PARALLEL_SLICES, 1);
+       for (int i = 0; i < 1000; ++i) {
+               unsigned num_slices = (WIDTH/8)*(HEIGHT/8)/320;
+               glDispatchCompute(1, (num_slices+PARALLEL_SLICES-1)/PARALLEL_SLICES, 1);
+       }
        check_error();
        glFinish();
        steady_clock::time_point now = steady_clock::now();
@@ -299,7 +304,7 @@ int main(int argc, char **argv)
        }
        printf("\n");
 
-       unsigned char *data = new unsigned char[1280 * 720];
+       unsigned char *data = new unsigned char[WIDTH * HEIGHT];
        glGetTexImage(GL_TEXTURE_2D, 0, GL_RED, GL_UNSIGNED_BYTE, data);
        check_error();
        printf("%d err=0x%x bufsize=%zu\n", __LINE__, glGetError(), coded.size());
@@ -308,7 +313,7 @@ int main(int argc, char **argv)
        for (int k = 0; k < 4; ++k) {
                for (int y = 0; y < 8; ++y) {
                        for (int x = 0; x < 8; ++x) {
-                               printf("%3d ", data[y * 1280 + x + k*8]);
+                               printf("%3d ", data[y * WIDTH + x + k*8]);
                        }
                        printf("\n");
                }
@@ -319,8 +324,8 @@ int main(int argc, char **argv)
        for (int k = 0; k < 4; ++k) {
                for (int y = 0; y < 8; ++y) {
                        for (int x = 0; x < 8; ++x) {
-                               //printf("%5.2f ", data[(y+8) * 1280 + x + (1272-k*8)]);
-                               printf("%3d ", data[y * 1280 + x + k*8]);
+                               //printf("%5.2f ", data[(y+8) * WIDTH + x + (1272-k*8)]);
+                               printf("%3d ", data[y * WIDTH + x + k*8]);
                        }
                        printf("\n");
                }
@@ -330,10 +335,10 @@ int main(int argc, char **argv)
 #endif
 
        FILE *fp = fopen("narabu.pgm", "wb");
-       fprintf(fp, "P5\n1280 720\n255\n");
-       for (int y = 0; y < 720; ++y) {
-               for (int x = 0; x < 1280; ++x) {
-                       int k = lrintf(data[y * 1280 + x]);
+       fprintf(fp, "P5\n%d %d\n255\n", WIDTH, HEIGHT);
+       for (int y = 0; y < HEIGHT; ++y) {
+               for (int x = 0; x < WIDTH; ++x) {
+                       int k = lrintf(data[y * WIDTH + x]);
                        if (k < 0) k = 0;
                        if (k > 255) k = 255;
                        putc(k, fp);
@@ -341,7 +346,7 @@ int main(int argc, char **argv)
        }
        fclose(fp);
 
-       int16_t *coeff_data = new int16_t[1280 * 720];
+       int16_t *coeff_data = new int16_t[WIDTH * HEIGHT];
         glBindTexture(GL_TEXTURE_2D, coeff_tex);
        check_error();
        glGetTexImage(GL_TEXTURE_2D, 0, GL_RED_INTEGER, GL_SHORT, coeff_data);
@@ -349,7 +354,7 @@ int main(int argc, char **argv)
        for (int k = 0; k < 4; ++k) {
                for (int y = 0; y < 8; ++y) {
                        for (int x = 0; x < 8; ++x) {
-                               printf("%3d ", coeff_data[y * 1280 + x + k*8]);
+                               printf("%3d ", coeff_data[y * WIDTH + x + k*8]);
                        }
                        printf("\n");
                }