148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/*------------------------------------------------------------------------- 248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * OpenGL Conformance Test Suite 348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * ----------------------------- 448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2015-2016 The Khronos Group Inc. 648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * you may not use this file except in compliance with the License. 948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * You may obtain a copy of the License at 1048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 1148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 1248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 1348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Unless required by applicable law or agreed to in writing, software 1448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 1548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * See the License for the specific language governing permissions and 1748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * limitations under the License. 1848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 1984322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*! 2048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \file 2148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \brief 2284322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*-------------------------------------------------------------------*/ 2348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 2448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** 2548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ /*! 2648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \file gl4cGetTextureSubImageTests.cpp 2748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \brief Get Texture Sub Image Tests Suite Implementation 2884322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*-------------------------------------------------------------------*/ 2948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 3048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Includes. */ 3148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gl4cGetTextureSubImageTests.hpp" 3248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluContextInfo.hpp" 3348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluDefs.hpp" 3448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluRenderContext.hpp" 3548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluStrUtil.hpp" 3648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "tcuTestLog.hpp" 3748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include <cstdlib> 3848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 3948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Implementation */ 4048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 4148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/************************************************************************************************** 4248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Tests Group Implementation * 4348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos **************************************************************************************************/ 4448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 4548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosgl4cts::GetTextureSubImage::Tests::Tests(deqp::Context& context) 4648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos : TestCaseGroup(context, "get_texture_sub_image", "Get Texture Sub Image Tests Suite") 4748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 4848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos addChild(new GetTextureSubImage::Errors(m_context)); 4948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos addChild(new GetTextureSubImage::Functional(m_context)); 5048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 5148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 5248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosgl4cts::GetTextureSubImage::Tests::~Tests(void) 5348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 5448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 5548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 5648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid gl4cts::GetTextureSubImage::Tests::init(void) 5748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 5848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 5948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 6048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/************************************************************************************************** 6148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Errors Tests Implementation * 6248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos **************************************************************************************************/ 6348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 6448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Constructor of API Errors tests. 6548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 6648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return [in] context OpenGL context in which test shall run. 6748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 6848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosgl4cts::GetTextureSubImage::Errors::Errors(deqp::Context& context) 6948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos : deqp::TestCase(context, "errors_test", "Get Texture SubImage Errors Test") 7048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_context(context) 7148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture_1D(0) 7248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture_1D_array(0) 7348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture_2D(0) 7448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture_rectangle(0) 7548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture_2D_compressed(0) 7648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture_2D_multisampled(0) 7748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_destination_buffer(DE_NULL) 7848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_gl_GetTextureSubImage(DE_NULL) 7948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_gl_GetCompressedTextureSubImage(DE_NULL) 8048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 8148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 8248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 8348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Destructor of API Errors tests. 8448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 8548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosgl4cts::GetTextureSubImage::Errors::~Errors(void) 8648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 8748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 8848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 8948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** This function iterate over API Errors tests. 9048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 9148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulostcu::TestNode::IterateResult gl4cts::GetTextureSubImage::Errors::iterate(void) 9248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 9348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_ok = true; 9448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool test_error = false; 9548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 9648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_at_least_gl_45 = (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5))); 9748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_arb_get_texture_sub_image = m_context.getContextInfo().isExtensionSupported("GL_ARB_get_texture_sub_image"); 9848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 9948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos try 10048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 10148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_at_least_gl_45 || is_arb_get_texture_sub_image) 10248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 10348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Prepare texture objects */ 10448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos prepare(); 10548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 10648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Do tests. */ 10748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testExistingTextureObjectError(); 10848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 10948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testBufferOrMultisampledTargetError(); 11048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testNegativeOffsetError(); 11248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testBoundsError(); 11448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testOneDimmensionalTextureErrors(); 11648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testTwoDimmensionalTextureErrors(); 11848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= testBufferSizeError(); 12048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 12148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 12248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos catch (...) 12348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 12448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok = false; 12548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos test_error = true; 12648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 12748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 12848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Clean up */ 12948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos clean(); 13048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 13148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Result's setup. */ 13248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_ok) 13348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 13448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 13548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 13648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 13748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 13848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (test_error) 13948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 14048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_INTERNAL_ERROR, "Error"); 14148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 14248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 14348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 14448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 14548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 14648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 14748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 14848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return STOP; 14948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 15048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 15148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Preparation of source textures and destination buffer. 15248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 15348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid gl4cts::GetTextureSubImage::Errors::prepare() 15448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 15548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 15648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 15748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 15848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* If already initialized throw exception. */ 15948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_1D || m_texture_1D_array || m_texture_2D || m_texture_rectangle || m_texture_2D_compressed || 16058c8f690e918d5b7b1c91babce93697327294cf3Eduardo Lima Mitev m_texture_2D_multisampled) 16148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 16248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 16348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 16448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 16548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Generate texture ids. */ 16648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture_1D); 16748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture_1D_array); 16848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture_2D); 16948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture_rectangle); 17048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture_2D_compressed); 17148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture_2D_multisampled); 17248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 17348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures call failed."); 17448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 17548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* If one is not initialized throw exception. */ 17648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!(m_texture_1D && m_texture_1D_array && m_texture_2D)) 17748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 17848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 17948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 18048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 18148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Upload texture data. */ 18248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(GL_TEXTURE_1D, m_texture_1D); 18348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 18448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 18548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage1D(GL_TEXTURE_1D, 0, GL_RGBA8, s_texture_data_width, 0, GL_RGBA, GL_UNSIGNED_BYTE, s_texture_data); 18648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 18748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 18848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(GL_TEXTURE_1D_ARRAY, m_texture_1D_array); 18948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 19048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 19148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_1D_ARRAY, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, GL_RGBA, 19248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_texture_data); 19348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 19448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 19548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(GL_TEXTURE_2D, m_texture_2D); 19648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 19748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 19848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 19948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data); 20048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 20148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 20248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(GL_TEXTURE_RECTANGLE, m_texture_rectangle); 20348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 20448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 20548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, GL_RGBA, 20648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_texture_data); 20748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 20848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 20948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Upload compressed texture data. */ 21048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(GL_TEXTURE_2D, m_texture_2D_compressed); 21148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 21248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 21348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, s_texture_data_compressed_width, 21448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height, 0, s_texture_data_compressed_size, 21548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed); 21648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 21748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 21848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Prepare multisampled texture storage. */ 21948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_texture_2D_multisampled); 22048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 22148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 22248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 1, GL_R8, s_texture_data_width, s_texture_data_height, GL_TRUE); 22348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 22448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 22548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Prepare function pointers. */ 22648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage = 22748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (PFNGLGETTEXTURESUBIMAGEPROC)m_context.getRenderContext().getProcAddress("glGetTextureSubImage"); 22848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage = 22948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)m_context.getRenderContext().getProcAddress( 23048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "glGetCompressedTextureSubImage"); 23148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 23248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if ((DE_NULL == m_gl_GetTextureSubImage) || (DE_NULL == m_gl_GetCompressedTextureSubImage)) 23348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 23448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 23548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 23648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 23748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Allocate destination buffer. */ 23848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer = (glw::GLubyte*)malloc(s_destination_buffer_size); 23948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 24048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (DE_NULL == m_destination_buffer) 24148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 24248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 24348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 24448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 24548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 2466e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty/** The function checks that GL_INVALID_OPERATION error is generated by GetTextureSubImage if 2476e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty * texture is not the name of an existing texture object. It also checks that 2486e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty * GL_INVALID_OPERATION error is generated by GetCompressedTextureSubImage if texture is not 2496e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty * the name of an existing texture object. For reference see the OpenGL 4.5 Core Specification 2506e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty * chapter 8.11.4. 25148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 25248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 25348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 25448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testExistingTextureObjectError() 25548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 25648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 25748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 25848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 25948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Prepare invalid texture name. */ 26048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint invalid_texture = m_texture_2D_multisampled; 26148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 26248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos while (gl.isTexture(++invalid_texture)) 26348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ; 26448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 26548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(invalid_texture, 0, 0, 0, 0, s_texture_data_width, s_texture_data_height, 1, GL_RGBA, 26648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_destination_buffer_size, m_destination_buffer); 26748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 26848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 2696e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty glw::GLint is_proper_error = (GL_INVALID_OPERATION == error_value); 27048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 27148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 27248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 2736e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty m_testCtx.getLog() << tcu::TestLog::Message << "GL_INVALID_OPERATION error is expected to be generated by " 27448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "glGetTextureSubImage if texture is not the name of an existing " 27548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "texture object (OpenGL 4.5 Core Specification chapter 8.11.4)." 27648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << " However, the error value " << glu::getErrorName(error_value) << " was generated." 27748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 27848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 27948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 28048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage(invalid_texture, 0, 0, 0, 0, s_texture_data_compressed_width, 28148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height, 1, s_destination_buffer_size, 28248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer); 28348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 28448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos error_value = gl.getError(); 28548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 2866e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty glw::GLint is_proper_error_compressed = (GL_INVALID_OPERATION == error_value); 28748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 28848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error_compressed) 28948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 29048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message 2916e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty << "GL_INVALID_OPERATION error is expected to be generated by glGetCompressedTextureSubImage " 2926e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty "if texture is not the name of an existing texture object (OpenGL 4.5 Core Specification " 29348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "chapter 8.11.4)." 29448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << " However, the error value " << glu::getErrorName(error_value) << " was generated." 29548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 29648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 29748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 29848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_proper_error && is_proper_error_compressed) 29948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 30048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 30148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 30248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 30348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 30448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 30548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 3066e1b81eef515fdd8e61fc7b53c7d6d2e8f3dc9c4James Helferty/** The function checks that GL_INVALID_OPERATION error is generated if texture is the 30748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * name of a buffer or multisample texture. For reference see OpenGL 4.5 Core Specification 30848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * chapter 8.11.4. 30948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 31048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 31148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 31248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testBufferOrMultisampledTargetError() 31348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 31448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 31548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 31648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 31748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test. */ 31848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(m_texture_2D_multisampled, 0, 0, 0, 0, s_texture_data_width, s_texture_data_height, 1, 31948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, s_destination_buffer_size, m_destination_buffer); 32048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 32248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error = (GL_INVALID_OPERATION == error_value); 32348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 32548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 32648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message << "GL_INVALID_OPERATION error is expected to be generated by " 32748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "glGetTextureSubImage if texture is the name of multisample " 32848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "texture (OpenGL 4.5 Core Specification chapter 8.11.4)." 32948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << " However, the error value " << glu::getErrorName(error_value) << " was generated." 33048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 33148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 33248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 33348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_proper_error) 33448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 33548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 33648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 33748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 33848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 33948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 34048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 34148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** The functions checks that GL_INVALID_VALUE is generated if xoffset, yoffset or 34248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * zoffset are negative. For reference see OpenGL 4.5 Core Specification 34348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * chapter 8.11.4. 34448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 34548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 34648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 34748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testNegativeOffsetError() 34848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 34948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 35048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 35148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 35248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test. */ 35348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(m_texture_2D, 0, -1, 0, 0, s_texture_data_width, s_texture_data_height, 1, GL_RGBA, 35448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_destination_buffer_size, m_destination_buffer); 35548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 35648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 35748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error = (GL_INVALID_VALUE == error_value); 35848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 35948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 36048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 36148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message 36248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_VALUE error is expected to be generated by glGetTextureSubImage if xoffset, " 36348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "yoffset or zoffset are negative (OpenGL 4.5 Core Specification chapter 8.11.4)." 36448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << " However, the error value " << glu::getErrorName(error_value) << " was generated." 36548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 36648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 36748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 36848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage(m_texture_2D_compressed, 0, -1, 0, 0, s_texture_data_compressed_width, 36948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height, 1, s_destination_buffer_size, 37048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer); 37148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 37248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos error_value = gl.getError(); 37348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 37448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error_compressed = (GL_INVALID_VALUE == error_value); 37548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 37648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error_compressed) 37748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 37848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message 37948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_VALUE error is expected to be generated by glGetCompressedTextureSubImage if " 38048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "xoffset, yoffset or zoffset are negative (OpenGL 4.5 Core Specification chapter 8.11.4)." 38148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << " However, the error value " << glu::getErrorName(error_value) << " was generated." 38248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 38348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 38448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 38548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_proper_error && is_proper_error_compressed) 38648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 38748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 38848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 38948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 39048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 39148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 39248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 39348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** The functions checks that GL_INVALID_VALUE is generated if xoffset + width is 39448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * greater than the texture's width, yoffset + height is greater than 39548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * the texture's height, or zoffset + depth is greater than the 39648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * texture's depth. For reference see OpenGL 4.5 Core Specification 39748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * chapter 8.11.4. 39848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 39948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 40048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 40148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testBoundsError() 40248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 40348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 40448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 40548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 40648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Uncompresse texture test. */ 40748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(m_texture_2D, 0, s_texture_data_width, s_texture_data_height, 0, s_texture_data_width * 2, 40848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_height * 2, 1, GL_RGBA, GL_UNSIGNED_BYTE, s_destination_buffer_size, 40948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer); 41048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 41148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 41248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error = (GL_INVALID_VALUE == error_value); 41348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 41448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 41548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 41648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() 41748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::Message 41848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_VALUE error is expected to be generated by glGetTextureSubImage if xoffset + width is" 41948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " greater than the texture's width, yoffset + height is greater than" 42048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " the texture's height, or zoffset + depth is greater than the" 42148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " texture's depth. (OpenGL 4.5 Core Specification chapter 8.11.4)." 42248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 42348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 42448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 42548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 42648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Compresse texture test. */ 42748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage(m_texture_2D_compressed, 0, s_texture_data_compressed_width, 42848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height, 0, s_texture_data_compressed_width * 2, 42948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height * 2, 1, s_destination_buffer_size, 43048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer); 43148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 43248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos error_value = gl.getError(); 43348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 43448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error_compressed = (GL_INVALID_VALUE == error_value); 43548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 43648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error_compressed) 43748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 43848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message 43948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_VALUE error is expected to be generated by glGetCompressedTextureSubImage if " 44048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "xoffset + width is" 44148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " greater than the texture's width, yoffset + height is greater than" 44248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " the texture's height, or zoffset + depth is greater than the" 44348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " texture's depth. (OpenGL 4.5 Core Specification chapter 8.11.4)." 44448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 44548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 44648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 44748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 44848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_proper_error && is_proper_error_compressed) 44948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 45048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 45148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 45248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 45348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 45448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 45548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 45648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** The functions checks that GL_INVALID_VALUE error is generated if the effective 45748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * target is GL_TEXTURE_1D and either yoffset is not zero, or height 45848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * is not one. For reference see OpenGL 4.5 Core Specification 45948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * chapter 8.11.4. 46048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 46148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 46248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 46348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testOneDimmensionalTextureErrors() 46448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 46548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 46648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 46748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 46848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test. */ 46948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(m_texture_1D, 0, 0, 1, 0, s_texture_data_width, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE, 47048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_destination_buffer_size, m_destination_buffer); 47148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 47248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 47348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error = (GL_INVALID_VALUE == error_value); 47448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 47548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 47648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 47748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() 47848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::Message 47948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_VALUE error is expected to be generated by glGetTextureSubImage if the effective" 48048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " target is GL_TEXTURE_1D and either yoffset is not zero, or height" 48148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " is not one (OpenGL 4.5 Core Specification chapter 8.11.4)." 48248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 48348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 48448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 48548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 48648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_proper_error) 48748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 48848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 48948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 49048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 49148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 49248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 49348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 49448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** The functions checks that GL_INVALID_VALUE error is generated if the effective 49548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * target is GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D or 49648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * GL_TEXTURE_RECTANGLE and either zoffset is not zero, or depth 49748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * is not one. For reference see OpenGL 4.5 Core Specification 49848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * chapter 8.11.4. 49948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 50048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 50148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 50248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testTwoDimmensionalTextureErrors() 50348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 50448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 50548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 50648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 50748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test. */ 50848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos static const struct 50948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 51048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint id; 51148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::GLchar* target_name; 51248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } test_textures[] = { { m_texture_1D, "GL_TEXTURE_1D" }, 51348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { m_texture_1D_array, "GL_TEXTURE_1D_ARRAY" }, 51458c8f690e918d5b7b1c91babce93697327294cf3Eduardo Lima Mitev { m_texture_2D, "GL_TEXTURE_2D" } }; 51548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 51648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos static const glw::GLuint test_textures_size = sizeof(test_textures) / sizeof(test_textures[0]); 51748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 51848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_error = true; 51948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 52048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLuint i = 0; i < test_textures_size; ++i) 52148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 52248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(test_textures[i].id, 0, 0, 0, 1, s_texture_data_width, 52348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (test_textures[i].id == GL_TEXTURE_1D) ? 1 : s_texture_data_height, 2, GL_RGBA, 52448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_destination_buffer_size, m_destination_buffer); 52548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 52648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 52748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error = (GL_INVALID_VALUE == error_value); 52848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 52948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 53048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 53148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_error = false; 53248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 53348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() 53448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::Message 53548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_VALUE error is expected to be generated by glGetTextureSubImage if the effective" 53648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " target is " 53748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << test_textures[i].target_name << " and either zoffset is not zero, or depth" 53848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " is not one. (OpenGL 4.5 Core Specification chapter 8.11.4)." 53948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 54048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 54148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 54248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 54348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 54448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test (compressed textures). */ 54548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos static const struct 54648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 54748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint id; 54848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::GLchar* target_name; 54958c8f690e918d5b7b1c91babce93697327294cf3Eduardo Lima Mitev } test_compressed_textures[] = { { m_texture_2D_compressed, "GL_TEXTURE_2D" } }; 55048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 55148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos static const glw::GLuint test_compressed_textures_size = 55248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos sizeof(test_compressed_textures) / sizeof(test_compressed_textures[0]); 55348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 55448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLuint i = 0; i < test_compressed_textures_size; ++i) 55548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 55648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage(test_compressed_textures[i].id, 0, 0, 0, 1, s_texture_data_compressed_width, 55748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height, 2, s_destination_buffer_size, 55848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer); 55948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 56048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 56148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 56248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error_compressed = (GL_INVALID_VALUE == error_value); 56348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 56448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error_compressed) 56548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 56648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_error = false; 56748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 56848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message << "GL_INVALID_VALUE error is expected to be generated by " 56948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "glGetCompressedTextureSubImage if the effective" 57048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " target is " 57148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << test_compressed_textures[i].target_name 57248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << " and either zoffset is not zero, or depth" 57348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " is not one. (OpenGL 4.5 Core Specification chapter 8.11.4)." 57448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 57548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 57648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 57748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 57848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 57948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_error) 58048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 58148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 58248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 58348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 58448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 58548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 58648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 58748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** The functions checks that GL_INVALID_OPERATION error is generated if the buffer 58848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * size required to store the requested data is greater than bufSize. 58948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * For reference see OpenGL 4.5 Core Specification chapter 8.11.4. 59048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 59148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if proper error values are generated, false otherwise. 59248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 59348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Errors::testBufferSizeError() 59448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 59548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 59648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 59748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 59848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test for uncompressed texture. */ 59948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(m_texture_2D, 0, 0, 0, 0, s_texture_data_width, s_texture_data_height, 1, GL_RGBA, 60048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, 1, m_destination_buffer); 60148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 60248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error_value = gl.getError(); 60348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error = (GL_INVALID_OPERATION == error_value); 60448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 60548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error) 60648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 60748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() 60848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::Message 60948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_OPERATION error is expected to be generated by glGetTextureSubImage if the buffer" 61048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " size required to store the requested data is greater than bufSize. (OpenGL 4.5 Core Specification " 61148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "chapter 8.11.4)." 61248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 61348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 61448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 61548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 61648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Test for compressed texture. */ 61748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage(m_texture_2D_compressed, 0, 0, 0, 0, s_texture_data_compressed_width, 61848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_height, 1, 1, m_destination_buffer); 61948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 62048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos error_value = gl.getError(); 62148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 62248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint is_proper_error_compressed = (GL_INVALID_OPERATION == error_value); 62348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 62448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_proper_error_compressed) 62548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 62648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() 62748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::Message 62848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "GL_INVALID_OPERATION error is expected to be generated by glGetCompressedTextureSubImage if the buffer" 62948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " size required to store the requested data is greater than bufSize. (OpenGL 4.5 Core Specification " 63048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "chapter 8.11.4)." 63148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos " However, the error value " 63248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << glu::getErrorName(error_value) << " was generated." << tcu::TestLog::EndMessage; 63348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 63448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 63548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Return results. */ 63648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_proper_error && is_proper_error_compressed) 63748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 63848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return true; 63948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 64048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return false; 64248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 64348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid gl4cts::GetTextureSubImage::Errors::clean() 64548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 64648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 64748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 64848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /*Textures cleanup. */ 65048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_1D) 65148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 65248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture_1D); 65348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture_1D = 0; 65448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 65548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 65648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_1D_array) 65748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 65848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture_1D_array); 65948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture_1D_array = 0; 66048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 66148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 66248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_2D) 66348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 66448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture_2D); 66548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture_2D = 0; 66648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 66748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_rectangle) 66848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 66948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture_rectangle); 67048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture_rectangle = 0; 67148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 67248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 67348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_2D_compressed) 67448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 67548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture_2D_compressed); 67648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture_2D_compressed = 0; 67748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 67848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 67948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture_2D_multisampled) 68048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 68148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture_2D_multisampled); 68248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture_2D_multisampled = 0; 68348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 68448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 68548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* CPU buffers */ 68648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_destination_buffer) 68748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 68848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos free(m_destination_buffer); 68948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_destination_buffer = DE_NULL; 69048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 69148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 69248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 69348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Uncompressed source texture 2x2 pixels */ 69448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 69548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLubyte gl4cts::GetTextureSubImage::Errors::s_texture_data[] = { 69648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 69748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; //<! uncompressed texture 69848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 69948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_texture_data_size = 70048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos sizeof(s_texture_data); //<! uncompressed texture size 70148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 70248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_texture_data_width = 2; //<! uncompressed texture width 70348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 70448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_texture_data_height = 2; //<! uncompressed texture height 70548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 70648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* ETC2 compressed texture (4x4 pixels === 1 block) */ 70748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 70848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLubyte gl4cts::GetTextureSubImage::Errors::s_texture_data_compressed[] = { 70948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0x15, 0x90, 0x33, 0x6f, 0xaf, 0xcc, 0x16, 0x98 71048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; //<! ETC2 compressed texture 71148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 71248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_texture_data_compressed_size = 71348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos sizeof(s_texture_data_compressed); //<! ETC2 compressed texture size 71448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 71548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_texture_data_compressed_width = 71648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 4; //<! ETC2 compressed texture width 71748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 71848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_texture_data_compressed_height = 71948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 4; //<! ETC2 compressed texture height 72048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 72148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLuint gl4cts::GetTextureSubImage::Errors::s_destination_buffer_size = 72248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (s_texture_data_size > s_texture_data_compressed_size) ? 72348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_size : 72448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_size; //<! size of the destination buffer (for fetched data) 72548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 72648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/***************************************************************************************************** 72748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Functional Test Implementation * 72848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos *****************************************************************************************************/ 72948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 73048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Constructor of the functional test. 73148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 73248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @param [in] context OpenGL context in which test shall run. 73348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 73448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosgl4cts::GetTextureSubImage::Functional::Functional(deqp::Context& context) 73548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos : deqp::TestCase(context, "functional_test", "Get Texture SubImage Functional Test") 73648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_context(context) 73748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos , m_texture(0) 73848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 73948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 74048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 74148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Destructor of the functional test. 74248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 74348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosgl4cts::GetTextureSubImage::Functional::~Functional(void) 74448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 74548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 74648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 74748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Iterate over functional test cases. 74848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 74948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulostcu::TestNode::IterateResult gl4cts::GetTextureSubImage::Functional::iterate(void) 75048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 75148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_ok = true; 75248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool test_error = false; 75348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 75448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_at_least_gl_45 = (glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::core(4, 5))); 75548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_arb_get_texture_sub_image = m_context.getContextInfo().isExtensionSupported("GL_ARB_get_texture_sub_image"); 75648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 75748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Bind function pointers. */ 75848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage = 75948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)m_context.getRenderContext().getProcAddress( 76048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos "glGetCompressedTextureSubImage"); 76148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage = 76248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (PFNGLGETTEXTURESUBIMAGEPROC)m_context.getRenderContext().getProcAddress("glGetTextureSubImage"); 76348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 76448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos try 76548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 76648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Report error when function pointers are not available. */ 76748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if ((DE_NULL == m_gl_GetCompressedTextureSubImage) || (DE_NULL == m_gl_GetTextureSubImage)) 76848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 76948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() 77048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::Message 77148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "Cannot obtain glGetCompressedTextureSubImage or glGetTextureSubImage function pointer." 77248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 77348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 77448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 77548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 77648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Run tests. */ 77748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_at_least_gl_45 || is_arb_get_texture_sub_image) 77848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 77948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Tested targets. */ 78048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLenum targets[] = { GL_TEXTURE_1D, GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D, 78148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_TEXTURE_RECTANGLE, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY, 78248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D }; 78348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 78448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint targets_count = sizeof(targets) / sizeof(targets[0]); 78548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 78648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLuint i = 0; i < targets_count; ++i) 78748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 78848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos prepare(targets[i], false); 78948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 79048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= check(targets[i], false); 79148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 79248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos clean(); 79348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 79448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 79548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Compressed textures tested targets. */ 79648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLenum compressed_targets[] = { GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_ARRAY, 79748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_TEXTURE_2D_ARRAY }; 79848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 79948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint compressed_targets_count = sizeof(compressed_targets) / sizeof(compressed_targets[0]); 80048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 80148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLuint i = 0; i < compressed_targets_count; ++i) 80248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 80348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos prepare(compressed_targets[i], true); 80448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 80548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok &= check(compressed_targets[i], true); 80648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 80748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos clean(); 80848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 80948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 81048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 81148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos catch (...) 81248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 81348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message << "Test error has occured." << tcu::TestLog::EndMessage; 81448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 81548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok = false; 81648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos test_error = true; 81748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 81848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos clean(); 81948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 82048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 82148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Result's setup. */ 82248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_ok) 82348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 82448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 82548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 82648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 82748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 82848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (test_error) 82948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 83048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_INTERNAL_ERROR, "Error"); 83148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 83248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 83348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 83448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 83548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 83648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 83748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 83848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return STOP; 83948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 84048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 84148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Prepare source texture for the test. 84248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 84348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @param [in] target Target of the texture to be prepared. 84448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @param [in] is_compressed Flag indicating that texture shall be compressed (true) or uncompressed (false). 84548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 84648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid gl4cts::GetTextureSubImage::Functional::prepare(glw::GLenum target, bool is_compressed) 84748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 84848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 84948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 85048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 85148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Generate and bind texture. */ 85248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.genTextures(1, &m_texture); 85348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures call failed."); 85448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 85548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.bindTexture(target, m_texture); 85648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture call failed."); 85748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 85848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Upload data to the texture. */ 85948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_compressed) 86048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 86148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Upload compressed texture. */ 86248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos switch (target) 86348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 86448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_2D: 8658752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton gl.compressedTexImage2D(target, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 0, 86648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed_size / s_texture_data_depth, s_texture_data_compressed); 86748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glCompressedTexImage2D call failed."); 86848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 86948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_CUBE_MAP: 87048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D( 8718752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 87248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth, 87348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data_compressed[0 * s_texture_data_compressed_size / s_texture_data_depth]); 87448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D( 8758752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 87648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth, 87748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data_compressed[1 * s_texture_data_compressed_size / s_texture_data_depth]); 87848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D( 8798752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 88048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth, 88148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data_compressed[2 * s_texture_data_compressed_size / s_texture_data_depth]); 88248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D( 8838752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 88448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth, 88548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data_compressed[3 * s_texture_data_compressed_size / s_texture_data_depth]); 88648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D( 8878752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 88848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth, 88948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data_compressed[4 * s_texture_data_compressed_size / s_texture_data_depth]); 89048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.compressedTexImage2D( 8918752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 89248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth, 89348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data_compressed[5 * s_texture_data_compressed_size / s_texture_data_depth]); 89448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glCompressedTexImage2D call failed."); 89548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 89648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_CUBE_MAP_ARRAY: 8978752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton gl.compressedTexImage3D(target, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 6, 89848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, s_texture_data_compressed_size / s_texture_data_depth * 6, 89948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed); 90048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glCompressedTexImage3D call failed."); 90148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 90248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_2D_ARRAY: 9038752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton gl.compressedTexImage3D(target, 0, GL_COMPRESSED_RGBA_BPTC_UNORM, s_texture_data_width, s_texture_data_height, 90448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_depth, 0, s_texture_data_compressed_size, s_texture_data_compressed); 90548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glCompressedTexImage3D call failed."); 90648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 90748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos default: 90848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 90948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos }; 91048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 91148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 91248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 91348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Upload uncompressed texture. */ 91448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos switch (target) 91548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 91648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_1D: 91748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage1D(target, 0, GL_RGBA8, s_texture_data_width, 0, GL_RGBA, GL_UNSIGNED_BYTE, s_texture_data); 91848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage1D call failed."); 91948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 92048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_1D_ARRAY: 92148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_2D: 92248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_RECTANGLE: 92348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(target, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, GL_RGBA, 92448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_texture_data); 92548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage2D call failed."); 92648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 92748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_CUBE_MAP: 92848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, 92948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, 93048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data[0 * s_texture_data_width * s_texture_data_height * 4 /* RGBA */]); 93148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, 93248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, 93348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data[1 * s_texture_data_width * s_texture_data_height * 4 /* RGBA */]); 93448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, 93548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, 93648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data[2 * s_texture_data_width * s_texture_data_height * 4 /* RGBA */]); 93748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, 93848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, 93948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data[3 * s_texture_data_width * s_texture_data_height * 4 /* RGBA */]); 94048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, 94148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, 94248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data[4 * s_texture_data_width * s_texture_data_height * 4 /* RGBA */]); 94348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 0, 94448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, 94548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos &s_texture_data[5 * s_texture_data_width * s_texture_data_height * 4 /* RGBA */]); 94648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage2D call failed."); 94748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 94848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_CUBE_MAP_ARRAY: 94948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage3D(target, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, 6, 0, GL_RGBA, 95048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, s_texture_data); 95148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage3D call failed."); 95248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 95348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_2D_ARRAY: 95448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos case GL_TEXTURE_3D: 95548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.texImage3D(target, 0, GL_RGBA8, s_texture_data_width, s_texture_data_height, s_texture_data_depth, 0, 95648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_RGBA, GL_UNSIGNED_BYTE, s_texture_data); 95748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GLU_EXPECT_NO_ERROR(gl.getError(), "glTexImage3D call failed."); 95848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 95948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos default: 96048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 96148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos }; 96248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 96348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 96448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Test that Get(Compressed)TextureSubImage resturns expected texture data. 96648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 96748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @param [in] target Target of the texture to be prepared. 96848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @param [in] is_compressed Flag indicating that texture shall be compressed (true) or uncompressed (false). 96948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 97048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * @return True if test succeeded, false otherwise. 97148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 97248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosbool gl4cts::GetTextureSubImage::Functional::check(glw::GLenum target, bool is_compressed) 97348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 97448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 97548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 97648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 97748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Arguments setup (depends on dimmension) */ 97848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint x_offset = s_texture_data_width / 2 /* half */; 97948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint width = s_texture_data_width / 2 /* half */; 98048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 98148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint y_offset = 0; 98248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint height = 1; 98348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 98448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint z_offset = 0; 98548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint depth = 1; 98648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 98748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* For 2 and 3 -dimensional textures setup y-direction. */ 98848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (GL_TEXTURE_1D != target) 98948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 99048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos y_offset = s_texture_data_height / 2 /* half */; 99148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos height = s_texture_data_height / 2 /* half */; 99248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 99348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 99448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* For 3-dimensional textures setup z-direction. */ 99548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if ((GL_TEXTURE_3D == target) || (GL_TEXTURE_2D_ARRAY == target)) 99648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 99748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos z_offset = s_texture_data_depth / 2 /* half */; 99848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos depth = s_texture_data_depth / 2 /* half */; 99948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 100048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 100148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* For cube-map texture stup 6-cube faces. */ 100248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if ((GL_TEXTURE_CUBE_MAP == target) || (GL_TEXTURE_CUBE_MAP_ARRAY == target)) 100348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 100448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos z_offset = 3; /* half of cube map */ 100548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos depth = 3; /* half of cube map */ 100648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 100748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 100848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Setup number of components. */ 100948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint number_of_components = 0; 101048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 101148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_compressed) 101248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 10138752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton number_of_components = 16; /* 128 bit block of 4x4 compressed pixels. */ 101448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 101548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 101648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 101748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos number_of_components = 4; /* RGBA components. */ 101848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 101948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 102048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Setup size. */ 102148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLsizei size = 0; 102248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 102348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Iterate over pixels. */ 102448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint x_block = 1; 102548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint y_block = 1; 102648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 102748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_compressed) 102848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 102948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Iterate over 4x4 compressed pixel block. */ 103048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos x_block = 4; 103148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos y_block = 4; 103248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 103348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos size = static_cast<glw::GLsizei>((width / x_block) * (height / y_block) * depth * number_of_components * 103448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos sizeof(glw::GLubyte)); 103548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 103648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 103748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 103848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos size = static_cast<glw::GLsizei>(width * height * depth * number_of_components * sizeof(glw::GLubyte)); 103948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 104048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 104148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Storage for fetched texturte. */ 104248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLubyte* texture_data = new glw::GLubyte[size]; 104348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 104448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (DE_NULL == texture_data) 104548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 104648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 104748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 104848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 104948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Fetching texture. */ 105048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (is_compressed) 105148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 105248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetCompressedTextureSubImage(m_texture, 0, x_offset, y_offset, z_offset, width, height, depth, size, 105348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos texture_data); 105448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 105548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 105648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 105748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_gl_GetTextureSubImage(m_texture, 0, x_offset, y_offset, z_offset, width, height, depth, GL_RGBA, 105848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos GL_UNSIGNED_BYTE, size, texture_data); 105948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 106048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 106148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Comprae fetched texture with reference. */ 106248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLint error = gl.getError(); 106348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 106448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool is_ok = true; 106548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 106648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (GL_NO_ERROR == error) 106748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 106848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLint k = 0; k < depth; ++k) 106948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 107048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLint j = 0; j < height / y_block; ++j) 107148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 107248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLint i = 0; i < width / x_block; ++i) 107348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 107448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos for (glw::GLint c = 0; c < number_of_components; ++c) /* RGBA components iterating */ 107548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 107648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint reference_data_position = 107748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (i + (x_offset / x_block)) * number_of_components + 107848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (j + (y_offset / y_block)) * s_texture_data_width / x_block * number_of_components + 107948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos (k + z_offset) * s_texture_data_width / x_block * s_texture_data_height / y_block * 108048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos number_of_components + 108148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos c; 108248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 108348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint tested_data_position = 108448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos i * number_of_components + j * width / x_block * number_of_components + 108548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos k * width / x_block * height / y_block * number_of_components + c; 108648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 108748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLubyte reference_value = (is_compressed) ? 108848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data_compressed[reference_data_position] : 108948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos s_texture_data[reference_data_position]; 109048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLubyte tested_value = texture_data[tested_data_position]; 109148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 109248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (reference_value != tested_value) 109348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 109448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos is_ok = false; 109548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos break; 109648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 109748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 109848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 109948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 110048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 110148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 110248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos else 110348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 110448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* GL error. */ 110548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos delete[] texture_data; 110648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos throw 0; 110748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 110848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 110948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Cleanup. */ 111048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos delete[] texture_data; 111148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 111248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Error reporting. */ 111348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (!is_ok) 111448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 111548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_testCtx.getLog() << tcu::TestLog::Message << "Functional test of " 111648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << ((is_compressed) ? "glGetCompressedTextureSubImage " : "glGetTextureSubImage ") 111748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << "function has failed with target " << glu::getTextureTargetStr(target) << "." 111848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos << tcu::TestLog::EndMessage; 111948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 112048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 112148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Return result. */ 112248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return is_ok; 112348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 112448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 112548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** Clean texture. */ 112648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosvoid gl4cts::GetTextureSubImage::Functional::clean() 112748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 112848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* OpenGL functions access point. */ 112948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 113048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 113148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos if (m_texture) 113248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 113348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos gl.deleteTextures(1, &m_texture); 113448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 113548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos m_texture = 0; 113648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 113748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 113848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 113948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** RGBA 8x8x8 pixels in size source texture for testing GetTextureSubImage. */ 114048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLubyte gl4cts::GetTextureSubImage::Functional::s_texture_data[] = { 114148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 64, 2, 0, 0, 96, 3, 114248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 0, 128, 4, 0, 0, 160, 5, 0, 0, 192, 6, 0, 0, 224, 7, 114348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 114448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 32, 0, 1, 0, 32, 32, 2, 0, 32, 64, 3, 0, 32, 96, 4, 114548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 32, 128, 5, 0, 32, 160, 6, 0, 32, 192, 7, 0, 32, 224, 8, 114648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 114748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 64, 0, 2, 0, 64, 32, 3, 0, 64, 64, 4, 0, 64, 96, 5, 114848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 64, 128, 6, 0, 64, 160, 7, 0, 64, 192, 8, 0, 64, 224, 9, 114948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 115048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 96, 0, 3, 0, 96, 32, 4, 0, 96, 64, 5, 0, 96, 96, 6, 115148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 96, 128, 7, 0, 96, 160, 8, 0, 96, 192, 9, 0, 96, 224, 10, 115248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 115348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 128, 0, 4, 0, 128, 32, 5, 0, 128, 64, 6, 0, 128, 96, 7, 115448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 128, 128, 8, 0, 128, 160, 9, 0, 128, 192, 10, 0, 128, 224, 11, 115548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 115648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 160, 0, 5, 0, 160, 32, 6, 0, 160, 64, 7, 0, 160, 96, 8, 115748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 160, 128, 9, 0, 160, 160, 10, 0, 160, 192, 11, 0, 160, 224, 12, 115848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 115948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 192, 0, 6, 0, 192, 32, 7, 0, 192, 64, 8, 0, 192, 96, 9, 116048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 192, 128, 10, 0, 192, 160, 11, 0, 192, 192, 12, 0, 192, 224, 13, 116148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 116248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 224, 0, 7, 0, 224, 32, 8, 0, 224, 64, 9, 0, 224, 96, 10, 116348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 0, 224, 128, 11, 0, 224, 160, 12, 0, 224, 192, 13, 0, 224, 224, 14, 116448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 116548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 0, 0, 1, 32, 0, 32, 2, 32, 0, 64, 3, 32, 0, 96, 4, 116648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 0, 128, 5, 32, 0, 160, 6, 32, 0, 192, 7, 32, 0, 224, 8, 116748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 116848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 32, 0, 2, 32, 32, 32, 3, 32, 32, 64, 4, 32, 32, 96, 5, 116948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 32, 128, 6, 32, 32, 160, 7, 32, 32, 192, 8, 32, 32, 224, 9, 117048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 117148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 64, 0, 3, 32, 64, 32, 4, 32, 64, 64, 5, 32, 64, 96, 6, 117248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 64, 128, 7, 32, 64, 160, 8, 32, 64, 192, 9, 32, 64, 224, 10, 117348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 117448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 96, 0, 4, 32, 96, 32, 5, 32, 96, 64, 6, 32, 96, 96, 7, 117548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 96, 128, 8, 32, 96, 160, 9, 32, 96, 192, 10, 32, 96, 224, 11, 117648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 117748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 128, 0, 5, 32, 128, 32, 6, 32, 128, 64, 7, 32, 128, 96, 8, 117848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 128, 128, 9, 32, 128, 160, 10, 32, 128, 192, 11, 32, 128, 224, 12, 117948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 118048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 160, 0, 6, 32, 160, 32, 7, 32, 160, 64, 8, 32, 160, 96, 9, 118148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 160, 128, 10, 32, 160, 160, 11, 32, 160, 192, 12, 32, 160, 224, 13, 118248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 118348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 192, 0, 7, 32, 192, 32, 8, 32, 192, 64, 9, 32, 192, 96, 10, 118448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 192, 128, 11, 32, 192, 160, 12, 32, 192, 192, 13, 32, 192, 224, 14, 118548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 118648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 224, 0, 8, 32, 224, 32, 9, 32, 224, 64, 10, 32, 224, 96, 11, 118748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 32, 224, 128, 12, 32, 224, 160, 13, 32, 224, 192, 14, 32, 224, 224, 15, 118848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 118948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 0, 0, 2, 64, 0, 32, 3, 64, 0, 64, 4, 64, 0, 96, 5, 119048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 0, 128, 6, 64, 0, 160, 7, 64, 0, 192, 8, 64, 0, 224, 9, 119148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 119248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 32, 0, 3, 64, 32, 32, 4, 64, 32, 64, 5, 64, 32, 96, 6, 119348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 32, 128, 7, 64, 32, 160, 8, 64, 32, 192, 9, 64, 32, 224, 10, 119448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 119548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 64, 0, 4, 64, 64, 32, 5, 64, 64, 64, 6, 64, 64, 96, 7, 119648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 64, 128, 8, 64, 64, 160, 9, 64, 64, 192, 10, 64, 64, 224, 11, 119748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 119848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 96, 0, 5, 64, 96, 32, 6, 64, 96, 64, 7, 64, 96, 96, 8, 119948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 96, 128, 9, 64, 96, 160, 10, 64, 96, 192, 11, 64, 96, 224, 12, 120048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 120148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 128, 0, 6, 64, 128, 32, 7, 64, 128, 64, 8, 64, 128, 96, 9, 120248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 128, 128, 10, 64, 128, 160, 11, 64, 128, 192, 12, 64, 128, 224, 13, 120348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 120448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 160, 0, 7, 64, 160, 32, 8, 64, 160, 64, 9, 64, 160, 96, 10, 120548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 160, 128, 11, 64, 160, 160, 12, 64, 160, 192, 13, 64, 160, 224, 14, 120648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 120748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 192, 0, 8, 64, 192, 32, 9, 64, 192, 64, 10, 64, 192, 96, 11, 120848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 192, 128, 12, 64, 192, 160, 13, 64, 192, 192, 14, 64, 192, 224, 15, 120948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 121048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 224, 0, 9, 64, 224, 32, 10, 64, 224, 64, 11, 64, 224, 96, 12, 121148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 64, 224, 128, 13, 64, 224, 160, 14, 64, 224, 192, 15, 64, 224, 224, 16, 121248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 121348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 0, 0, 3, 96, 0, 32, 4, 96, 0, 64, 5, 96, 0, 96, 6, 121448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 0, 128, 7, 96, 0, 160, 8, 96, 0, 192, 9, 96, 0, 224, 10, 121548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 121648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 32, 0, 4, 96, 32, 32, 5, 96, 32, 64, 6, 96, 32, 96, 7, 121748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 32, 128, 8, 96, 32, 160, 9, 96, 32, 192, 10, 96, 32, 224, 11, 121848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 121948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 64, 0, 5, 96, 64, 32, 6, 96, 64, 64, 7, 96, 64, 96, 8, 122048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 64, 128, 9, 96, 64, 160, 10, 96, 64, 192, 11, 96, 64, 224, 12, 122148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 122248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 96, 0, 6, 96, 96, 32, 7, 96, 96, 64, 8, 96, 96, 96, 9, 122348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 96, 128, 10, 96, 96, 160, 11, 96, 96, 192, 12, 96, 96, 224, 13, 122448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 122548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 128, 0, 7, 96, 128, 32, 8, 96, 128, 64, 9, 96, 128, 96, 10, 122648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 128, 128, 11, 96, 128, 160, 12, 96, 128, 192, 13, 96, 128, 224, 14, 122748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 122848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 160, 0, 8, 96, 160, 32, 9, 96, 160, 64, 10, 96, 160, 96, 11, 122948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 160, 128, 12, 96, 160, 160, 13, 96, 160, 192, 14, 96, 160, 224, 15, 123048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 123148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 192, 0, 9, 96, 192, 32, 10, 96, 192, 64, 11, 96, 192, 96, 12, 123248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 192, 128, 13, 96, 192, 160, 14, 96, 192, 192, 15, 96, 192, 224, 16, 123348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 123448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 224, 0, 10, 96, 224, 32, 11, 96, 224, 64, 12, 96, 224, 96, 13, 123548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 96, 224, 128, 14, 96, 224, 160, 15, 96, 224, 192, 16, 96, 224, 224, 17, 123648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 123748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 0, 0, 4, 128, 0, 32, 5, 128, 0, 64, 6, 128, 0, 96, 7, 123848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 0, 128, 8, 128, 0, 160, 9, 128, 0, 192, 10, 128, 0, 224, 11, 123948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 124048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 32, 0, 5, 128, 32, 32, 6, 128, 32, 64, 7, 128, 32, 96, 8, 124148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 32, 128, 9, 128, 32, 160, 10, 128, 32, 192, 11, 128, 32, 224, 12, 124248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 124348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 64, 0, 6, 128, 64, 32, 7, 128, 64, 64, 8, 128, 64, 96, 9, 124448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 64, 128, 10, 128, 64, 160, 11, 128, 64, 192, 12, 128, 64, 224, 13, 124548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 124648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 96, 0, 7, 128, 96, 32, 8, 128, 96, 64, 9, 128, 96, 96, 10, 124748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 96, 128, 11, 128, 96, 160, 12, 128, 96, 192, 13, 128, 96, 224, 14, 124848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 124948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 128, 0, 8, 128, 128, 32, 9, 128, 128, 64, 10, 128, 128, 96, 11, 125048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 128, 128, 12, 128, 128, 160, 13, 128, 128, 192, 14, 128, 128, 224, 15, 125148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 125248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 160, 0, 9, 128, 160, 32, 10, 128, 160, 64, 11, 128, 160, 96, 12, 125348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 160, 128, 13, 128, 160, 160, 14, 128, 160, 192, 15, 128, 160, 224, 16, 125448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 125548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 192, 0, 10, 128, 192, 32, 11, 128, 192, 64, 12, 128, 192, 96, 13, 125648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 192, 128, 14, 128, 192, 160, 15, 128, 192, 192, 16, 128, 192, 224, 17, 125748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 125848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 224, 0, 11, 128, 224, 32, 12, 128, 224, 64, 13, 128, 224, 96, 14, 125948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128, 224, 128, 15, 128, 224, 160, 16, 128, 224, 192, 17, 128, 224, 224, 18, 126048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 126148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 0, 0, 5, 160, 0, 32, 6, 160, 0, 64, 7, 160, 0, 96, 8, 126248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 0, 128, 9, 160, 0, 160, 10, 160, 0, 192, 11, 160, 0, 224, 12, 126348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 126448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 32, 0, 6, 160, 32, 32, 7, 160, 32, 64, 8, 160, 32, 96, 9, 126548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 32, 128, 10, 160, 32, 160, 11, 160, 32, 192, 12, 160, 32, 224, 13, 126648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 126748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 64, 0, 7, 160, 64, 32, 8, 160, 64, 64, 9, 160, 64, 96, 10, 126848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 64, 128, 11, 160, 64, 160, 12, 160, 64, 192, 13, 160, 64, 224, 14, 126948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 127048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 96, 0, 8, 160, 96, 32, 9, 160, 96, 64, 10, 160, 96, 96, 11, 127148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 96, 128, 12, 160, 96, 160, 13, 160, 96, 192, 14, 160, 96, 224, 15, 127248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 127348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 128, 0, 9, 160, 128, 32, 10, 160, 128, 64, 11, 160, 128, 96, 12, 127448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 128, 128, 13, 160, 128, 160, 14, 160, 128, 192, 15, 160, 128, 224, 16, 127548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 127648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 160, 0, 10, 160, 160, 32, 11, 160, 160, 64, 12, 160, 160, 96, 13, 127748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 160, 128, 14, 160, 160, 160, 15, 160, 160, 192, 16, 160, 160, 224, 17, 127848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 127948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 192, 0, 11, 160, 192, 32, 12, 160, 192, 64, 13, 160, 192, 96, 14, 128048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 192, 128, 15, 160, 192, 160, 16, 160, 192, 192, 17, 160, 192, 224, 18, 128148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 224, 0, 12, 160, 224, 32, 13, 160, 224, 64, 14, 160, 224, 96, 15, 128348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 160, 224, 128, 16, 160, 224, 160, 17, 160, 224, 192, 18, 160, 224, 224, 19, 128448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 0, 0, 6, 192, 0, 32, 7, 192, 0, 64, 8, 192, 0, 96, 9, 128648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 0, 128, 10, 192, 0, 160, 11, 192, 0, 192, 12, 192, 0, 224, 13, 128748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 128848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 32, 0, 7, 192, 32, 32, 8, 192, 32, 64, 9, 192, 32, 96, 10, 128948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 32, 128, 11, 192, 32, 160, 12, 192, 32, 192, 13, 192, 32, 224, 14, 129048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 129148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 64, 0, 8, 192, 64, 32, 9, 192, 64, 64, 10, 192, 64, 96, 11, 129248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 64, 128, 12, 192, 64, 160, 13, 192, 64, 192, 14, 192, 64, 224, 15, 129348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 129448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 96, 0, 9, 192, 96, 32, 10, 192, 96, 64, 11, 192, 96, 96, 12, 129548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 96, 128, 13, 192, 96, 160, 14, 192, 96, 192, 15, 192, 96, 224, 16, 129648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 129748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 128, 0, 10, 192, 128, 32, 11, 192, 128, 64, 12, 192, 128, 96, 13, 129848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 128, 128, 14, 192, 128, 160, 15, 192, 128, 192, 16, 192, 128, 224, 17, 129948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 130048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 160, 0, 11, 192, 160, 32, 12, 192, 160, 64, 13, 192, 160, 96, 14, 130148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 160, 128, 15, 192, 160, 160, 16, 192, 160, 192, 17, 192, 160, 224, 18, 130248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 130348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 192, 0, 12, 192, 192, 32, 13, 192, 192, 64, 14, 192, 192, 96, 15, 130448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 192, 128, 16, 192, 192, 160, 17, 192, 192, 192, 18, 192, 192, 224, 19, 130548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 130648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 224, 0, 13, 192, 224, 32, 14, 192, 224, 64, 15, 192, 224, 96, 16, 130748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 192, 224, 128, 17, 192, 224, 160, 18, 192, 224, 192, 19, 192, 224, 224, 20, 130848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 130948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 0, 0, 7, 224, 0, 32, 8, 224, 0, 64, 9, 224, 0, 96, 10, 131048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 0, 128, 11, 224, 0, 160, 12, 224, 0, 192, 13, 224, 0, 224, 14, 131148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 131248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 32, 0, 8, 224, 32, 32, 9, 224, 32, 64, 10, 224, 32, 96, 11, 131348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 32, 128, 12, 224, 32, 160, 13, 224, 32, 192, 14, 224, 32, 224, 15, 131448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 131548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 64, 0, 9, 224, 64, 32, 10, 224, 64, 64, 11, 224, 64, 96, 12, 131648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 64, 128, 13, 224, 64, 160, 14, 224, 64, 192, 15, 224, 64, 224, 16, 131748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 131848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 96, 0, 10, 224, 96, 32, 11, 224, 96, 64, 12, 224, 96, 96, 13, 131948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 96, 128, 14, 224, 96, 160, 15, 224, 96, 192, 16, 224, 96, 224, 17, 132048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 132148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 128, 0, 11, 224, 128, 32, 12, 224, 128, 64, 13, 224, 128, 96, 14, 132248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 128, 128, 15, 224, 128, 160, 16, 224, 128, 192, 17, 224, 128, 224, 18, 132348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 132448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 160, 0, 12, 224, 160, 32, 13, 224, 160, 64, 14, 224, 160, 96, 15, 132548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 160, 128, 16, 224, 160, 160, 17, 224, 160, 192, 18, 224, 160, 224, 19, 132648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 132748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 192, 0, 13, 224, 192, 32, 14, 224, 192, 64, 15, 224, 192, 96, 16, 132848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 192, 128, 17, 224, 192, 160, 18, 224, 192, 192, 19, 224, 192, 224, 20, 132948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 133048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 224, 0, 14, 224, 224, 32, 15, 224, 224, 64, 16, 224, 224, 96, 17, 133148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 224, 224, 128, 18, 224, 224, 160, 19, 224, 224, 192, 20, 224, 224, 224, 21 133248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 133348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 133448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLsizei gl4cts::GetTextureSubImage::Functional::s_texture_data_size = 133548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos sizeof(s_texture_data); //!< Size of the uncompressed texture. 133648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 133748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLsizei gl4cts::GetTextureSubImage::Functional::s_texture_data_width = 133848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 8; //!< Width of compressed and uncompressed textures. 133948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLsizei gl4cts::GetTextureSubImage::Functional::s_texture_data_height = 134048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 8; //!< Height of compressed and uncompressed textures. 134148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLsizei gl4cts::GetTextureSubImage::Functional::s_texture_data_depth = 134248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 8; //!< Depth of compressed and uncompressed textures. 134348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 134448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** ETC2 8x8x8(layers) pixels in size source texture for testing GetCompressedTextureSubImage. */ 134548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLubyte gl4cts::GetTextureSubImage::Functional::s_texture_data_compressed[] = { 134648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 0 */ 13478752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x80, 0x80, 0x4, 0x2, 0x1, 0x0, 0x10, 0x0, 0x80, 0x81, 0x4, 0x2, 0x1, 0xf8, 0x10, 0x20, 13488752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x81, 0x80, 0x4, 0x2, 0x81, 0x0, 0x1f, 0xc0, 0x81, 0x81, 0x4, 0x2, 0x81, 0xf8, 0x1f, 0xe0, 13498752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x80, 0x80, 0x5, 0x2, 0x1, 0x0, 0x10, 0x0, 0x80, 0x81, 0x5, 0x2, 0x1, 0xf8, 0x10, 0x20, 13508752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x81, 0x80, 0x5, 0x2, 0x81, 0x0, 0x1f, 0xc0, 0x81, 0x81, 0x5, 0x2, 0x81, 0xf8, 0x1f, 0xe0, 135148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 135248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 1 */ 13538752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x90, 0x80, 0x4, 0x12, 0x1, 0x1, 0x10, 0x0, 0x90, 0x81, 0x4, 0x12, 0x1, 0xf9, 0x10, 0x20, 13548752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x91, 0x80, 0x4, 0x12, 0x81, 0x1, 0x1f, 0xc0, 0x91, 0x81, 0x4, 0x12, 0x81, 0xf9, 0x1f, 0xe0, 13558752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x90, 0x80, 0x5, 0x12, 0x1, 0x1, 0x10, 0x0, 0x90, 0x81, 0x5, 0x12, 0x1, 0xf9, 0x10, 0x20, 13568752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x91, 0x80, 0x5, 0x12, 0x81, 0x1, 0x1f, 0xc0, 0x91, 0x81, 0x5, 0x12, 0x81, 0xf9, 0x1f, 0xe0, 135748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 135848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 2 */ 13598752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xa0, 0x80, 0x4, 0x22, 0x1, 0x2, 0x10, 0x0, 0xa0, 0x81, 0x4, 0x22, 0x1, 0xfa, 0x10, 0x20, 13608752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xa1, 0x80, 0x4, 0x22, 0x81, 0x2, 0x1f, 0xc0, 0xa1, 0x81, 0x4, 0x22, 0x81, 0xfa, 0x1f, 0xe0, 13618752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xa0, 0x80, 0x5, 0x22, 0x1, 0x2, 0x10, 0x0, 0xa0, 0x81, 0x5, 0x22, 0x1, 0xfa, 0x10, 0x20, 13628752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xa1, 0x80, 0x5, 0x22, 0x81, 0x2, 0x1f, 0xc0, 0xa1, 0x81, 0x5, 0x22, 0x81, 0xfa, 0x1f, 0xe0, 136348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 136448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 3 */ 13658752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xb0, 0x80, 0x4, 0x32, 0x1, 0x3, 0x10, 0x0, 0xb0, 0x81, 0x4, 0x32, 0x1, 0xfb, 0x10, 0x20, 13668752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xb1, 0x80, 0x4, 0x32, 0x81, 0x3, 0x1f, 0xc0, 0xb1, 0x81, 0x4, 0x32, 0x81, 0xfb, 0x1f, 0xe0, 13678752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xb0, 0x80, 0x5, 0x32, 0x1, 0x3, 0x10, 0x0, 0xb0, 0x81, 0x5, 0x32, 0x1, 0xfb, 0x10, 0x20, 13688752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0xb1, 0x80, 0x5, 0x32, 0x81, 0x3, 0x1f, 0xc0, 0xb1, 0x81, 0x5, 0x32, 0x81, 0xfb, 0x1f, 0xe0, 136948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 137048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 4 */ 13718752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x40, 0x80, 0x4, 0x42, 0x1, 0x4, 0x10, 0x0, 0x40, 0x81, 0x4, 0x42, 0x1, 0xfc, 0x10, 0x20, 13728752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x41, 0x80, 0x4, 0x42, 0x81, 0x4, 0x1f, 0xc0, 0x41, 0x81, 0x4, 0x42, 0x81, 0xfc, 0x1f, 0xe0, 13738752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x40, 0x80, 0x5, 0x42, 0x1, 0x4, 0x10, 0x0, 0x40, 0x81, 0x5, 0x42, 0x1, 0xfc, 0x10, 0x20, 13748752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x41, 0x80, 0x5, 0x42, 0x81, 0x4, 0x1f, 0xc0, 0x41, 0x81, 0x5, 0x42, 0x81, 0xfc, 0x1f, 0xe0, 137548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 137648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 5 */ 13778752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x50, 0x80, 0x4, 0x52, 0x1, 0x5, 0x10, 0x0, 0x50, 0x81, 0x4, 0x52, 0x1, 0xfd, 0x10, 0x20, 13788752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x51, 0x80, 0x4, 0x52, 0x81, 0x5, 0x1f, 0xc0, 0x51, 0x81, 0x4, 0x52, 0x81, 0xfd, 0x1f, 0xe0, 13798752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x50, 0x80, 0x5, 0x52, 0x1, 0x5, 0x10, 0x0, 0x50, 0x81, 0x5, 0x52, 0x1, 0xfd, 0x10, 0x20, 13808752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x51, 0x80, 0x5, 0x52, 0x81, 0x5, 0x1f, 0xc0, 0x51, 0x81, 0x5, 0x52, 0x81, 0xfd, 0x1f, 0xe0, 138148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 138248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 6 */ 13838752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x5e, 0x80, 0x4, 0x5f, 0x1, 0x5, 0xf0, 0x0, 0x5e, 0x81, 0x4, 0x5f, 0x1, 0xfd, 0xf0, 0x20, 13848752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x5f, 0x80, 0x4, 0x5f, 0x81, 0x5, 0xff, 0xc0, 0x5f, 0x81, 0x4, 0x5f, 0x81, 0xfd, 0xff, 0xe0, 13858752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x5e, 0x80, 0x5, 0x5f, 0x1, 0x5, 0xf0, 0x0, 0x5e, 0x81, 0x5, 0x5f, 0x1, 0xfd, 0xf0, 0x20, 13868752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x5f, 0x80, 0x5, 0x5f, 0x81, 0x5, 0xff, 0xc0, 0x5f, 0x81, 0x5, 0x5f, 0x81, 0xfd, 0xff, 0xe0, 138748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 138848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Layer 7 */ 13898752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x6e, 0x80, 0x4, 0x6f, 0x1, 0x6, 0xf0, 0x0, 0x6e, 0x81, 0x4, 0x6f, 0x1, 0xfe, 0xf0, 0x20, 13908752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x6f, 0x80, 0x4, 0x6f, 0x81, 0x6, 0xff, 0xc0, 0x6f, 0x81, 0x4, 0x6f, 0x81, 0xfe, 0xff, 0xe0, 13918752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x6e, 0x80, 0x5, 0x6f, 0x1, 0x6, 0xf0, 0x0, 0x6e, 0x81, 0x5, 0x6f, 0x1, 0xfe, 0xf0, 0x20, 13928752cc2e13623004dfe804734bb4670b11cb8063Jeannot Breton 0x6f, 0x80, 0x5, 0x6f, 0x81, 0x6, 0xff, 0xc0, 0x6f, 0x81, 0x5, 0x6f, 0x81, 0xfe, 0xff, 0xe0 139348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 139448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 139548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosconst glw::GLsizei gl4cts::GetTextureSubImage::Functional::s_texture_data_compressed_size = 139648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos sizeof(s_texture_data_compressed); //!< Size of compressed texture. 1397