mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
graw: fix logic error in pixel format selection
The loop to choose a pixel format for the window was incrementing 'i' after we succeeded in creating the window so if we chose format[0] for graw_create_window_and_screen() we were putting format[1] in the pipe_resource template for creating the render target. This only worked because of the order of the elements in the formats[] array. The graw_xlib.c code now properly compares the requested gallium pixel format against the visual's color layout. Update all the graw demos to fix the off-by-one-i error.
This commit is contained in:
parent
22eeb1b331
commit
4ef955a12a
10 changed files with 96 additions and 54 deletions
|
|
@ -66,9 +66,6 @@ graw_create_window_and_screen( int x,
|
|||
root = RootWindow( graw.display, scrnum );
|
||||
|
||||
|
||||
if (format != PIPE_FORMAT_R8G8B8A8_UNORM)
|
||||
goto fail;
|
||||
|
||||
if (graw.display == NULL)
|
||||
goto fail;
|
||||
|
||||
|
|
@ -88,6 +85,23 @@ graw_create_window_and_screen( int x,
|
|||
exit(1);
|
||||
}
|
||||
|
||||
/* See if the requirested pixel format matches the visual */
|
||||
if (visinfo->red_mask == 0xff0000 &&
|
||||
visinfo->green_mask == 0xff00 &&
|
||||
visinfo->blue_mask == 0xff) {
|
||||
if (format != PIPE_FORMAT_B8G8R8A8_UNORM)
|
||||
goto fail;
|
||||
}
|
||||
else if (visinfo->red_mask == 0xff &&
|
||||
visinfo->green_mask == 0xff00 &&
|
||||
visinfo->blue_mask == 0xff0000) {
|
||||
if (format != PIPE_FORMAT_R8G8B8A8_UNORM)
|
||||
goto fail;
|
||||
}
|
||||
else {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* window attributes */
|
||||
attr.background_pixel = 0;
|
||||
attr.border_pixel = 0;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
* any utility code, just the graw interface and gallium.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "state_tracker/graw.h"
|
||||
#include "pipe/p_screen.h"
|
||||
#include "pipe/p_context.h"
|
||||
|
|
@ -48,16 +49,17 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,300,300,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
if (window == NULL)
|
||||
exit(2);
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
if (ctx == NULL)
|
||||
|
|
|
|||
|
|
@ -433,15 +433,18 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,WIDTH,HEIGHT,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
if (ctx == NULL)
|
||||
exit(3);
|
||||
|
|
|
|||
|
|
@ -497,15 +497,18 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,WIDTH,HEIGHT,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
if (ctx == NULL)
|
||||
exit(3);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
* any utility code, just the graw interface and gallium.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "state_tracker/graw.h"
|
||||
#include "pipe/p_screen.h"
|
||||
#include "pipe/p_context.h"
|
||||
|
|
@ -303,15 +304,18 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,300,300,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
if (ctx == NULL)
|
||||
exit(3);
|
||||
|
|
|
|||
|
|
@ -176,15 +176,18 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,300,300,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
if (ctx == NULL)
|
||||
exit(3);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
* any utility code, just the graw interface and gallium.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "state_tracker/graw.h"
|
||||
#include "pipe/p_screen.h"
|
||||
#include "pipe/p_context.h"
|
||||
|
|
@ -182,13 +183,16 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,300,300,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
|
|
|
|||
|
|
@ -234,13 +234,16 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,300,300,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
|
|
|
|||
|
|
@ -162,13 +162,16 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,300,300,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
|
|
|
|||
|
|
@ -384,13 +384,16 @@ static void init( void )
|
|||
* Also, no easy way of querying supported formats if the screen
|
||||
* cannot be created first.
|
||||
*/
|
||||
for (i = 0;
|
||||
window == NULL && formats[i] != PIPE_FORMAT_NONE;
|
||||
i++) {
|
||||
|
||||
screen = graw_create_window_and_screen(0,0,WIDTH,HEIGHT,
|
||||
for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
|
||||
screen = graw_create_window_and_screen(0, 0, 300, 300,
|
||||
formats[i],
|
||||
&window);
|
||||
if (window && screen)
|
||||
break;
|
||||
}
|
||||
if (!screen || !window) {
|
||||
fprintf(stderr, "Unable to create window\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ctx = screen->context_create(screen, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue