118 lines
4.7 KiB
C++
118 lines
4.7 KiB
C++
|
//
|
||
|
// Copyright (c) 2017 The Khronos Group Inc.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
//
|
||
|
#include "gl_headers.h"
|
||
|
#include "testBase.h"
|
||
|
|
||
|
static int test_renderbuffer_object_info( cl_context context, cl_command_queue queue,
|
||
|
GLsizei width, GLsizei height, GLenum attachment,
|
||
|
GLenum rbFormat, GLenum rbType,
|
||
|
GLenum texFormat, GLenum texType,
|
||
|
ExplicitType type, MTdata d )
|
||
|
{
|
||
|
int error;
|
||
|
|
||
|
// Create the GL render buffer
|
||
|
glFramebufferWrapper glFramebuffer;
|
||
|
glRenderbufferWrapper glRenderbuffer;
|
||
|
void* tmp = CreateGLRenderbuffer( width, height, attachment, rbFormat, rbType, texFormat, texType,
|
||
|
type, &glFramebuffer, &glRenderbuffer, &error, d, true );
|
||
|
BufferOwningPtr<char> inputBuffer(tmp);
|
||
|
if( error != 0 )
|
||
|
return error;
|
||
|
|
||
|
clMemWrapper image = (*clCreateFromGLRenderbuffer_ptr)(context, CL_MEM_READ_ONLY, glRenderbuffer, &error);
|
||
|
test_error(error, "clCreateFromGLRenderbuffer failed");
|
||
|
|
||
|
log_info( "- Given a GL format of %s, input type was %s, size was %d x %d\n",
|
||
|
GetGLFormatName( rbFormat ),
|
||
|
get_explicit_type_name( type ), (int)width, (int)height );
|
||
|
|
||
|
// Verify the expected information here.
|
||
|
return CheckGLObjectInfo(image, CL_GL_OBJECT_RENDERBUFFER, (GLuint)glRenderbuffer, rbFormat, 0);
|
||
|
}
|
||
|
|
||
|
int test_renderbuffer_getinfo( cl_device_id device, cl_context context, cl_command_queue queue, int numElements )
|
||
|
{
|
||
|
GLenum attachments[] = { GL_COLOR_ATTACHMENT0_EXT };
|
||
|
|
||
|
struct {
|
||
|
GLenum rbFormat;
|
||
|
GLenum rbType;
|
||
|
GLenum texFormat;
|
||
|
GLenum texType;
|
||
|
ExplicitType type;
|
||
|
|
||
|
} formats[] = {
|
||
|
{ GL_RGBA8_OES, GL_UNSIGNED_BYTE, GL_RGBA, GL_UNSIGNED_BYTE, kUChar },
|
||
|
{ GL_RGBA32F, GL_FLOAT, GL_RGBA, GL_FLOAT, kFloat }
|
||
|
};
|
||
|
|
||
|
size_t fmtIdx, tgtIdx;
|
||
|
int error = 0;
|
||
|
size_t iter = 6;
|
||
|
RandomSeed seed(gRandomSeed);
|
||
|
|
||
|
// Check if images are supported
|
||
|
if (checkForImageSupport(device)) {
|
||
|
log_info("Device does not support images. Skipping test.\n");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// Loop through a set of GL formats, testing a set of sizes against each one
|
||
|
for( fmtIdx = 0; fmtIdx < sizeof( formats ) / sizeof( formats[ 0 ] ); fmtIdx++ )
|
||
|
{
|
||
|
for( tgtIdx = 0; tgtIdx < sizeof( attachments ) / sizeof( attachments[ 0 ] ); tgtIdx++ )
|
||
|
{
|
||
|
log_info( "Testing Renderbuffer object info for %s : %s : %s\n",
|
||
|
GetGLFormatName( formats[ fmtIdx ].rbFormat ),
|
||
|
GetGLBaseFormatName( formats[ fmtIdx ].rbFormat ),
|
||
|
GetGLTypeName( formats[ fmtIdx ].type ) );
|
||
|
|
||
|
size_t i;
|
||
|
for( i = 0; i < iter; i++ )
|
||
|
{
|
||
|
GLsizei width = random_in_range( 16, 512, seed );
|
||
|
GLsizei height = random_in_range( 16, 512, seed );
|
||
|
|
||
|
if( test_renderbuffer_object_info( context, queue, (int)width, (int)height,
|
||
|
attachments[ tgtIdx ],
|
||
|
formats[ fmtIdx ].rbFormat,
|
||
|
formats[ fmtIdx ].rbType,
|
||
|
formats[ fmtIdx ].texFormat,
|
||
|
formats[ fmtIdx ].texType,
|
||
|
formats[ fmtIdx ].type, seed ) )
|
||
|
{
|
||
|
log_error( "ERROR: Renderbuffer write test failed for GL format %s : %s\n\n",
|
||
|
GetGLFormatName( formats[ fmtIdx ].rbFormat ),
|
||
|
GetGLTypeName( formats[ fmtIdx ].rbType ) );
|
||
|
|
||
|
error++;
|
||
|
break; // Skip other sizes for this combination
|
||
|
}
|
||
|
}
|
||
|
if( i == iter )
|
||
|
{
|
||
|
log_info( "passed: Renderbuffer write test passed for GL format %s : %s\n\n",
|
||
|
GetGLFormatName( formats[ fmtIdx ].rbFormat ),
|
||
|
GetGLTypeName( formats[ fmtIdx ].rbType ) );
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return error;
|
||
|
}
|