/* * Trigger multiple sampler views for the same texture resource. */ #include "piglit-util-gl.h" PIGLIT_GL_TEST_CONFIG_BEGIN config.supports_gl_core_version = 33; config.window_width = 64; config.window_height = 64; PIGLIT_GL_TEST_CONFIG_END static GLuint tex, prog; GLuint sampler_decode; GLuint sampler_skip; static const char *vs = "#version 330\n" "in vec4 piglit_vertex;" "void main(){ gl_Position = piglit_vertex; }"; static const char *fs = "#version 330\n" "uniform sampler2D t0;\n" "uniform sampler2D t1;\n" "out vec4 c;\n" "void main(){\n" " vec4 a = texture(t0, vec2(0.5));\n" " vec4 b = texture(t1, vec2(0.5));\n" " c = mix(a, b, 0.5);\n" "}"; void piglit_init(int argc, char **argv) { prog = piglit_build_simple_program(vs, fs); glUseProgram(prog); glUniform1i(glGetUniformLocation(prog, "t0"), 0); glUniform1i(glGetUniformLocation(prog, "t1"), 1); glGenSamplers(1, &sampler_decode); glSamplerParameteri(sampler_decode, GL_TEXTURE_SRGB_DECODE_EXT, GL_DECODE_EXT); glGenSamplers(1, &sampler_skip); glSamplerParameteri(sampler_skip, GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT); /* create texture A */ glGenTextures(1, &tex); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, tex); glBindSampler(0, sampler_decode); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, tex); glBindSampler(1, sampler_skip); uint32_t px = 0xff00ffff; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, &px); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glBindTexture(GL_TEXTURE_2D, tex); } enum piglit_result piglit_display(void) { glClear(GL_COLOR_BUFFER_BIT); /* draw */ piglit_draw_rect(-1, -1, 2, 1); piglit_present_results(); return PIGLIT_PASS; }